как мне остановить повторение сообщения о недопустимом коде, одновременно появляясь в нужное время

#python

#python

Вопрос:

Я пишу программу для поиска в текстовом файле определенной строки, основанной только на части строки. Если строка не найдена, она должна напечатать not found один раз, но она печатает ее несколько раз. Даже после отступа и использования правильного кода он все еще печатается:

Комментарии:

1. Переиндентируйте ваш else блок, чтобы он совпал с вашим if

Ответ №1:

набор else выполняется после того, как for завершается нормально (не прерыванием). таким образом, он определенно выполнит оператор else в вашем коде, потому что вы не прерываете цикл for.

Ответ №2:

У вас был неправильный отступ с else, это правильный код:

 num = raw_input("Type Number : ")
search = open("TableOfProducts.txt","r")
for line in search.readlines():
    if num in line:
        print line
    else:
        print ("invalid code. ")
        break
  

Причина, по которой это не привело к возникновению ошибки, заключается в том, что в for циклах также может быть else блок, который отображается только в том случае, если в цикле нет элементов.

Комментарии:

1. это вызвало ошибку, поскольку оно напечатало недопустимый код несколько раз вместо одного, это была моя проблема, он выполнялся через весь файл.

Ответ №3:

Вы также можете попробовать использовать try / except . Таким образом, вы можете предоставить «недопустимое» сообщение, если приведенный выше код не может найти соответствие. Смотрите ниже.

 num = raw_input("Type Number: ")
with open('TableOfProducts.txt', "r") as search:
    for line in search.readlines():
        if num in line:
            goodline = line
try:
    print goodline
except:
    print "Invalid code."
  

Причина, по которой оно продолжает повторяться, заключается в том, что код будет проверять каждую строку, и пока совпадений нет, для каждой строки, которая не совпадает, он будет печатать «недопустимый код» (даже если он уже нашел один)

PS: Если вы не используете with , как показано выше, убедитесь, что вы поставили search.close() в конце