TohaTony
По поводу “Можно и так, но повторные проходы не рекомендуются.” - можно подробней?
Если ты один раз что-то нашёл, то искать повторно то же самое не рекомендуется. Поэтому нужно либо сразу задать пары (индекс значение), либо получить их при единственном поиске. Если сразу задать пары, то потом может понадобиться отдельно выводить слова и придётся отделять индексы. Поэтому выбирается второй вариант - перечислить их только при поиске.
Операция .index() для однажды найденного слова снова выполняет поиск этого слова, чтобы получить его индекс. Это два одинаковых поиска.
А randint() требует вычисления длины - операция по времени такая же, как и поиск. А у некоторых последовательностей вообще длина не вычисляется.
Пример:
doza_and
Конечно можно по другому.
>>> import random
>>>
>>> WORDS = (i for i in ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан"))
>>> iword = random.randint(0,5)
>>> word = WORDS[iword]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'generator' object is not subscriptable
>>>
А вот enumerate() здесь будет работать, потому что ему длина не нужна.
>>> import random
>>>
>>> WORDS = (i for i in ("питон", "мышь", "кислород", "карандаш", "ответ", "стакан"))
>>> index, word = random.choice(tuple(enumerate(WORDS)))
>>> index, word
(1, 'мышь')
>>>
Это к тому, что если ты сделал функцию, то встаёт вопрос, что она будет принимать в виде списка слов: кортежи или списки, или любые итерабельные объекты.