2014-06-16 22 views
5

Sách hướng dẫn Python tôi đang sử dụng hơi lỗi thời, nhưng tôi đã quyết định tiếp tục sử dụng nó với phiên bản Python mới nhất để thực hành gỡ lỗi. Đôi khi có một vài điều trong mã của cuốn sách mà tôi học đã thay đổi trong Python cập nhật, và tôi không chắc chắn nếu đây là một trong số họ.Dài Int chữ - Cú pháp không hợp lệ?

Trong khi sửa chương trình sao cho nó có thể in các giá trị giai thừa dài hơn, nó sử dụng một hàm dài để giải quyết vấn đề. Mã gốc như sau:

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

Phiên bản int dài như sau:

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

Nhưng chạy phiên bản int dài của chương trình trong vỏ Python tạo ra các lỗi sau:

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

(Hãy xem xét toàn bộ sự cố có thể đã được chứng minh khi thử và hiển thị kết quả của 'fact = 1L', phần còn lại của mã chỉ là hành lý vì lợi ích của câu hỏi) – user2864740

+0

@ user2864740: nhưng nếu bạn giả định rằng Python 2 có lý do để thêm hậu tố 'L', thì có lẽ phần còn lại của ngữ cảnh là cần thiết để xác định cách dịch nó sang Python 3? Giả định là sai, nhưng ai đó mới với Python 2 không thể biết điều này. –

+0

@MartijnPieters Không cần phải tái tạo sự cố. Vấn đề là mã được cung cấp dẫn đến lỗi cú pháp. Điều này có thể được sao chép với 'thực tế = 1L' mà sẽ thất bại trong trường hợp ở trên thất bại mà sẽ thất bại là tốt. – user2864740

Trả lời

15

Chỉ cần thả L; tất cả số nguyên trong Python 3 dài. long bằng Python 2 giờ là loại tiêu chuẩn int bằng Python 3.

Mã gốc không phải sử dụng số nguyên dài; Python 2 chuyển sang loại long một cách minh bạch khi cần anyway.

Bạn chỉ có thể cài đặt trình thông dịch Python 2.7 thay vào đó, làm việc theo cách của bạn thông qua cuốn sách mà không cần phải tìm hiểu cách chuyển mã Python 2 sang Python 3 trước. Python 2 sẽ không biến mất! Hoặc lấy một cuốn sách khác; Think Python, 2nd edition được cập nhật đầy đủ cho Python 3 và tự do có sẵn trực tuyến, hoặc pick any of the other Stack Overflow Python chatroom recommended books and tutorials

Các vấn đề liên quan