简体   繁体   中英

Another question: Phone dictionary problem 'while-loop' using Error

Simply question making phone dictionary

What I want to do is putting person's name and number and finding them in dictionary!

Examples what I want to do

Enter command (a, f, d, or q).: a

Enter new name................: Perry

Enter new phone number........: 229-449-9683


Enter command (a, f, d, or q).: f

Enter name to look up...: 

I would like to find full name and number when I type

Phone dictionary code what I wrote so far:


phone_dict = {}
command = input('Enter command (a, f, d, or q).: ')
newname = input('Enter new name................: ')
newphone = input('Enter new phone number........: ')
while True:
    if command == 'a':
        newname
        newphone
        phone_dict[newname] = newphone
        print(phone_dict)
# In here, 'while-loop' does not work. 

In there, if I enter 'a' command, and type the name

The dictionary is supposed to be { Perry: 229-449-9683}

Thanks, The question might be little confused, but if you can help this out, I am very happy!

To find the number using the first o last name of the person you could do:

a = 'Add a new phone number'
d = 'Delete a phone number'
f = 'Find a phone number'
q = 'Quit'
phone_dict = {}

while True:
    # Gets the user command every loop
    command = input('Enter command (a, f, d, or q).: ')

    # Add a new registry to the directory
    if command == 'a':
        newname = input('Enter new name................: ')
        newphone = input('Enter new phone number........: ')
        phone_dict[newname] = newphone
        print(phone_dict)

    # Find a registry on the directory
    elif command == "f"
        query = input("Enter name to look up...: ")
        match = None
        for key in phone_dict.keys():
            if query.strip() in key:
                match = phone_dict[key]
                break
        if match is None:
            print(f"The name {query} could not be found on the directory")
        else:
            print(f"The phone number of {query} is {match}")
    elif command == "d":
        # Delete registry
    elif command == "q":
        # Quits program
    else:
        print(f"The command {command} was not found, please try again!")

In this case, I am using query.strip() to remove any extra start/end spaces that could cause to not find the person.

Please let me know if this helped. Thanks!

To find the result from the dictionary, you can loop through the items and check if the key contains the string you want to find. If you want to get all values which satisfy your query, you can create another list or dictionary and store the items you find:

phone_dict = {
    "Han Perry": "1234",
    "Harry Gildong": "2345",
    "Hanny Test": "123",
}


find_str = "Han"

result = {}

for key, value in phone_dict.items():
    # Converting it to lower makes it case insensitive
    if find_str.lower().strip() in key.lower():
        result[key] = value

print(result)
# {'Han Perry': '1234', 'Hanny Test': '123'}

Take note that this will run through all of the values of the dictionary: O(n)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM