我试过这个,但问题是我不知道如何使该功能识别数学运算,如+
或-
def calc(n1,n2,"x"):
y= n1 x n2
return y
答案 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
。
希望它有所帮助!