Проблема с подбором значений из списка
Написал простейшую программу для подбора значений из списка, по какой-то причине ругается на странные вещи, на которые, по идее ругаться не должна
from random import randint
choice,howmuch=0,0
Plan=['Celeste','Cuphead','ELDEN RING','HellBlade - Senuas Sacrifice','WHAT THE GOLF']
FromDownloaded=['Celeste','Cuphead','ELDEN RING','HellBlade - Senuas Sacrifice','WHAT THE GOLF','The Binding of Isaac:Rebirth','Counter-Strike 2','DUSK','The Elder Scrolls V: Skyrim','Heavy Rain','It Steals','Left 4 Dead 2','OMORI','PUSS!','VRChat','Windowkill']
#AllGames =[str(x).replace("в„ў","").replace('\n','') for x in open('Список_Игр.txt')]
print('1. План','2. Загружены','3. Все игры',sep='\n')
choice = int(input())
print('Сколько?',sep='\n')
howmuch = int(input())
for _ in range(howmuch):
if choice == 1:
print(Plan[randint(0,len(Plan))])
elif choice == 2:
print(FromDownloaded[randint(0,len(FromDownloaded))])
#elif choice == 3:
#print(AllGames[randint(0,len(AllGames))])
else:
print('')
input()
Ответы (1 шт):
Первую ошибку достаточно перевести на русский язык - если в input()
пользователь введет пустую строку - ''
, то интерпретатор выдаст ошибку, что он не может конвертировать пустую строку в int()
. В общем случае ту же самую ошибку вы получите если введете в int(input())
любую последовательность содержащую что-то кроме цифр. Чтобы этого избежать, можно, например, воспользоваться методом isdigit()
, который принимает строку и возвращает True
если все символы в последовательности являются цифрами, и False
в противном случае. Как-то так:
while not (input_string := input('Выбор пункта меню:')).isdigit():
print('Неверный ввод')
choice = int(input_string)
Не забудьте, что у вас еще есть howmuch = int(input())
, с той же проблемой. И если в случае с choice
вы можете обойтись и проще - убрать конвертацию в int()
, а работать прям со строками, вот так:
choice = input()
# --- дальше ваш код
# --- в условиях меняем числа на строки
if choice == '1':
# --- далее везде
то в случае с howmuch
так не выйдет, вам нужно число, надо будет проверять ввод.
Вторая ошибка возникает из-за того, что функция randint()
как аргументы принимает закрытый интервал (то есть, второй аргумент, верхний предел, входит в интервал). Таким образом у вас получается, что вы пытаетесь сгенерировать случайный индекс в диапазоне от 0
до len(Plan)
(включительно!) и подставить его в список Plan
, в котором максимальный индекс равен len(Plan)-1
. Разумеется, когда генератор случайных чисел выдаст вам значение len(Plan)
, вы получите ошибку, что такого индекса нет в списке, потому, что полученный индекс на единицу больше максимального. Значит надо генерировать случайное число в диапазоне от 0
до len(Plan)-1
.
print(Plan[randint(0,len(Plan)-1)])