IndexError: list index out of range, хотя такой ошибки не должно возникнуть
Делаю программу, которая рандомно генерирует слово из массива:
from random import randint
print("Начало")
while True:
print(["rare", "rare", "rare" "superrare", "superrare", "superrare", "epic", "epic", "mythic", "mythic", "legendary"][randint(0, 10)])
Вот что ввыводит:
Начало
superrare
mythic
epic
legendary
mythic
mythic
mythic
mythic
superrare
mythic
rare
и ошибка:
Traceback (most recent call last):
File "/sysroot/home/user/PycharmProject/Lunx/main.py", line 9, in <module>
print(["rare", "rare", "rare" "superrare", "superrare", "superrare", "epic", "epic", "mythic", "mythic", "legendary"][randint(0, 10)])
IndexError: list index out of range
И у меня возникает вопрос: почему?
Всего элементов в массиве: 11
randint(0, 10) генерирует случайное число от 0 до 10, что превращается в индекс массива
Что не так?
Python 3.8 (PyCharm Community Edition)
Ответы (4 шт):
Я заметил следующее:
from random import randint
print("Начало")
list1 = ["rare", "rare", "rare" "superrare", "superrare", "superrare", "epic", "epic", "mythic", "mythic", "legendary"]
print(len(list1))
print(list1)
while True:
print(list1[randint(0, 10)])
Вывод следующий:
['rare', 'rare', 'raresuperrare', 'superrare', 'superrare', 'epic', 'epic', 'myt
hic', 'mythic', 'legendary']
Обратите внимание на 3-й (по индексу 2) элемент списка. Python склеил две строки "rare" "superrare"
Поэтому элементов в массиве не 11, а 10. Надеюсь мой ответ помог
потому что всего у вас в массиве 11 элементов
когда вы используете randint(0, 11) то получаете числа от 0 до 11 включительно
а у вас значения от [0] до [10] (это как раз 11 элементов), в когда вдруг выпадает 11 и выполняется обращение к [11] - тут и происходит выход за диапазон
поэтому надо делать так:
random.randint(0, len(arr) - 1)
а на самом деле для вашей цели есть специальный метод choice
random.choice(arr)
который все сделает сам - выберет случайно один из элементов массива
вот лучший вариант:
import random
words = ["rare", "rare", "rare" "superrare", "superrare", "superrare", "epic", "epic", "mythic", "mythic", "legendary"]
while True:
print(random.choice(words))
Я понял. У меня допущена ошибка в ["rare", "rare", "rare" "superrare", "superrare", "superrare", "epic", "epic", "mythic", "mythic", "legendary"] и там есть "rare" "superrare". Также можно использовать random.choice, но я просто не хотел его импортировать