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

标签 python math input sqrt square-root

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

相关文章:

C - 如何从文件中读取特定行

线程脚本中的 Python 脚本 open_sftp_client 错误

algorithm - 如何用 big-O 而不是 big theta 解决递归问题?

python - 继承Python中同名的类

algorithm - 函数 (log n)^k 的大 O 是什么

c - 列出给定大小的单元组的元素的最快方法是什么?

javascript - 可靠的 html5 输入类型处理

javascript - 如何将从这些输入字段收集的文本转换为 Javascript 中的小写字母?

Python重定向表单 Action

python - Pandas 中的复杂分组、排序和值过滤