如何确保用户输入仅包含数字,运算符和字母Q的字符串?

时间:2015-05-16 11:18:49

标签: python

我似乎无法找到如何让用户限制使用实数和字母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

2 个答案:

答案 0 :(得分:6)

有几种方法可以做到这一点;我会使用regular expression

import re

...

if re.match(r'^[\dQ+\-*/.]$', astringfunctionMB):
    ...

(请参阅demo进行测试)或创建set个有效字符进行测试:

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"