确保输入仅限于变量

0 投票
4 回答
605 浏览
提问于 2025-04-17 20:06

我想确保只有顶部定义的四个变量里的值被接受,其他用户输入的内容都被拒绝,我该怎么做呢?简单来说,我希望代码只接受Currency1、Currency2、Currency3和Currency4这四个变量下的值。我的代码现在的问题是,像'no'、'wdgdu'这样的输入都被接受了。我该如何限制输入,只能是这四个变量里的值呢?

4 个回答

0
if currency in CurrencyYen + CurrencyEuro + CurrencyDollar + CurrencyPound:
    # do stuff

应该 使用小写字母来命名变量

另外,你可以直接用 currency.lower() 来检查,这样你只需要在列表中使用每种货币的小写版本就可以了。

0

如果你对输入使用了lower()这个函数,就不需要同时保留' Dollar '和 ' dollar '这两种写法了。此外,你还可以使用一个循环,这个循环会一直运行,直到输入正确为止。你也可以设置一个退出命令,这样就可以跳出这个循环。

accepted_input = ['yen', 'euro', 'dollar', 'pound', '$']

def get_currency(msg):
    input_valid = False
    while not input_valid:
        user_input = input(msg).lower()
        input_valid = user_input in accepted_input
    return user_input

currency_from = get_currency('Convert from: ')
currency_to = get_currency('Convert to: ')
3

我会这样做:

  • 用字典来验证和标准化货币,而不是随便用一些列表
  • 用循环来获取用户的有效输入,而不是用递归
  • 使用 .lower() 方法来统一字母大小写

这是我改进后的版本:

CURRENCY = {
    '¥': 'JPY', 'yen': 'JPY', 'jpy': 'JPY',
    '€': 'EUR', 'euro': 'EUR', 'eur': 'EUR',
    '$': 'USD', 'dollar': 'USD', 'usd': 'USD',
    '£': 'GBP', 'pound': 'GBP', 'gbp': 'GBP',
}

def read_currency(prompt):
    """Prompt the user to enter a currency.

    Returns a currency code.
    """
    while True:
        x = input(prompt)
        try:
            return CURRENCY[x.lower()]
        except KeyError:
            print('Unknown currency: {!r}'.format(x))

然后你可以按照自己的方式计算汇率:

from decimal import Decimal
RATES = { 
    'JPY': Decimal("0.010589"),
    'EUR': Decimal("1.2983"),
    'GBP': Decimal("1.5228"),
    'USD': Decimal("1.0000"),
}
def conversion_rate(cur1, cur2):
    """Get the conversion rate from currency 1 to currency 2."""
    return RATES[cur1] / RATES[cur2]

这里是转换的代码:

amount = Decimal(input('Enter amount: '))
currency1 = read_currency('Enter source currency: ')
currency2 = read_currency('Enter target currency: ')
rate = conversion_rate(currency1, currency2)
print('{} {} is equal to {} {}'
      .format(currency1, amount, currency2, amount * rate))

注意,有更好的四舍五入规则你可能想要应用。

示例运行:

Enter amount: 1450
Enter source currency: yen
Enter target currency: $
JPY 1450 is equal to USD 15.3700

撰写回答