我想确保只接受顶部4个变量中指定的值,其他所有用户输入都被拒绝,我该怎么做?基本上,我希望代码接受Currency1,Currency2,Currency3和Currency4下的所有内容。我的代码的问题在于接受了诸如'no','wdgdu'之类的所有内容。如何将输入限制为4个变量下的那些值?
答案 0 :(得分: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
答案 1 :(得分:0)
if currency in CurrencyYen + CurrencyEuro + CurrencyDollar + CurrencyPound:
# do stuff
您should使用小写字母表示变量名称
此外,您只需检查currency.lower()
,然后您只需要列表中每种货币的小写版本。
答案 2 :(得分: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 :(得分:-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"
所有其他列表的代码相同。