Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python NameError:'xrange' 이름이 정의되지 않았습니다.

Python 3에서는 xrange 함수가 제거되었습니다. Python 3 프로그램에서 xrange 함수를 사용하려고 하면 NameError: name ‘xrange’ is not defined가 발생합니다. 오류.

이 가이드에서는 이 오류의 의미와 오류가 발생할 수 있는 이유에 대해 설명합니다. 코드에서 수정하는 방법을 배울 수 있도록 이 오류의 예를 설명합니다.

NameError:'xrange' 이름이 정의되지 않았습니다.

Python 2에서 xrange 함수를 사용하면 숫자 범위를 만들 수 있습니다. 다음 코드 조각을 고려하십시오.

print(xrange(0, 3))

코드는 [0, 1, 2]를 반환하며, 이는 0과 3(3 제외) 범위의 모든 숫자입니다. xrange() 함수는 숫자 목록을 반환합니다.

Python 3은 xrange()를 제거했습니다. range()라는 새로운 함수를 선호합니다. range() xrange()와 같은 함수 , 숫자 범위를 생성합니다.

xrange()에는 두 가지 차이점이 있습니다. 및 range();

  • xrange()range() 이름이 다릅니다.
  • xrange() 함수는 숫자 목록을 생성합니다. range() 함수는 개체를 생성합니다.

range() 함수가 객체를 생성하므로 숫자 목록을 보려면 목록으로 변환해야 합니다. 그렇지 않으면 이 두 가지 방법이 같은 방식으로 작동합니다.

예시 시나리오

우리는 카드 게임 리더보드의 맨 위에 있는 처음 몇 명의 플레이어를 표시하는 프로그램을 작성할 것입니다. 시작하려면 리더보드를 목록으로 선언해 보겠습니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

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

다음으로 사용자에게 보고 싶은 점수를 묻습니다.

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

사용자가 입력한 값을 정수로 변환합니다. xrange() 함수는 정수만 지원합니다.

다음으로 for 루프를 사용하여 리더보드 목록을 반복해 보겠습니다. 사용자가 콘솔에서 보기를 요청한 결과 수만 표시됩니다.

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

xrange()를 사용합니다. 0과 사용자가 삽입한 숫자 사이의 숫자 범위를 생성하는 함수입니다. for 루프에서 print()를 사용합니다. xrange()의 숫자와 상관관계가 있는 리더보드 항목을 출력하는 명령문 루프가 보고 있는 목록입니다.

플레이어 이름 옆에 "l"에 1을 더한 값을 출력합니다. 이것은 우리가 그들의 위치를 ​​볼 수 있도록 합니다. 목록은 0부터 인덱싱되기 때문에 "l"에 1을 추가합니다. 이렇게 하면 목록의 첫 번째 플레이어가 "0" 위치에 있는 등이 방지됩니다.

코드를 실행하고 어떤 일이 일어나는지 봅시다:

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

프로그램에서 오류를 반환합니다.

해결책

xrange()를 사용했습니다. 숫자의 범위를 생성하는 함수입니다. Python 2에서는 이것이 유효합니다. 우리는 Python 3을 사용하여 프로그램을 실행하고 있습니다. 즉, xrange()를 참조할 수 없습니다. 함수.

오류를 해결하려면 xrange()를 대체해야 합니다. range() 사용 방법:

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

이 사용 사례의 경우 xrange()range() 동일한 결과를 반환합니다. 작동하는지 확인하기 위해 코드를 실행해 보겠습니다.

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

우리 프로그램은 리더보드의 처음 두 위치에 나타나는 토너먼트의 플레이어 이름을 성공적으로 표시합니다.

xrange() 메소드 재정의

이 문제에 대한 잠재적인 해결책은 프로그램 시작 시 range()와 같은 xrange라는 변수를 정의하는 것입니다. 함수:

xrange = range

이것은 이 오류에 대한 좋은 해결책이 아닙니다. 이는 단순히 기존 메서드의 이름을 바꾸는 문제를 피하고 있기 때문입니다. 누군가가 Python 3 코드베이스를 읽고 xrange()를 보는 것은 혼란스러울 것입니다. xrange를 변수로 정의한 경우에도 마찬가지입니다.

가장 좋은 해결책은 xrange()의 이름을 바꾸는 것입니다. range()에 대한 명령문 코드베이스가 Python 3에서 작동하도록 필요한 변경을 수행합니다.

결론

xrange()를 사용하려고 하면 "NameError:name 'xrange' is not defined" 오류가 발생합니다. Python 3에서 숫자 범위를 생성하는 메서드입니다. 이 오류를 해결하려면 range()를 사용하도록 코드를 업데이트하십시오. Python 3과 함께 제공되는 메서드입니다.

range() xrange()의 Python 3 대체품입니다. . 이제 전문가처럼 이 오류를 해결하는 데 필요한 노하우가 생겼습니다!