编写一个函数,计算给定2个数字和运算符的运算结果

时间:2017-03-20 16:01:27

标签: python

我试过这个,但问题是我不知道如何使该功能识别数学运算,如+-

def calc(n1,n2,"x"):
    y= n1 x n2
    return y 

4 个答案:

答案 0 :(得分:2)

使用operator.*和地图:

import operator

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

def calc(n1, n2, op):
    return operators[op](n1, n2)

<强>附录:

请注意,我最初只编写了这四个运算符,但是使用这种方法可以轻松添加任意两个数字的运算(余数,布尔运算......)。通过实现该功能可以添加更多 ad hoc 操作,例如:

import random
import operator

def dice_thrower(n_dice, dice_size):
    return sum(random.randint(1, dice_size)
               for _ in range(n_dice))

operators = {"+": operator.add,
             "-": operator.sub,
             "*": operator.mul,
             "/": operator.div,
             "d": dice_thrower}
...
# unchanged `calc` function

答案 1 :(得分:1)

三种解决方案:

解决方案#1:对您的&#39;运营商进行测试&#39;值:

if operator == '+':
    return n1 + n2
elif operator == '-':
    return n1 - n2
# etc

解决方案#2:Python函数是对象,因此您可以构建一个&#39; operator =&gt;功能&#34; dict(使用lambda使其更容易):

OPERATIONS = {
    "+" : lambda n1, n2 : n1 + n2,
    "-" : lambda n1, n2 : n1 - n2,
    "*" : lambda n1, n2 : n1 * n2,
    "/" : lambda n1, n2 : n1 / n2,
    }

def calc(n1,n n2, operator):
    return OPERATIONS[operator](n1, n2)

解决方案#3:使用已经提供运算符作为函数的operator模块执行相同的操作:

import operator

OPERATIONS = {
    "+" : operator.add,
    "-" : operator.sub,
    "*" : operator.mul,
    "/" : operator.div,
    }

答案 2 :(得分:0)

使用eval

def calc(n1,n2,operator):
    return eval(str(n1)+operator+str(n2))

结果:

 calc(2,5,"-")
 >>-3

答案 3 :(得分:0)

最安全但不是最方便的解决方案是定义一个“手动”完成工作的功能:

def calculate(num1,num2,sign):
    if sign == "+":
        return num1 + num2
    elif sign == "-":
        return num1 - num2
    elif sign == "*":
        return num1 * num2 #multiplication
    elif sign == "**":
        return num1 ** num2 #powers
    elif sign == "/" or sign == ":":
        return float(num1) / float(num2) #division
    elif sign == "%":
        return num1 % num2
    else:
        raise Exception('Invalid operator in use') # handling invalid signs

用法:print(calculate(3,2,"*")) # prints 6

我真的更喜欢这个解决方案,因为您可以执行自定义操作,并且可以根据需要添加任意数量的操作。对于无效符号,会抛出Exception

希望它有所帮助!