Python 3: Erste TypeError: Scheiben müssen ganze zahlen sein... Aber Sie sind glaube ich
Ich bin versucht zu schreiben, eine Funktion namens "Mitte", der die mittleren 3 Ziffern der ungeraden zahlen, oder die mittleren 4 Ziffern der geraden zahlen. Wenn die Zahl weniger als 5 Ziffern, nur es gibt die ganze Zahl. Hier ist mein Werk:
def middle(x):
mystring=str(x)
length=len(mystring)
if len(mystring)<=5:
return(x)
elif len(mystring)%2==0:
return (mystring[((length/2)-1):((length/2)+3)])
else:
return (mystring[(length//2):((length//2)+3)])
middle (1234567890)
Ich bekomme immer "Typ Fehler: slice-Indizes müssen ganze zahlen sein oder keine oder an_index_method" und das verstehe ich nicht.
- Auch reproduzierbar auf Python 2.7 mit
from __future__ import division
; ohne, dass die Zukunft Anweisung funktioniert es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bist du mit Python 3, ich Wette. [Und Sie sind-mir ist nur aufgefallen das tag das zweite.]
length/2
wird ein float:verwenden
length//2
überall statt.Beachten Sie, dass dies auch dann geschehen, wenn
length
ist auch:/
ergibt immer float. (Die Regel der geringsten überraschung wieder zurück in diesem Fall für Python 3.)Den
//
operator gibt nur einen int, wenn der Zähler einen int -, während es gibt einen Schwimmer, wenn der Zähler ist ein float.Um diese Einschränkung zu überwinden, in Scheiben schneiden, die folgende Funktion kann verwendet werden:
Nun
intslice(10/10,10/2)
zurückslice(1,5)