#python #list
Вопрос:
У меня есть следующий 2D список
listItem = [["Apple", "TP123", "67", "77"], [ "Orange", "TP223", "55", "66"], ["Banana", "TP777", "98", "88"], ["Cherry", "TP123", "98", "88"]]
Я хочу сравнить ввод пользователя со вторым элементом в каждом списке в списке и распечатать весь список, если значение совпадает. Если значение не совпадает, я буду просить пользователя вводить значение снова и снова.
Вот мой код:
def repeat(): tp = input("Please enter your tp: ") for i in range(len(listItem)): if tp == listItem[i][1]: print(listItem[i]) break else: repeat()
Здесь я сталкиваюсь с некоторыми проблемами. В списке есть два «TP123». Однако, если пользователь вводит «TP123», он выводит только один результат вместо двух. Но если я не использовал разрыв, код будет продолжать запрашивать у пользователей другое значение, даже если введенное ими значение совпадает.
Я новичок в python, может ли кто-нибудь помочь мне решить эту проблему, большое вам спасибо.
Ответ №1:
Используйте дополнительную переменную и установите ее True
равной, если они совпадают, и используйте if
оператор для повторного запуска repeat
функции, если она False
:
А также лучше без range
:
def repeat(): tp = input("Please enter your tp: ") match = False for i in listItem: if tp == i[1]: print(i) match = True if not match: repeat()
Ответ №2:
Вы ломаетесь прежде, чем он сможет найти следующий предмет. Также не нужно использовать range
просто цикл по списку.
def repeat(): tp = input("Please enter your tp: ") print(*(i for i in listItem if i[1] == tp), sep='n')
Или в полном for
цикле:
def repeat(): tp = input("Please enter your tp: ") for i in listItem: if tp == i[1]: print(i)