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

Python TypeError:목록 인덱스는 부동 소수점이 아닌 정수 또는 슬라이스여야 합니다.

목록은 인덱스 번호를 사용하여 인덱싱됩니다. 이 숫자는 정수 값입니다. 부동 소수점 숫자를 사용하여 목록에서 항목에 액세스하려고 하면 "TypeError:목록 인덱스는 정수 또는 슬라이스여야 하며 부동 소수점이 아닙니다." 오류가 발생합니다.

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

TypeError:목록 인덱스는 부동 소수점이 아닌 정수 또는 슬라이스여야 합니다.

항목이 목록에 추가되면 항목에 인덱스 값이 할당됩니다. 인덱스 값은 0에서 시작하여 목록의 새 항목마다 1씩 증가합니다. 이렇게 하면 개별 항목에 쉽게 액세스할 수 있습니다. 목록의 첫 번째 항목에는 인덱스 0이 있고 두 번째 항목에는 인덱스 1이 있는 식입니다.

부동 소수점 숫자를 사용하여 목록에서 항목을 검색할 수 없습니다. 부동 소수점 숫자는 다른 데이터 유형입니다. 결과적으로 Python에서는 다르게 처리됩니다. 목록은 정수를 사용하여 인덱싱되기 때문에 목록에는 정수 인덱스 번호가 필요합니다.

예시 시나리오

우리는 테니스 토너먼트 참가자에 대한 정보를 검색하는 프로그램을 만들 것입니다. 시작하려면 목록 목록을 정의하십시오. 이 목록에는 토너먼트의 모든 참가자에 대한 정보가 포함됩니다.

participants = [
	    ["Alex Rogers", 5, 2],
	    ["Linda Patterson", 3, 4],
	    ["Ruby Spencer", 1, 6]
]

참가자 목록에는 세 가지 목록이 있습니다. 이들 각각은 참가자의 이름, 승리한 게임 수, 패배한 게임 수를 순서대로 나열합니다.

값은 플레이어가 승리한 횟수로 정렬됩니다.

다음으로 사용자에게 정보를 보고 싶은 플레이어를 묻습니다. input() 문을 사용하여 이 작업을 수행합니다.

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

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

player_to_find = float(input("Enter the leaderboard position of the player you want to find: "))

사용자가 삽입하는 숫자는 리더보드에서 플레이어의 위치와 일치해야 합니다. 알렉스 로저스가 먼저입니다. 그에 대해 알아보기 위해 사용자는 1을 삽입합니다.

나중에 코드에서 인덱싱을 사용할 것이기 때문에 사용자가 삽입한 값을 float로 변환합니다. 인덱스 값은 숫자이므로 작업하려면 숫자가 필요합니다.

다음으로 인덱싱을 사용하여 사용자가 찾고 있는 플레이어를 검색합니다.

player_info = participants[player_to_find - 1]

사용자가 삽입한 값을 사용하여 "참가자" 목록에서 개별 플레이어의 기록을 찾습니다. 목록이 0부터 색인화되고 리더보드의 첫 번째 사람이 1번 위치에 있기 때문에 "player_to_find" 값에서 1을 뺍니다.

다음으로 이 참가자에 대한 세부 정보를 콘솔에 인쇄합니다.

print("Name: {}".format(player_info[0]))
print("Wins: {}".format(player_info[1]))
print("Losses: {}".format(player_info[2]))

플레이어의 이름, 승리한 게임 수, 패배한 게임 수를 콘솔에 표시합니다. 프로그램을 실행해 보겠습니다.

Enter the leaderboard position of the player you want to find: 2
Traceback (most recent call last):
 File "main.py", line 9, in <module>
	    player_info = participants[player_to_find + 1]
TypeError: list indices must be integers or slices, not float

리더보드 위치를 프로그램에 삽입하면 오류가 발생합니다.

해결책

사용자가 프로그램에 삽입한 값을 float로 변환합니다. float()를 사용하여 이 작업을 수행합니다. 방법.

"참가자" 목록에서 항목을 검색할 때 부동 소수점 숫자로 검색하기 때문에 이것은 실수입니다. 이로 인해 오류가 발생합니다.

프로그램을 수정하려면 사용자가 삽입한 값을 부동 소수점 숫자 대신 정수로 변환해야 합니다. int()를 사용하여 이 작업을 수행할 수 있습니다. 방법:

player_to_find = int(input("Enter the leaderboard position of the player you want to find: "))

이제 정수 값이 있으므로 인덱싱을 사용하여 목록에서 항목을 검색할 수 있습니다. 코드를 실행하고 어떤 일이 발생하는지 확인하십시오.

Enter the number of the player you want to find: 2
Name: Linda Patterson
Wins: 3
Losses: 4

우리 코드는 리더보드에서 2위인 개인의 플레이어 기록을 성공적으로 보여줍니다.

결론

"TypeError:list indexes must be integers or slices, not float" 오류는 부동 소수점 숫자를 사용하여 목록에서 항목에 액세스하려고 할 때 발생합니다. 이 오류를 해결하려면 인덱스 값으로 목록의 항목에 액세스할 때 정수만 사용해야 합니다.

이제 전문가처럼 코드에서 이 오류를 수정할 준비가 되었습니다!