Попробуйте и за исключением исключений со словарем (Python) - PullRequest
0 голосов
/ 26 июня 2018

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

dict = {"These": 1, "are": 2, "words": 3}
while True:
    try:
        w = input("Enter a word: ")
    except: 
        print("That word is not a key in the dictionary, try again")
    else:
        print("That word is a key in the dictionary")

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Чтобы прямо ответить на ваш вопрос, этот код делает то, что вы ищете:

words = {"these": 1, "are": 2, "words": 3}
while True:
    try:
        value = words[input("Enter a word: ").trim().lower()]
    except KeyError: 
        print("That word is not a key in the dictionary, try again")
    else:
        print("That word is a key in the dictionary")

Пара важных вещей, которые необходимо вызвать.Использование except: без Exception является очень плохой практикой, так как оно будет ловить все что угодно (например, SystemExit или KeyboardInterrupt, что помешает выходу вашей программыправильно).dict - это имя встроенной функции , поэтому вы переопределяете ее, называя свой словарь dict.

Как подсказывают другие в комментариях, вам не нужнопопытайтесь / кроме того, чтобы сделать это, если вы не пытаетесь узнать больше о попытке / кроме.Лучший способ сделать это - использовать набор:

words = {"these", "are", "words"}
while True:
    if words[input("Enter a word: ").trim().lower()] in words:
        print("That word is a key in the dictionary")
    else:
        print("That word is not a key in the dictionary, try again")
0 голосов
/ 26 июня 2018

Вы также можете избежать использования блоков try / кроме использования dict.get(), которое возвращает значение, сопоставленное указанному ключу, или None (по умолчанию), если ключ не был найден.Вы можете изменить это значение по умолчанию на что угодно.

Код:

data = {"These": 1, "are": 2, "words": 3}

# make all keys lowercase
data = {k.lower(): v for k, v in data.items()}

while True:
    w = input("Enter a word: ")

    if data.get(w.lower()):
        print("That word is a key in the dictionary")
    else:
        print("That word is not a key in the dictionary, try again")

Выход:

Enter a word: these
That word is a key in the dictionary
Enter a word: These
That word is a key in the dictionary
Enter a word: blah
That word is not a key in the dictionary, try again

Примечание: Ключи вышебыли преобразованы в нижний регистр, чтобы избежать нечувствительности к регистру при поиске клавиш.Вы также не должны использовать dict в качестве имени переменной, так как оно скрывает зарезервированное ключевое слово.

0 голосов
/ 26 июня 2018

Вы можете поймать KeyError при доступе к ключу, который не существует на карте:

try:
    w = input("Enter a word: ")
    k[w]
except KeyError:
    print("That word is not a key in the dictionary, try again")
else:
    print("That word is a key in the dictionary")
...