【问题标题】:assign operator to variable in python?将运算符分配给python中的变量?
【发布时间】:2021-08-05 22:54:17
【问题描述】:

将数学应用于变量的常用方法是

a * b

它能够像这样计算和操作两个操作数吗?

a = input('enter a value')
b = input('enter a value') 
op = raw_input('enter a operand')

那我如何连接 op 和两个变量 ab
我知道我可以将 op 与 +-%$ 进行比较,然后分配和计算....

但是我可以做类似a op b 的事情吗,如何告诉编译器 op 是一个运算符?

【问题讨论】:

    标签: python compiler-construction operators


    【解决方案1】:

    您可以使用运算符模块和字典:

    import operator
    ops = {
        "+": operator.add,
        "-": operator.sub,
        "*": operator.mul,
        "/": operator.div
    }   
    op_char = input('enter a operand')
    op_func = ops[op_char]
    result = op_func(a, b)
    

    【讨论】:

    • 对于 python 3.x,应使用 operator.truedivoperator.floordiv 代替 docs.python.org/3/library/operator.html
    • 另外,以这种方式使用 op_func 是行不通的。由于此答案的编辑队列已满,我已在下面的答案中修复了这些错误(假设此答案仍然 ACCEPTED w/76 upvotes...)
    • @RobertHoughton:你认为这个答案“不起作用”是什么? (我也不知道你所说的“编辑队列”是什么意思,但这可能只是我没有看到的东西。)
    【解决方案2】:

    运算符模块http://docs.python.org/library/operator.html 公开了与几乎所有 Python 运算符相对应的函数。您可以将运算符符号映射到这些函数以检索正确的函数,然后将其分配给您的 op 变量并计算 op(a, b)。

    【讨论】:

      【解决方案3】:

      您需要手动将用户输入的字符串与您的操作数列表进行比较。这里没有 int() 的类似物,因为运算符是语言中的关键字而不是值。

      将输入字符串与操作数列表进行比较并确定其对应的运算符后,您可以使用 Python 标准库的 operator module 来计算将运算符应用于两个操作数的结果。

      【讨论】:

        【解决方案4】:

        我知道这是一个非常古老的线程,但我相信当时人们并不知道 eval 函数(也许它是 Python 3 附带的)。所以这里是这个问题的更新答案

        a = input('enter a value')
        b = input('enter a value') 
        op = input('enter an operand')
        expression = a + op + b # simple string concatenation
        result = eval(expression)
        

        如果不希望输入始终有效,则可以使用 ast.literal_eval 代替。如果输入不是有效的 Python 数据类型,则会引发异常,因此如果不是,则不会执行代码。 例如。如果 abop 分别为 5、10、+ 则 result 是 15

        【讨论】:

        • 应该是表达式 = a + c + b 。顺便说一句,使用 eval 进行用户输入是一个坏主意。 ast.literal_eval 更好。
        • @SilentGuy 你说的非常对!我已经更新了答案
        • eval 对 Python 3 并不陌生。人们不建议这样做的原因是因为在用户输入上使用它是不安全的。它可以执行某人输入的任何 Python 表达式(具有任何副作用)。此外,literal_eval 仅评估文字。它不能计算像 '5+10' 这样的算术表达式。
        【解决方案5】:

        您可以使用 operator 模块来创建字典。来自该模块的Python 3 documentation

        "算子模块导出一组高效函数 对应于 Python 的内在运算符。例如, operator.add(x, y) 等价于表达式 x+y。"

        import operator
        ops = {
            "+": operator.add,
            "-": operator.sub,
            "*": operator.mul,
            "/": operator.truediv
        }   
        op_char = input('enter a operand')
        a = 1
        b = 2
        result = ops[op_char](a,b)
        print(result)
        

        【讨论】:

          猜你喜欢
          • 2020-01-18
          • 2014-12-06
          • 2017-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-15
          • 2020-08-07
          相关资源
          最近更新 更多