我还在学习python所以请你好:)我想让用户做这样的事情:
>> sqrt(4) #input
2 #output
和
>> sqrt(8) #input
2*rad(2) #if this is not possible, just say something like "not valid"
和
>> 4*4 #1st input
16 #1st output
>> sqrt(ans()) #2nd input
4 #2nd output
我的代码:
from math import sqrt
valid_chars = "0123456789-+/*ansqrt() \n"
while True:
x = "x="
y = input(" >> ")
x += y
def ans():
try:
return z
except NameError:
return 0
if(y == "end" or y == "End" or y == "exit" or y == "Exit" or y == "cancel" or y == "Cancel"):
break
if any(c not in valid_chars for c in y):
print("WARNING: Invalid Equation")
continue
try:
exec(x)
except (SyntaxError, ZeroDivisionError, NameError, TypeError, ValueError):
print ("WARNING: Invalid Equation")
if not(y == "()"):
z = x
print(x)
else:
print("WARNING: Invalid Equation")
如果用户输入如下内容:
>> sqrt()x
WARNING: Invalid Equation
我知道我必须将valid_chars更改为:
valid_chars = "0123456789-+/*ansqrt() \n"
或者其他什么。然而,对于其他人,我几乎没有任何线索。提前感谢您,如果您有任何疑问或认为这是不完整的,请评论一下! :)另外,不要回答:D
更新
一些想法:
取“()”内部或外部的值。然后使该值等于例如“s”。之后:
d = sqrt((int(s)))
print (d)
但是,我需要的东西会排除导致错误的输入,因此程序不会崩溃。
另外,我没有公开这个,所以你可以忽略这样一个事实,即将python语句作为输入是一个坏主意。但是,我对如何与eval()做同样的事情感兴趣。感谢
更新的代码:
问题已解决:
from math import sort
valid_chars = "0123456789-+/*ansqrt() \n";
while True:
x = "x="
y = input(" >> ")
x += y
def ans():
try:
return z
except NameError:
return 0
if(y == "end" or y == "End" or y == "exit" or y == "Exit" or y == "cancel" or y == "Cancel"):
break
if any(c not in valid_chars for c in y):
print("WARNING: Invalid Equation")
continue
try:
exec(x)
except (SyntaxError, ZeroDivisionError, NameError, TypeError, ValueError):
print ("WARNING: Invalid Equation")
else:
if not(y == "()"):
z = x
print(x)
else:
print("WARNING: Invalid Equation")
答案 0 :(得分:3)
我会以不同的方式尝试做你想要的答案。顺便说一句,你不应该使用' eval()'通常但在这种情况下我认为这是最简单的方法:
编辑:eval()是邪恶的,一般不应该使用!但是我仍然建议这个答案,因为OP明确表示他不会公开代码,并且他知道在评估用户输入时所涉及的风险。
import sys
from math import sqrt
while True:
question = raw_input('Please input an equation: \n')
if question == 'exit()':
sys.exit('Bye')
try:
answer = eval(question)
ans = answer
except:
print 'Invalid operation'
continue
print answer
输出(适用于Python 2.7):
>>Please input an equation:
>>sqrt(16)
>>4.0
>>Please input an equation:
>>sqrt(ans)
>>2.0
>>Please input an equation:
>>exit()
>>Bye