【问题标题】:How to look for a text in an input如何在输入中查找文本
【发布时间】:2014-03-31 18:00:40
【问题描述】:

我在使用这个非常简单的计算器脚本时遇到了问题。如果用户输入一个字母或一个单词(如:s, the),系统就会崩溃。我的想法是让它打印出来:

print ("WARNING: That is not a valid equation!")

当这种情况发生时。但是,我不能只看 y 是否为整数,否则*、+、-和 / 将不起作用。另外,我需要一种方法让它跳过

exec(x)
print(x)

part 所以它不会给我一个错误并使脚本崩溃。提前谢谢!

代码(Python v3.3.0 - Mac OSX 10.8):

while True:
    x = "x="
    y = input(" >> ")
    x += y
    exec(x)
    print(x)

编辑:查看 raser 的答案后。这就是我把它改成的。这是我之前的代码和他的两个答案的混合。

                valid_chars = "0123456789-+/* \n";
                while True:
                    x = "x="
                    y = input(" >> ")
                    x += y
                    if False in [c in valid_chars for c in y]:
                        print("Errors!");
                        continue;
                    if(y == "end" or y == "End" or y == "exit" or y == "Exit" or y == "cancel" or y == "Cancel"):
                         break
                    exec(x)
                    print(x)

这可以做如下方程:7+9/3*2-3

【问题讨论】:

  • 您是否考虑过使用正则表达式进行输入验证?您可以使用regexpal.com 来测试您的表达方式..
  • 您能否发布一些有效的方程式示例?例如,这是一个简单的运算还是在做更复杂的数学方程?
  • 这可以做方程如:7+9/3*2-3

标签: python string input integer


【解决方案1】:

如果要检查输入是否为整数,请在对其运行整数运算之前放置正则表达式匹配语句。

import re

while True:
    x = "x="
    y = input(" >> ")
    if re.match("^[0-9]{0,}$", y):
        x += y
        exec(x)
        print(x)
    else:
        raise TypeError("WARNING: That is not a valid equation!")

如果你想了解更多关于正则表达式如何工作的信息,请看这里 --> http://docs.python.org/2/library/re.html

【讨论】:

  • 当我输入 *、/、+ 或 - 时,这是否会给出“警告”?
【解决方案2】:

这是一个非常简单的解决方案。可以用更少的代码完成,但它可以工作(每次运行脚本时):

cursor = 'calculator: '
x = raw_input(cursor)
if x.isdigit() == False:
    print 'Please enter a number first'
y = raw_input(cursor)
operators = ['*', '+', '-', '/']
if y not in operators:
    print 'Please enter one of the following operators: '.format(','.join(operators))
z = raw_input(cursor)
if z.isdigit() == False:
    print 'Please enter a number after the operator'
else:
    if y == '*':
        print int(x) * int(z)
    elif y == '+':
        print int(x) + int(z)
    elif y == '-':
        print int(x) - int(z)
    else:
        print int(x) / int(z)

【讨论】:

    【解决方案3】:

    你可以捕捉到异常:

    #!/usr/bin/env python
    while True:
        equation = raw_input(">> ");
        try:
            exec(equation);
        except SyntaxError:
            print("WARNING! That is not a valid function");
    

    或者如果您想检测不在 0-9*/-= 中的任何内容,您可以只使用正则表达式(这可能是矫枉过正)或执行以下操作:

    #!/usr/bin/env python
    valid_chars = "0123456789-+/* \n";
    while True:
        equation = raw_input(">> ").strip();
        if False in [c in valid_chars for c in equation]:
            print("Errors!");
            continue;
        exec(equation);
    

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2022-10-04
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多