2014-06-16 25 views
5

Kullanmakta olduğum Python ders kitabı biraz modası geçmiş, ancak hata ayıklama yapmak için Python'un en son sürümü ile kullanmaya devam etmeye karar verdim. Bazen kitabın kodunda, güncellenmiş Python'da değiştirdiğim birkaç şey var ve bunlardan biri olup olmadığından emin değilim.Uzun Int literal - Geçersiz Sözdizimi?

Bir programı daha uzun faktöryel değerler yazdıracak şekilde sabitlerken, sorunu çözmek için uzun bir int kullanır. Orijinal kod aşağıdaki gibidir:

:

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

Ama Python kabukta programın uzun int sürümünü çalıştıran aşağıdaki hata üretir: aşağıdaki gibi

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

uzun int versiyonu

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

pick any of the other Stack Overflow Python chatroom recommended books and tutorials (tüm sorun ortaya olabilirdi olduğunu düşünebilir; kodun kalan uğruna sadece bagaj olduğu (soru) – user2864740

+0

@ user2864740: Fakat Python 2'nin 'L' postfixini eklemek için bir nedeni olduğu varsayımını yaparsanız, belki de kullanımının Python 3'e nasıl dönüştürüleceğini belirlemek için içeriğin geri kalanı gerekiyordu? Varsayım yanlıştır, ancak Python 2'ye yeni biri bunu bilemez. –

+0

@MartijnPieters Sorunu yeniden üretmek gerekmez. Sorun, sağlanan kod bir sözdizimi hatasıyla sonuçlanır. Bu, yukarıdaki başarısızlıkların da başarısız olacağı durumlarda başarısız olan 'fact = 1L' ile yeniden üretilebilir. – user2864740

cevap

15

Sadece L; Python 3'teki all tamsayıları uzun. Python 2'deki long şimdi Python 3'teki standart int türüdür.

Orijinal kodun uzun bir tamsayı kullanması gerekmez; Python 2, long tipine ihtiyaç duyulduğunda saydam olarak numarasına geçiş yapar.

Bunun yerine bir Python 2.7 yorumlayıcısını yükleyebilirsiniz, önce Python 2'yi Python 3 kodunun ilk olarak nasıl bağlanacağını öğrenmek zorunda kalmadan kitabın içinden geçebilirsiniz. Python 2 henüz gitmiyor! Veya farklı bir kitap al; Think Python, 2nd edition tamamen Python 3 ve serbestçe kullanılabilir çevrim içi güncellenir veya çalışırken ve `gerçeği = 1L` sonucunu gösterirken

İlgili konular