如何在输入中查找文本

时间:2014-02-27 23:46:45

标签: python string input integer

我对这个非常简单的计算器脚本有疑问。如果用户输入字母或单词(例如:s,the),系统将崩溃。我的想法是让它打印出来:

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

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

exec(x)
print(x)

部分因此它不会给我一个错误并使脚本崩溃。提前谢谢!

代码(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

3 个答案:

答案 0 :(得分:2)

你可以抓住例外:

#!/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);

答案 1 :(得分:0)

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

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 :(得分:0)

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

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)