【问题标题】:Using arithmetic operations from given tuple [duplicate]使用给定元组的算术运算[重复]
【发布时间】:2019-03-17 16:28:40
【问题描述】:

我想在给定元组的 python 中使用算术运算。事情是我知道我可以为它们中的每一个使用 if 语句,并且根据用户输入,它会给出正确的答案。我不知道,但有没有办法在没有 ifs 的情况下做到这一点。正如您在下面看到的,我已经尝试过使用 for,但我无法将字符串作为算术运算符。

代码:

__operators = ('+', '-', '/', '//', '*', '**', '%')

def calculator():
    x = input()
    operator = input()
    y = input()
    op = operator

    # print(str(x) + operator + str(y))

    rezultat = 0

    for operator in __operators:
        if operator in __operators:
            operator = op     


    rezultat = x + op + y       
    print(rezultat)
    return rezultat


calculator()

【问题讨论】:

  • 您遇到了麻烦,因为它不是 运算符,它只是一个字符串。此外,if operator in __operators: 似乎完全没有意义,因为你在循环中 for operator in __operators:
  • @jonrsharpe 感谢您的更正。有没有办法转换它,以便 python 将其作为运算符读取?
  • 您可能希望使用字典,将运算符字符串映射到来自operator 模块的运算符函数。
  • 有几个选项。我建议研究一下,关于如何从字符串到运算符的现有问题。

标签: python


【解决方案1】:

您可以使用operator 模块和dict

import operator

op = {
    "+": operator.add
    "-": operator.sub
    "/": operator.truediv
    "//": operator.floordiv
    "*": operator.mul
    "**": operator.pow
    "%": operator.mod
}

print(op["+"](2, 3))

5

【讨论】:

    【解决方案2】:

    这与 @Fukiyel 的回答基本相同,但没有使用operator 模块。你实现了你希望你的计算器支持的所有操作,然后你创建一个带有关键操作符字符的字典并对函数赋值:

    def add(n1,n2):
        return n1 + n2
    
    def subtract(n1,n2):
        return n1 - n2
    
    def division(n1,n2):
        if n2 != 0:
            return n1 / n2
    
    def integerDivision(n1,n2):
        if n2 != 0:
            return n1 // n2
    
    def multiply(n1,n2):
        return n1 * n2
    
    def power(n1,n2):
        return n1 ** n2
    
    def modulo(n1,n2):
        return n1 % n2
    
    __operators = {'+' : add, '-' : subtract, '/' : division, '//' : integerDivision, '*' : multiply, '**' : power, '%' : modulo}
    
    def calculator():
        x = int(input())
        operator = input()
        y = int(input())
    
        for op in __operators:
            if operator == op:
                result = __operators[operator](x,y)
                print(result)
                return result 
    
    calculator()
    

    【讨论】:

      【解决方案3】:

      您可以使用eval,但要小心,因为如果处理不当,它会允许任意代码执行。

      if operator in __operators:
          rezultat = eval("x" + operator + "y")
      

      【讨论】:

        猜你喜欢
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 2015-06-02
        • 2020-02-18
        • 1970-01-01
        • 2014-05-05
        • 2023-03-29
        相关资源
        最近更新 更多