2016-03-30 19 views
0

Ich versuche derzeit, Python aus einem Buch zu lernen, und ich stoße auf ein Problem. Im Grunde soll ich ein Programm schreiben, um etwas zu tun, die Collatz-Sequenz genannt wird. Der Code lautet wie folgt:Konvertieren von Str in Int in Python

print("Please enter a number") 
number = input() 

int(number) 

while number > 1: 
     collatz() 

def collatz(number): 
     if number % 2 == 0: 
       number = number // 2 
       print(number) 
       return number 
     else: 
       number = 3 * number + 1 
       print(number) 
       return number 

Also, wenn ich versuche, den Code oben auszuführen, habe ich folgende Ausgabe:

RESTART: C:/Users/Gillian/AppData/Local/Programs/Python/Python35-32/Collatz.py
Please enter a number
12
Traceback (most recent call last): File "C:/Users/Gillian/AppData/Local/Programs/Python/Python35-32/Collatz.py", line 6, in
while number > 1:
TypeError: unorderable types: str() > int() Blockquote

Offensichtlich meine Variable wird als String gelesen werden, wenn es sein sollte eine ganze Zahl. Meine Frage ist - warum? Ich dachte, dass der Teil in Zeile 4, wo ich den Datentyp von Zahl zu int ändere, das beheben sollte, aber es tat es nicht.

Die Anweisungen für das, was ich zu erreichen versuche, wenn das für meine Frage wichtig ist, sind here am Ende der Seite.

+0

Sie geben das Ergebnis von 'int (number)' nichts zu. Berücksichtigen Sie 'number = int (number)'. – larsks

+0

Super, danke. –

Antwort

1

Nachdem ich int(number), müssen Sie es number wieder zuweisen:

number = int(number) 

Dies liegt daran, int(number) nicht von selbst number nicht ändert, es gibt einfach eine Version davon Typ integer gegossen.

Sie können auch Ihren Code vereinfachen, indem Eingabe kombiniert und Gießen in einem:

number = int(raw_input("Please enter a number")) 

in Python 2.7. Ersetzen Sie in Python 3 raw_input durch input.

+0

ahh du schlägst mich durch sekunden: P erzähl ihm von der kombination seiner prompt und schlecht löschen meins: P –

+0

Deal, und fertig. :) –

+0

@GillianWeisgram Besser um Vergebung bitten als Erlaubnis. :) Aber ja, feuern Sie weg. –