Мой код печатает «Not Found» для каждой строки. Как мне заставить его печатать «Not Found» только один раз, если поиск не удался? - PullRequest
0 голосов
/ 01 ноября 2019

Программа должна быть простой контактной книгой с именами, номерами телефонов и адресами электронной почты. Вы должны иметь возможность искать людей и добавлять контакты. Я получил программу для сохранения в текстовый файл достаточно приличным способом и пытаюсь искать файл построчно. Я могу заставить его напечатать строку, если у нее есть искомое имя, но я не могу понять, как заставить программу сказать, что контакт вообще не найден. При текущем способе, которым у меня есть свой код, он будет говорить «Контакт не найден» для каждой строки, в которой нет имени. Как я могу заставить его сказать, что он не был найден один раз, если имя отсутствует в текстовом файле?

То, что я пробовал, это:

f = open('contacts.txt', 'a')

def make_contact(name, phone, email):
    f = open('contacts.txt', 'a')
    f.write('\n' + 'Name: ' + name + ' Phone: ' + phone + ' Email: ' + email)
    f.close()

menu_input = 0
while menu_input != 3:
    print('\n1. Search Contact\n2. Add Contact\n3. Exit')
    menu_input = int(input("\nChoose Option: "))
    if menu_input == 1:
        name = input ('\nEnter a Name to Search: ')
        with open('contacts.txt', 'r') as searchfile:
            for line in searchfile:
                if name in line:
                    print("\n" + line)
                else:
                    print("\nContact Not Found!")

        f.close()
    elif menu_input == 2:
        f = open('contacts.txt', 'a')
        name = input("Enter Name: ")
        phone = input("Enter Phone Number: ")
        email = input("Enter Email: ")
        make_contact(name, phone, email)

Я добавлю новый контакт, скажем Тимми, Когда я буду искать Тимми, он будет говорить "Не найдено" для каждой строки доэто доходит до Тимми. Он повторяет «Не найдено» для всех контактов до линии связи Timmys

Ответы [ 3 ]

2 голосов
/ 01 ноября 2019

Измените эту часть кода с помощью for-else.

    with open('contacts.txt', 'r') as searchfile:
        for line in searchfile:
            if name in line:
                print("\n" + line)
                break
        else:
            print("\nContact Not Found!")

. Он проверит условие if через цикл for, при совпадении он напечатает эту строку и выйдет изпетля. Если итерация завершена и совпадение не найдено, она проверит условие else параллельно циклу for.

Если вы хотите напечатать все дублирующиеся записи, сохраните флаг для совпадения

flag = False
with open('contacts.txt', 'r') as searchfile:
    for line in searchfile:
        if name in line:
            print("\n" + line)
            flag = True
    if not flag:
        print("\nContact Not Found!")
0 голосов
/ 01 ноября 2019

Вы можете добавить флаг в свой цикл поиска. Как только вы узнали, вы можете разорвать петлю тоже.

f = open('contacts.txt', 'a')

def make_contact(name, phone, email):
    f = open('contacts.txt', 'a')
    f.write('\n' + 'Name: ' + name + ' Phone: ' + phone + ' Email: ' + email)
    f.close()

menu_input = 0
while menu_input != 3:
    print('\n1. Search Contact\n2. Add Contact\n3. Exit')
    menu_input = int(input("\nChoose Option: "))
    if menu_input == 1:
        flag = False
        name = input ('\nEnter a Name to Search: ')
        with open('contacts.txt', 'r') as searchfile:
            for line in searchfile:
                if name in line:
                    flag = True # here you add flag
                    print("\n" + line)
                    break
            if not flag:
                print("\nContact Not Found!")

        f.close()
    elif menu_input == 2:
        f = open('contacts.txt', 'a')
        name = input("Enter Name: ")
        phone = input("Enter Phone Number: ")
        email = input("Enter Email: ")
        make_contact(name, phone, email)
0 голосов
/ 01 ноября 2019

Вы можете добавить простой флаг к своему коду, чтобы определить, найден он или нет. Реализация будет такой:

with open('contacts.txt', 'r') as searchfile:
    found=False
    for line in searchfile:
        if name in line:
            print("\n" + line)
            found = True
    if not found:
        print("\nContact Not Found!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...