我在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
更改“_”谢谢!
答案 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)