Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从数学运算符列表中提取并将其解释为数学运算而不是字符串?_Python_Python 3.x_List_Loops - Fatal编程技术网

Python 如何从数学运算符列表中提取并将其解释为数学运算而不是字符串?

Python 如何从数学运算符列表中提取并将其解释为数学运算而不是字符串?,python,python-3.x,list,loops,Python,Python 3.x,List,Loops,我试图使用此循环压缩现有代码,但将运算符存储在列表中,然后从中进行绘制不起作用,它会引发以下错误:TypeError:不支持+:'float'和'str'的操作数类型。 我知道它不是将运算符变量解释为实际的数学运算,而是将其解读为str,但我不确定如何解决这个问题。这是我构建的完整循环 operators = ["+", "-", "*", "/", "^"] for operator in o

我试图使用此循环压缩现有代码,但将运算符存储在列表中,然后从中进行绘制不起作用,它会引发以下错误:
TypeError:不支持+:'float'和'str'的操作数类型。

我知道它不是将
运算符
变量解释为实际的数学运算,而是将其解读为
str
,但我不确定如何解决这个问题。这是我构建的完整循环

operators = ["+", "-", "*", "/", "^"]

for operator in operators:
    math_expression = input("Enter your math expression, or (q)uit: ")
    print("Operator found " + operator)
    operator_position = math_expression.find(operator) # find operator
    print("Found " + operator + "operator at index " + str(operator_position))
    first_number = math_expression[:operator_position] # find first number
    second_number = math_expression[operator_position + 1:] # find second number
    answer = float(first_number) + operator + float(second_number)

操作符
模块具有表示基本操作的函数,例如您正在查找的操作

在这里,我们

  • 把那些运算符塞进一个dict
  • 循环每个运算符的
    符号和
    函数
  • 如果在用户输入中找到符号,则
    str.partition()
    函数会将字符串拆分为符号前后的段
  • 然后我们只调用
    函数

您尝试的是类似于
1.5+“*”+0.5
,这只会导致该错误,因为您尝试将浮点数与字符串连接起来。您可能正在使用类似于或
exec
,您尝试过这些吗?仅当您不想创建安全的东西时才应使用它们。但不要使用
eval
exec
!它们可以用来执行任意代码。@Davis我还没有试过,我会研究一下的,谢谢!创建从字符串到函数的映射(即dict),该函数执行您想要的任何操作。e、 g.
{“+”:lambda x,y:return x+y,“-”:lambda x,y:x-y,…}
,或者使用
导入操作符
,您可以使用
{“+”:operator.add,“-”:operator.sub,…}
@aidenmychell,因为创建计算器“正确”很复杂。它至少需要为要处理的输入字符串编写解析器。当然,您可以使用使用Python解析器的
eval
exec
,但是如上所述,通常您希望避免
eval
从用户输入中删除字符串,这是非常不安全的
import operator

operators = {
    "+": operator.add,
    "-": operator.sub,
    "*": operator.mul,
    "/": operator.truediv,
    "^": operator.pow,
}

expression = "5 + 3"  # elided input to make debugging faster

for symbol, func in operators.items():
    if symbol in expression:
        a, _, b = expression.partition(symbol)
        answer = func(float(a), float(b))
        print(answer)
        break