> sqrt(4) #input 2 #output 和 >> sqrt(8) #input 2*rad(2) #if thi-6ren">
gpt4 book ai didi

python - 如何让用户使用 "sqrt()"+ 输入求输入的平方根?

转载 作者:行者123 更新时间:2023-11-28 16:38:54 26 4
gpt4 key购买 nike

我还在学习 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com