2014-06-16 17 views
5

Das Python-Tutorial-Buch, das ich verwende, ist etwas veraltet, aber ich habe beschlossen, es weiterhin mit der neuesten Version von Python zu verwenden, um das Debuggen zu üben. Manchmal gibt es ein paar Dinge im Code des Buches, die ich im aktualisierten Python geändert habe, und ich bin mir nicht sicher, ob dies einer von ihnen ist.Long Int Literal - Ungültige Syntax?

Während ein Programm zur Festsetzung, so dass es faktorielles Werte mehr drucken können, verwendet es eine lange int das Problem zu lösen. Der ursprüngliche Code wird wie folgt:

#factorial.py 
# Program to compute the factorial of a number 
# Illustrates for loop with an accumulator 

def main(): 
    n = input("Please enter a whole number: ") 
    fact = 1 
    for factor in range(int(n), 0, -1): 
     fact = fact * factor 

    print("The factorial of ", n, " is ", fact) 

main() 

Die lange int Version ist wie folgt:

#factorial.py 
# Program to compute the factorial of a number 
# Illustrates for loop with an accumulator 

def main(): 
    n = input("Please enter a whole number: ") 
    fact = 1L 
    for factor in range(int(n), 0, -1): 
     fact = fact * factor 

    print("The factorial of ", n, " is ", fact) 

main() 

Aber läuft die lange int Version des Programms in der Python-Shell erzeugt den folgenden Fehler:

>>> import factorial2 
Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    import factorial2 
    File "C:\Python34\factorial2.py", line 7 
    fact = 1L 
      ^
SyntaxError: invalid syntax 
+1

(Bedenken Sie, dass das gesamte Problem hätte demonstriert werden können, wenn Sie das Ergebnis von 'fact = 1L' versuchen und zeigen, der Rest des Codes ist nur Gepäck für Sake die Frage) – user2864740

+0

@ user2864740: aber wenn man davon ausgehen, dass der Python 2 hatte einen Grund hinzuzufügen wurde den 'L' postfix, dann vielleicht der Rest des Kontextes, um zu bestimmen, wie erforderlich, deren Nutzung zu Python 3 zu übersetzen? Die Annahme ist falsch, aber jemand, der Python 2 neu ist, kann das nicht wissen. –

+0

@MartijnPieters Es ist nicht erforderlich, das Problem zu reproduzieren. Das Problem ist, dass der angegebene Code zu einem Syntaxfehler führt. Dies kann mit "fact = 1L" reproduziert werden, was fehlschlägt, wenn das obige fehlschlägt, was ebenso fehlschlagen wird. – user2864740

Antwort

15

fallen nur die L; alle Integer in Python 3 sind lang. Was war long in Python 2 ist jetzt der Standard int geben Sie in Python 3 ein.

Der ursprüngliche Code muss auch keine lange Ganzzahl verwenden; Python 2 schaltet auf den long Typ transparent nach Bedarf auf jeden Fall. stattdessen arbeiten Sie Ihren Weg durch das Buch

Sie könnten nur eine Python 2.7 Interpreter installieren, ohne, wie 3-Code zunächst auf Port Python 2 Python lernen zu müssen. Python 2 geht noch nicht weg! Oder hol dir ein anderes Buch;ist vollständig aktualisiert für Python 3 und frei verfügbar online, oder pick any of the other Stack Overflow Python chatroom recommended books and tutorials