#python #validation
Вопрос:
Только что начали программировать и теперь застряли на проблеме. Хотите найти индекс числа, которое пользователь вводит во вложенный список. Если это не номер или если номера нет в списке, программа должна продолжать работать до тех пор, пока не будет записан действительный номер. Затем он должен вернуть кортеж с индексом. Единственным параметром функции является список строк. Мой код, который генерирует бесконечный цикл…. Ценю всю вашу помощь
def find(mylist):
for sub_list in mylist:
while True:
try:
num in sub_list
num = int(input("Enter a number: "))
except:
print(f"{num} is not in the list")
continue
else:
break
return (mylist.index(sub_list), sub_list.index(num))
row, col = find([['23', '24', '25'], ['26', '27', '28'], ['29', '30']])
print(row, col)
## num is 24, should print 0,1
## num is 44, 44 is not in the list. Enter a number
Комментарии:
1.
num in sub_list
:num
в этот момент не определено. Разве эту строку не следует ставить после следующей? Кроме того, даже если вы переключите две строки, исключение может возникнуть только в том случае, если пользователь не введет целое число, которое вызываетint(input...)
исключение. Другими словами,num in sub_list
не вызовет исключения.
Ответ №1:
Отделите задачу поиска числа от вашего входного цикла. Например, find
просто найдите одно значение, и raise
если оно не найдено, то вызовите find
свой цикл с помощью a try/except
.
def find(mylist, val):
for i, sub_list in enumerate(mylist):
if val in sub_list:
return i, sub_list.index(val)
raise ValueError(f"{val} is not in the list.")
def main(mylist):
while True:
try:
print(find(
mylist,
input("Enter a number: ")
))
break
except ValueError as e:
print(e)
print(main([['23', '24', '25'], ['26', '27', '28'], ['29', '30']]))
Enter a number: 44
44 is not in the list.
Enter a number: 24
(0, 1)
Комментарии:
1. Спасибо! Как мне получить тот же результат, используя только список в качестве параметра? С помощью ожидаемой попытки в функции.
2. Сделайте другую функцию. Вы даже можете вложить определение
find()
в эту функцию, если не хотите, чтобы она была доступна на верхнем уровне.