【问题标题】:function with operators as parameter以运算符为参数的函数
【发布时间】:2019-07-19 13:33:58
【问题描述】:

我刚开始为了好玩而编写代码,我正在尝试构建一个使用用户输入的计算器。 2 个号码和 1 个接线员。我对编码真的很陌生,目前仅限于非常简单地使用 if 语句和 while/for 循环,我刚刚开始研究函数。一段时间以来,我一直试图将此代码放入函数中,但我找不到将字符串“operator”用作函数中的实际运算符的解决方案。

一定有办法让这一切变得更短。

if used_op == "+":
    print(">  " + str(number_1) + " + " + str(number_2) + " = " + str(number_1 + number_2) + "  <")
elif used_op == "-":
    print(">  " + str(number_1) + " - " + str(number_2) + " = " + str(number_1 - number_2) + "  <")
elif used_op == "*":
    print(">  " + str(number_1) + " * " + str(number_2) + " = " + str(number_1 * number_2) + "  <")
elif used_op == "/":
    print(">  " + str(number_1) + " / " + str(number_2) + " = " + str(number_1 / number_2) + "  <")
elif used_op == "%":
    print(">  " + str(number_1) + " % " + str(number_2) + " = " + str(number_1 % number_2) + "  <")
elif used_op == "**":
    print(">  " + str(number_1) + " ** " + str(number_2) + " = " + str(number_1 ** number_2) + "  <")
elif used_op == "//":
    print(">  " + str(number_1) + " // " + str(number_2) + " = " + str(number_1 // number_2) + "  <")

我尝试的是这样的:

def solve(op):
    print(">  " + str(number_1) + op + str(number_2) + " = " + str(
        number_1 + **op** + number_2) + "  <")

solve(used_op)

我试图在互联网上找到一个解决方案,但到目前为止我没有运气。

【问题讨论】:

    标签: python function operators


    【解决方案1】:

    您可以使用字典和operator 模块来做您想做的事:

    import operator
    
    # this will act like a sort of case statement or switch
    operations = {
        '>': operator.gt,
        '<': operator.lt,
        '=': operator.eq,
        '+': operator.add,
        '-': operator.sub,
        '/': operator.div,
        '*': operator.mul,
        '**': operator.pow,
        '//': operator.floordiv,
        ... # so on and so forth
    }
    
    def calculate(num1, num2, op):
        # operation is a function that is grabbed from the dictionary
        operation = operations.get(op)
        if not operation:
             raise KeyError("Operation %s not supported"%op)
    
        # Call the operation with your inputs
        num3 = operation(num1, num2)
        print('%3.2f %s %3.2f = %3.2f' % (num1, op, num2, num3))
    
    
    calculate(1,2, '+')
    # 1.00 + 2.00 = 3.00
    
    

    【讨论】:

      【解决方案2】:

      只需评估您的数学表达式,python 将为您完成剩下的工作。

      这当然可以通过内置的eval() 函数来完成。

      以下是一些如何使用它的示例:

      >>> eval("1+1")
      2
      
      >>> A = 2
      >>> eval("A * 3")
      6
      

      您尝试编写的函数可能看起来像这样

      def solve(a, b, op):
          expression = str(a) + op + str(b)
          print("> " + expression + "=" + str(eval(expression)))
      
      solve(1, 2, "+")   # > 1+2=3
      solve(10, 10, "*") # > 10*10=100
      solve(4, 2, "/")   # > 4/2=2.0
      solve(5, 10, "-")  # > 5-10=-5
      

      【讨论】:

      • 我非常喜欢这个!看起来非常干净优雅。
      • 没问题!值得注意的是,以前接受的答案通常说得更“专业”,但是在简单性方面,我会说这是要走的路。
      • 说实话,我还没有真正理解其他答案。我试了一下,它奏效了。但我应该理解它才能使用它。
      • 我同意这个答案非常简单易读。但是,eval 通常被视为一种不好的做法,不能轻易使用。对于这个例子,没有什么坏处,只是在未来的答案中提醒一下
      • 我现在很伤心,我写了一个 80 行的计算器程序,我花了 5 个小时。它远非完美。现在我意识到: expression = input("Enter calc: ") print("> " + expression + " = " + str(eval(expression)) + "
      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2015-05-04
      • 2018-03-21
      • 2019-02-04
      • 2018-04-28
      相关资源
      最近更新 更多