2014-06-16 5 views
5

Le livre d'exercices Python que j'utilise est légèrement dépassé, mais j'ai décidé de continuer à l'utiliser avec la dernière version de Python pour pratiquer le débogage. Parfois, il y a quelques choses dans le code du livre que j'apprends ont changé dans le Python mis à jour, et je ne suis pas sûr que ce soit l'un d'entre eux. Tout en corrigeant un programme afin qu'il puisse imprimer des valeurs factorielles plus longues, il utilise un int long pour résoudre le problème. Le code d'origine est la suivante:Littéral long Int - Syntaxe invalide?

#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() 

La version longue int est comme suit:

#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() 

Mais en cours d'exécution de la version longue int du programme dans le shell Python génère l'erreur suivante:

>>> 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

(Considérer que tout le problème aurait pu être démontré en essayant et montrant le résultat de 'fact = 1L'; le reste du code est juste un bagage pour le bien de la question) – user2864740

+0

@ user2864740: mais si vous faites l'hypothèse que le Python 2 avait une raison d'ajouter le postfix 'L', alors peut-être que le reste du contexte était nécessaire pour déterminer comment traduire son utilisation en Python 3? L'hypothèse est fausse, mais quelqu'un de nouveau à Python 2 ne peut pas le savoir. –

+0

@MartijnPieters Il n'est pas nécessaire de reproduire le problème. Le problème est que le code fourni entraîne une erreur de syntaxe. Cela peut être reproduit avec 'fact = 1L' qui échouera là où échoue ci-dessus qui échouera également. – user2864740

Répondre

15

Il suffit de déposer le L; tous les entiers dans Python 3 sont longs. Ce qui était long dans Python 2 est maintenant le type standard int en Python 3.

Le code original n'a pas besoin d'utiliser un entier long non plus; Python 2 bascule au type long de manière transparente au besoin de toute façon.

Vous pouvez simplement installer un interpréteur Python 2.7 à la place, parcourez le livre sans avoir à apprendre comment porter du code Python 2 vers Python 3 en premier. Python 2 ne s'en va pas pour le moment! Ou prenez un livre différent; Think Python, 2nd edition est entièrement mis à jour pour Python 3 et disponible gratuitement en ligne, ou pick any of the other Stack Overflow Python chatroom recommended books and tutorials

Questions connexes