如何让用户重用python计算器中先前计算的结果

时间:2014-02-28 19:16:34

标签: python python-3.x input calculator

我在python上相当新,所以我对它不太了解。我做了一个计算器,我希望它接受一个:

ans()

输入。目前,如果存在[0-9 * / - +]以外的某些内容,则有一个部分阻止程序执行输入,因此它不会崩溃。我怎么做

ans()

表示最后输入的等式的输出,因此我可以输入如下内容:

>> 8*8 #last input
64 #last output
>> ans()*2 #current input
128 # current output

希望我正确地解释了一切,这是我的代码:

valid_chars = "0123456789-+/* \n";
    while True:
    x = "x="
    y = input(" >> ")
    x += y
    if any(c not in valid_chars for c in y):
        print("WARNING: Invalid Equation")
        continue
    try:
        exec(x)
    except (SyntaxError, ZeroDivisionError):
        print ("WARNING: Invalid Equation")
    else:
        print(x)

更新:我添加了几行,但它不会运行:

valid_chars = "0123456789-+/* \n";
while True:
    x = "x="
    y = input(" >> ")
    x += y
    def ans():
        return _
    def ans():
        try:
            return _
    except NameError:
        return 0 # appropriate value
    if any(c not in valid_chars for c in y):
        print("WARNING: Invalid Equation")
        continue
    try:
        exec(x)
    except (SyntaxError, ZeroDivisionError):
        print ("WARNING: Invalid Equation")
    else:
        print(x)

错误:NameError

以外的“意外缩进”

我做错了什么,如何解决这个问题?感谢

更新

好吧,我修好了:

valid_chars = "0123456789-+/*ans() \n"
while True:
    x = "x="
    y = input(" >> ")
    x += y
    def ans():
        return z
    def ans():
        try:
            return z
    except NameError:
        return 0 # appropriate value
    if any(c not in valid_chars for c in y):
        print("WARNING: Invalid Equation")
        continue
    try:
        exec(x)
    except (SyntaxError, ZeroDivisionError):
        print ("WARNING: Invalid Equation")
    else:
        z = x
        print(x)

刚刚添加了

z = x

并用z

更改“_”

谢谢!

2 个答案:

答案 0 :(得分:2)

def ans():
        try:
            return _
    except NameError:
        return 0 # appropriate value

你的尝试,除了需要有相同的缩进。像这样使用它

def ans():
    try:
        return _
    except NameError:
        return 0 # appropriate value

答案 1 :(得分:1)

valid_chars = list("0123456789-+/* \n")
while True:
    x = "ans = "
    y = raw_input(" >> ")
    x += y
    if any(c not in valid_chars for c in y.replace('ans','')):
        print("WARNING: Invalid Equation")
        continue
    try:
        exec(x)
    except (SyntaxError, ZeroDivisionError):
        print ("WARNING: Invalid Equation")
    except NameError:
        if y == 'ans':
            print("ans undefined")
        else:
            raise
    else:
        print(ans)