我似乎无法找到如何让用户限制使用实数和字母Q作为变量。 (今天早上开始学习Python)
astr = 0
while True:
astringfunctionMB = raw_input('please enter MB equation in terms of Q e.i 95-.5*Q : ' )
if ( float(astringfunctionMB) or "Q" in astringfunctionMB):
print "Please try again"
#else if
else:
break
astr = astringfunctionMB
答案 0 :(得分:6)
有几种方法可以做到这一点;我会使用regular expression:
import re
...
if re.match(r'^[\dQ+\-*/.]$', astringfunctionMB):
...
import string
VALID_CHARS = set(string.digits + 'Q+-*/.')
...
if astringfunctionMB and all(char in VALID_CHARS for char in astringfunctionMB):
...
但请注意,这些 意味着用户的输入是有效的表达式,只是它只包含有效字符。要获得更强大的验证,您需要编写一些内容来将其输入解析为适当的形式,并查看是否可以对其输入的任何内容运行。
答案 1 :(得分:1)
假设您需要aStringFunctionMB
中的python表达式,您可以在受控命名空间中对其进行评估并捕获异常:
try:
eval(aStringFunctionMB, {}, {"Q": 1})
astr = aStringFunctionMB
except (NameError, SyntaxError):
print "Please try again"