Почему поиск по словарю не работает в моей программе телефонной книги на Python?

#python #dictionary

#python #словарь

Вопрос:

Я хочу создать систему телефонной книги на Python, как показано на рисунке ниже, которая позволяет пользователям добавлять, удалять, обновлять и искать телефонные номера.

введите описание изображения здесь

Пожалуйста, посмотрите мой код ниже. Параметры 1,2,3 и 5 работают нормально, однако вариант 4 не работает, и я не уверен, почему. Когда я добавляю новую запись, используя опцию 1, а затем сразу пытаюсь найти запись, используя опцию 4, она сообщает мне, что запись не существует, хотя она явно существует.. Я что-то упускаю? (рассматриваемый раздел кода начинается с «elif selection == 4:»)

 def intro():
    welcome = ("                                     n"
               "#####################################n"
               "MYPY PHONE BOOKn"
               "#####################################n"
               "1 : Add New Entryn"
               "2 : Delete Entryn"
               "3 : Update Entryn"
               "4 : Lookup Numbern"
               "5 : QUITn"
               "")
    selection = input(welcome)
    return int(selection)

phoneBook = {}

while True:
    selection = intro()
    if selection == 1:
        number = input("Enter phone number: ")
        name = input("Enter name: ")
        if number in phoneBook:
            print("                               n"
                  "* Number already in phonebook *")
        else:
            phoneBook.update({number : name})
            print("                               n"
                  "* Name and number added to phone book *")
            print(phoneBook)
    elif selection == 2:
        number2 = input("Enter phone number to be deleted: ")
        if number2 in phoneBook:
            phoneBook.pop(number2)
            print("                               n"
                  "* Number deleted from phone book *")
            print(phoneBook)
        else:
            print("                               n"
                  "* Number does not exist in phone book *")
    elif selection == 3:
        number3 = input("Enter current phone number: ")
        numberNew = input("Enter updated phone number: ")
        nameNew = input("Enter name: ")
        if number3 in phoneBook:
            phoneBook.pop(number3)
            phoneBook.update({numberNew : nameNew})
            print("                               n"
                  "* Name and number updated in phone book *")
            print(phoneBook)
        else:
            print("                               n"
                  "* Number does not exist in phone book *")
    elif selection == 4:
        name4 = input("Enter name: ")
        if name4 in phoneBook:
            for key,value in phoneBook.items():
                if value == name4:
                    print(key)
        else:
            choice = int(input("                                 n"
                               "Name does not exist in phone bookn"
                               "Enter 1 to add to phoneBookn"
                               "Enter 2 to return to the menu:n"
                               ""))
            if choice == 1:
                number4 = input("Enter phone number: ")
                name44 = input("Enter name: ")
                if number in phoneBook:
                    print("                               n"
                          "* Number already in phonebook *")
                else:
                    phoneBook.update({number4 : name44})
                    print("                               n"
                          "* Name and number added to phone book *")
                    print(phoneBook)
            elif choice == 2:
                print("                                n"
                      "* Please make another selection *")
    elif selection == 5:
        break
  

Ответ №1:

Вы используете имена в качестве ключей или цифры в качестве ключей вашего словаря?

В выборе 4 вы это делаете if name4 in phoneBook:... , однако в других частях кода вы, похоже, используете цифры в качестве ключей. С помощью словарей вы можете проверить, находится ли ключ в словаре с key in dictionary . С другой стороны, если вы хотите проверить, есть ли значение в словаре, вы можете сделать:

 for val in dictionary.values(): 
    if val == value:
        ...
  

Проверьте это 😉

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

1. Спасибо, я добавил «.values()» в конец, и теперь это работает 🙂