我还在学习 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")
最佳答案
我将尝试一个可以满足您要求的答案,尽管方式不同。顺便说一下,您通常不应该使用“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
关于python - 如何让用户使用 "sqrt()"+ 输入求输入的平方根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22111502/