Python l oop неправильно перебирает словарь - PullRequest
0 голосов
/ 22 января 2020

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

print("Currency's supported: USD, EUR, CAN, YEN, GBP")
currencyCheck = input("Input the currency you would like to use. Ex: 'USD' or 'EUR'...etc ").upper()


#currencySYM is a dictionary of currency ticker symbols and currency symbols
currencySYM = {'USD':'$', 'EUR':'€', 'CAN':'C$','YEN':'¥','GBP':'£'}
#the for loop takes the input from Currencycheck and applies the correct symbol to the letters
for key in currencySYM:
    if currencyCheck == key:
        currencyCheck = currencySYM[key]

    elif currencyCheck != key:
        print("Make sure you type the correct three letter symbol.")
        exit()

, и если я вычитаю оператор else, он работает, но не так, как предполагалось, я мог бы напечатать любое слово, которое не должно быть ключом и он назначит ее переменной, даже не проверяя, существует ли она как ключ в словаре

Ответы [ 4 ]

0 голосов
/ 22 января 2020

Это должно работать:

currencyCheck = input("Input the currency you would like to use. Ex: 'USD' or 'EUR'...etc ").upper()

#currencySYM is a dictionary of currency ticker symbols and currency symbols
currencySYM = {'USD':'$', 'EUR':'€', 'CAN':'C$','YEN':'¥','GBP':'£'}
#the for loop takes the input from Currencycheck and applies the correct symbol to the letters
key_list = currencySYM.keys()
if currencyCheck in key_list:
    currencyCheck = currencySYM[currencyCheck]

elif currencyCheck not in key_list:
    print("Make sure you type the correct three letter symbol.")
    exit()
0 голосов
/ 22 января 2020

Вы проверяете, что КАЖДЫЙ ключ в словаре был введен, что невозможно. Вы можете легко исправить это, добавив оператор break в конце предложения if:

 if currencyCheck == key:
    currencyCheck = currencySYM[key]
    # found the key, so stop checking
    break

В любом случае этот код не очень pythoni c, вы можете заменить весь l oop для этого кода, который вернет None, если ключ не доступен в dict:

currencyCheck = currencySYM.get(key,None)
if not currencyCheck:
    print("Make sure you type the correct three letter symbol.")
    exit()
0 голосов
/ 22 января 2020

Если вы хотите проверить, существует ли * key в данном словаре, вы можете сделать это key in dict.

currencyCheck = input("Input the currency you would like to use. Ex: 'USD' or 'EUR'...etc ").upper()
currencySYM = {'USD':'$', 'EUR':'€', 'CAN':'C$','YEN':'¥','GBP':'£'}
if currenyCheck in currencySYM:
    currencyCheck = currencySYM[key]
else:
    exit()

Или вы можете использовать .get().

currencyCheck = input("Input the currency you would like to use. Ex: 'USD' or 'EUR'...etc ").upper()
currencySYM = {'USD':'$', 'EUR':'€', 'CAN':'C$','YEN':'¥','GBP':'£'}

currencyCheck=currencySYM.get(currencyCheck,exit())

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

0 голосов
/ 22 января 2020

Вы не хотите сразу же вспыхнуть после проверки первого ключа. Одним из исправлений может быть

found = False

for key in currencySYM:
    if currencyCheck == key:
        currencyCheck = currencySYM[key]
        found = True

if !found:
    print("Make sure you type the correct three letter symbol.")
    exit()

Конечно, лучший способ сделать это - проверить, есть ли ключ в словаре:

if currencyCheck in currencySYM:
    currencyCheck = currencySYM[key]
else:
    print("Make sure you type the correct three letter symbol.")
    exit()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...