0

我想确保只有顶部的 4 个变量中指定的值被接受,其他所有用户输入都被拒绝,我该怎么做?基本上,我希望代码接受 Currency1、Currency2、Currency3 和 Currency4 下的所有内容。我的代码的问题是“no”、“wdgdu”等所有内容都被接受了。如何将输入限制为 4 个变量下的那些值?

4

4 回答 4

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))

请注意,您可能需要应用更好的四舍五入规则。

示例运行:

输入金额:1450
输入来源货币:日元
输入目标货币:$
1450 日元等于 15.3700 美元
于 2013-03-24T01:41:20.503 回答
0
if currency in CurrencyYen + CurrencyEuro + CurrencyDollar + CurrencyPound:
    # do stuff

应该使用小写的变量名

您也可以简单地检查currency.lower(),然后您只需要列表中每种货币的小写版本。

于 2013-03-24T01:20:24.917 回答
0

如果在输入中使用 lower(),则不需要同时保留“美元”和“美元”。除非输入正确的输入,否则您也可以使用永远不存在的时间。您还可以使用退出命令并中断 while。

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: ')
于 2013-03-24T01:47:42.690 回答
-2

您可以使用 For 检查用户输入:

CurrencyYen = ['Yen', 'yen', 'YEN']
CurrencyEuro = ['Euro','euro','EURO']
CurrencyDollar = ['Dollar','dollar','DOLLAR','$']
CurrencyPound = ['Pound', 'pound', 'POUND','£']

UserInput = raw_input("Value: ")

for i in range(0,2):
    if (UserInput == CurrencyEuro[i]):
        print "correct input!"
        break
    else:
        print "wrong input"

所有其他列表的代码相同。

于 2013-03-24T01:28:15.643 回答