Python 确保输入仅限于变量
我想确保只有在顶部的4个变量中指定的值被接受,而其他所有用户输入都被拒绝,我该怎么做?基本上,我希望代码接受Currency1、Currency2、Currency3和Currency4下的所有内容。我的代码的问题是,诸如“否”、“wdgdu”之类的所有内容都被接受。如何将输入限制为4个变量下的值Python 确保输入仅限于变量,python,variables,input,python-3.x,Python,Variables,Input,Python 3.x,我想确保只有在顶部的4个变量中指定的值被接受,而其他所有用户输入都被拒绝,我该怎么做?基本上,我希望代码接受Currency1、Currency2、Currency3和Currency4下的所有内容。我的代码的问题是,诸如“否”、“wdgdu”之类的所有内容都被接受。如何将输入限制为4个变量下的值 if currency in CurrencyYen + CurrencyEuro + CurrencyDollar + CurrencyPound: # do stuff 变量名使用小写字
if currency in CurrencyYen + CurrencyEuro + CurrencyDollar + CurrencyPound:
# do stuff
变量名使用小写字母
此外,您只需检查
currency.lower()
,然后您只需要列表中每种货币的小写版本。您可以使用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"
所有其他列表的代码都相同。我将使用:
- 用于验证和规范货币的字典,而不是临时列表
- 从用户处获取有效输入的循环,而不是递归
- 规范化大小写的
方法.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
输入金额:1450
输入来源货币:日元
输入目标货币:$
1450日元等于15.3700美元
如果对输入使用lower(),则不需要同时保留“Dollar”和“Dollar”。此外,您还可以使用一段除非输入正确的输入否则永远不存在的时间。您还可以使用quit命令中断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: ')
可能只是有['yen']、['euro']、['dollar'、'$']等等,然后使用msg.lower()但是如果我让其他人测试这个,它会给出错误。我想尝试让它尽可能对用户友好:)
msg.lower()
将使输入完全小写,例如它将把输入'DoLlAR'
变成'DoLlAR'
。我的版本更加用户友好。;)试试张贴的答案!他们做的正是你想要的。我试过了。但我似乎无法检查输入值是否在变量中,并且它不是浮点值。我将更改名称。:)但是如果我在这里使用if语句,我将无法测试这两种货币?我需要代码来拒绝诸如“yes”或“sjkdh”之类的字符串。我是说。。我需要分别检查“Currency1”和“Currency2”。如果Currency1不在前4个变量中,那么代码应该给出一个错误?^是的,我意识到了。我希望按规定限制输入:/在CurrencyEuro中为i使用,这是在重新实现python中已有的功能如果用户输入的是CurrencyEuro
是免费的。谢谢@LStyle,代码是有效的,但我必须同时提供这两种输入。如果Currency1不存在,我希望它中断。@jhoyla,是的,我已经试过了:)但是再次,我想在请求currency2之前中断。你的意思是如果列表中的第一个值不是用户输入,它将停止检查列表中的其他值吗?嘿,谢谢,但问题是,我以后需要在代码中使用整个列表。如果我使用您的代码^^^会有很多错误,除了您可能需要重构代码以使其工作(因为这是一种非常整洁的方法)之外,您可以使用CURRENCY.keys()来获取原始列表。@jhoyla:您需要列表(CURRENCY.keys())
,因为这是Python 3,但这是对的。如果Currency1是CurrencyYen,Currency2是CurrencyEuro:Result=float(Amount*ExRate)print(round(Amount,2),str('Yen'),str('is equal'),“%.2f”%Result,str('euro'),str('根据当前汇率)),这是我代码的下一位,所以如果我使用上面的方法,这将停止工作,并且编码将是错误的mess@Jemini:如果CurrencyYen中的currency1
,您只需执行如果currency1=='JPY'