Простая функция поиска в телефонной книге работает, даже если оператор if имеет значение true

#python #python-3.x #dictionary #key-value

#python #python-3.x #словарь #ключ-значение

Вопрос:

Я пытаюсь создать простую телефонную книгу, в которой, если вы вводите тип 1: вы добавляете контакт в словарь, если 2 вы просматриваете словарь на основе введенного имени (ключа), если 3 вы просматриваете словарь на основе введенного номера (значения)

Когда я запускаю поиск ключа на основе значения (ввод 3), он возвращает функцию else ‘this is invalid’ независимо от того, верно это или нет.

Может ли кто-нибудь расшифровать это?

     #Input contact name
    if button == 1:
        name = input('Please enter the contact name:') 
        if name in contacts:
            print("The name you entered already exists in the address book --> %s:%s"
            %(name,contacts[name]))
            flag = input("Whether to modify user information (YES/NO):")
            if  flag== 'YES':  
                tel = input('Please enter the users contact phone number:') 
                contacts.update({name:tel}) #Update dictionary
                print("Contacts have been updated!")
            else:
                continue
        else:
            contacts[name] =  input('Please enter the contact phone number:')
            print("Contact has been saved!")
    
    #Search by contact name
    if button == 2:
        name = input('Please enter the contact name:') 
        if name in contacts:
            print("%s : %s "%(name,contacts[name]))
        else:
            print('The name you entered is no longer in the address book! ') 
   
            
   #Search by contact number
    if button == 3:
        numba = input('Please enter the contact number:') 
        lookup = []
        for key,value in contacts.items():
            if(value == numba):
                lookup.append(key)
                print('Name(s) matching number is',lookup)
            else:
                print('This is invalid')

  

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

1. Как отлаживать небольшие программы. if value == numba: ... else: Правильное ли место для печати «This is invalid»? numba является строкой. Это value тоже строка?

2. Предложение if имеет значение true один раз, когда найдено правильное значение. Но это значение равно false для всех других шагов итерации в цикле.

Ответ №1:

Попробуйте это:

 if button == 3:
    numba = input('Please enter the contact number:') 
    lookup = []
    for key,value in contacts.items():
        if(value == numba):
            lookup.append(key)
    if lookup: # True if len(lookup) != 0
        print('Name(s) matching number is', lookup)
    else:
        print('This is invalid')
     
  

Ответ №2:

Возможно, это немного натянуто, но я заставил его работать так:

 numba = input('Please enter the contact number: ')
lookup = []
for key,value in contacts.items():
    if(numba == key):
        lookup.append(value)
        print('Name(s) matching number is', lookup)

if(int(numba) > len(contacts.items())):
    print('This is invalid')