индекс элемента вложенного списка, попробуйте и, кроме

#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() в эту функцию, если не хотите, чтобы она была доступна на верхнем уровне.