스택큐힙리스트

인덱스 오류: 리스트 할당 인덱스가 범위를 벗어났습니다. Python 3 본문

카테고리 없음

인덱스 오류: 리스트 할당 인덱스가 범위를 벗어났습니다. Python 3

스택큐힙리스트 2024. 1. 5. 11:37
반응형

누군가는 이 코드에서 왜 IndexError를 받는지 아이디어를 가지고 있나요?


global gegner
global gegnerhp
gegner = []
gegberhp = []
for i in range(1, anzahlgegner):
random = randint(1, 5)
if random == 1:
gegner[i] = goblin
gegnerhp[i] = randint(10, 50)
elif random == 2:
gegner[i] = ghost
gegnerhp[i] = randint(10, 50)
elif random == 3:
gegner[i] = hound
gegnerhp[i] = randint(10, 50)
elif random == 4:
gegner[i] = wolf #LINE 147
gegnerhp[i] = randint(10, 50)
elif random == 5:
gegner[i] = goblin
gegnerhp[i] = randint(10, 50)
print(* {0} with {1} HP.format(gegner[i]), gegnerhp[i])

예를 들어, 랜덤이 4 일 때 다음 오류가 발생합니다:


  File C:/Users/Fabio/PycharmProjects/test\dungeon.py, line 147, in run
gegner[i] = wolf
IndexError: list assignment index out of range

리스트 / 배열의 선언이 잘못된 것 같습니까?...

답변 1

여기에는 몇 가지 오해가 있으며, 귀하가 특별히 질문한 것만 다루는 것이 올바르게 도움이 되지 않을 것 같으므로, 저는 그 이상의 것을 할 것입니다.


먼저, 목록이 있습니다. 채워지지 않은 리스트인 gegner와 gegnerhp를 생성하고, 이러한 목록에 몇 가지 항목을 추가하고자 하는 것 같으며, 색인을 지정하여 수행하려고 하고 있습니다. 파이썬에서는 목록 색인이 0부터 시작합니다.


즉, 다음 목록에서:


>>> gegner = [늑대, 사냥개, 고블린]
>>> print(gegner[0])
늑대
>>> print(gegner[1])
사냥개

색인 '1'은 목록에서 두 번째 항목입니다.


코드에서 range(1, anzhalgegner)은 1부터 설정한 anzhalgegner까지 증가합니다. 첫 번째 반복에서 코드는 목록 gegner의 위치 1에 값을 할당하려고 시도하지만, 목록에는 위치 0에 아무 것도 없으므로 위치 1에 아무 것도 할당할 수 없습니다.

시작하기 위해 가장 간단한 변경은 범위를 0에서 시작하는 것입니다.


그것을 시도해 본 후에는 목록에 항목을 배치하는데 직접 위치를 지정하는 대신 (list[index] = value) 리스트 끝에 항목을 추가하는 것만 하는 것을 고려하여 append 메서드를 사용하는 것이 좋습니다. 그러면 다음과 같이 보일 것입니다:


random == 1이면:
gegner.append(goblin)
gegnerhp.append(randint(10,50))

답변 2

Python 3에서 발생하는 IndexError: list assignment index out of range 오류에 대해 알아보겠습니다.
이 오류는 파이썬 프로그래밍에서 자주 발생하는데, 리스트에 없는 인덱스를 할당하려고 할 경우 발생합니다. 즉, 리스트 요소의 범위를 초과하여 할당하려고 할 때 이 오류가 발생합니다.
이 오류가 발생하는 이유는 주로 다음과 같습니다.
첫째, 리스트의 길이보다 큰 인덱스를 사용하여 값을 할당할 때 발생합니다. 예를 들어, 리스트에 3개의 요소가 있다면 인덱스는 0, 1, 2까지 유효하며, 3 이상의 인덱스를 사용하면 오류가 발생합니다.
둘째, 빈 리스트에 값을 할당하려고 할 때도 발생합니다. 초기에는 아무런 요소가 없지만, 비어있는 리스트에 값을 할당하려고 하면 오류가 발생합니다.
이 오류를 해결하기 위해서는 다음과 같은 방법들을 사용할 수 있습니다.
첫째, 리스트의 범위를 초과하지 않도록 할당하려는 인덱스를 유효한 범위 내로 조정합니다. 리스트의 요소 개수를 고려하여 인덱스에 주의해야 합니다.
둘째, 리스트가 비어있는지 확인한 후에 값이 할당되도록 합니다. 리스트에 요소가 없다면 append() 함수를 사용하여 새로운 값을 추가할 수 있습니다.
예를 들어, 다음과 같은 코드에서 IndexError가 발생합니다.
```
my_list = [1, 2, 3]
my_list[3] = 4
```
이 코드는 인덱스 3에 값을 할당하려고 하는데, my_list의 길이는 3이므로 IndexError가 발생합니다. 이를 수정하기 위해서는 다음과 같이 코드를 변경할 수 있습니다.
```
my_list = [1, 2, 3]
my_list.append(4)
```
이렇게 변경하면 my_list의 마지막에 4라는 값이 추가됩니다.
따라서, Python 3에서 발생하는 IndexError: list assignment index out of range 오류는 리스트의 인덱스를 유효한 범위 내에서 할당해야 한다는 것을 염두에 두어야 합니다. 또한, 빈 리스트에 값을 할당할 때도 주의해야 합니다. 이를 잘 고려하여 오류를 방지할 수 있습니다.

반응형
Comments