Computer >> Máy Tính >  >> Lập trình >> Python

Python NameError:name ‘xrange’ không được xác định Giải pháp

Trong Python 3, hàm xrange đã bị loại bỏ. Nếu bạn cố gắng sử dụng hàm xrange trong chương trình Python 3, bạn sẽ gặp phải NameError: name ‘xrange’ is not defined lỗi.

Trong hướng dẫn này, chúng ta sẽ thảo luận về lỗi này có nghĩa là gì và tại sao bạn có thể gặp phải lỗi này. Chúng ta sẽ thảo luận về một ví dụ về lỗi này để bạn có thể tìm hiểu cách khắc phục nó trong mã của mình.

NameError:tên ‘xrange’ không được xác định

Trong Python 2, hàm xrange cho phép bạn tạo một dải số. Hãy xem xét đoạn mã sau:

print(xrange(0, 3))

Mã của chúng tôi trả về [0, 1, 2], là tất cả các số trong phạm vi 0 và 3 (không bao gồm 3). xrange() hàm trả về một danh sách các số.

Python 3 đã loại bỏ xrange() có lợi cho một hàm mới được gọi là range (). range() hàm, như xrange() , tạo ra một loạt các số.

Có hai điểm khác biệt giữa xrange()range();

  • xrange()range() có các tên khác nhau.
  • xrange() hàm tạo ra một danh sách các số. range() hàm tạo một đối tượng.

range() hàm tạo một đối tượng, bạn phải chuyển đổi nó thành một danh sách nếu bạn muốn xem một danh sách các số. Nếu không, hai phương thức này hoạt động theo cùng một cách.

Một tình huống mẫu

Chúng tôi sẽ viết một chương trình hiển thị một số người chơi đầu tiên đứng đầu bảng xếp hạng trò chơi bài. Để bắt đầu, hãy khai báo bảng thành tích của chúng tôi dưới dạng danh sách:

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

leaderboard = ["Alex", "Jonas", "Emma", "Kate"]

Tiếp theo, chúng tôi sẽ hỏi người dùng xem họ muốn xem bao nhiêu điểm:

to_view = int(input("How many scores would you like to view? "))

Chúng tôi chuyển đổi giá trị mà người dùng chèn thành một số nguyên. Điều này là do xrange() hàm chỉ hỗ trợ số nguyên.

Tiếp theo, hãy lặp lại danh sách bảng xếp hạng của chúng tôi bằng vòng lặp for. Chúng tôi sẽ chỉ hiển thị số lượng kết quả mà người dùng đã yêu cầu để xem trên bảng điều khiển:

for l in xrange(0, to_view):
	print(l + 1, leaderboard[l])

Chúng tôi sử dụng xrange() hàm để tạo ra một dải số từ 0 đến số mà người dùng đã chèn vào. Trong vòng lặp for của chúng tôi, chúng tôi sử dụng print() câu lệnh để in ra mục nhập bảng xếp hạng tương ứng với số trong xrange() danh sách mà vòng lặp của chúng tôi đang xem.

Chúng tôi in ra giá trị của “l” cùng với một giá trị cùng với tên của một người chơi. Điều này cho phép chúng tôi thấy vị trí của họ. Bởi vì danh sách được lập chỉ mục từ 0, chúng tôi thêm một danh sách vào “l”. Điều này ngăn người chơi đầu tiên trong danh sách của chúng tôi ở vị trí “0”, v.v.

Hãy chạy mã của chúng tôi và xem điều gì sẽ xảy ra:

How many scores would you like to view? 2
Traceback (most recent call last):
  File "main.py", line 5, in <module>
	for l in xrange(0, to_view):
NameError: name 'xrange' is not defined

Chương trình của chúng tôi trả về một lỗi.

Giải pháp

Chúng tôi đã sử dụng xrange() hàm để tạo ra một loạt các số. Trong Python 2, điều này sẽ hợp lệ. Chúng tôi đang sử dụng Python 3 để chạy chương trình của mình, có nghĩa là chúng tôi không thể tham chiếu đến xrange() chức năng.

Để giải quyết lỗi của chúng tôi, chúng tôi cần thay thế xrange() với range() phương pháp:

for l in range(0, to_view):
	print(l + 1, leaderboard[l])

Đối với trường hợp sử dụng này, cả xrange()range() sẽ trả về cùng một kết quả. Hãy chạy mã của chúng tôi để xem nó có hoạt động không:

How many scores would you like to view? 2
1 Alex
2 Jonas

Chương trình của chúng tôi hiển thị thành công tên của những người chơi trong giải đấu xuất hiện ở hai vị trí đầu tiên trên bảng thành tích.

Định nghĩa lại phương thức xrange ()

Giải pháp tiềm năng cho vấn đề này là xác định một biến có tên xrange ở đầu chương trình của bạn bằng với range() chức năng:

xrange = range

Đây không phải là một giải pháp tốt cho lỗi này. Điều này là do bạn chỉ tránh được vấn đề đổi tên các phương thức hiện có. Sẽ rất khó hiểu nếu ai đó đọc qua cơ sở mã Python 3 và xem xrange() , ngay cả khi bạn đã xác định xrange là một biến.

Giải pháp tốt nhất là đổi tên xrange() của bạn câu lệnh cho range() và thực hiện bất kỳ thay đổi cần thiết nào để đảm bảo cơ sở mã của bạn hoạt động bằng Python 3.

Kết luận

Lỗi “NameError:name‘ xrange ’không được xác định” xuất hiện khi bạn cố gắng sử dụng xrange() để tạo một dải số trong Python 3. Để giải quyết lỗi này, hãy cập nhật mã của bạn để sử dụng range() phương thức đi kèm với Python 3.

range() là sự thay thế Python 3 cho xrange() . Bây giờ bạn có bí quyết cần thiết để giải quyết lỗi này như một người chuyên nghiệp!