以运算符为参数的函数
function with operators as parameter
我只是为了好玩而开始编码,我正在尝试构建一个使用用户输入的计算器。 2 个号码和一个接线员。我对编码真的很陌生,目前仅限于非常简单地使用 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)
有一段时间我试图在互联网上找到解决这个问题的方法,但到目前为止我没有运气。
你可以使用字典和 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
只需计算您的数学表达式,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
我只是为了好玩而开始编码,我正在尝试构建一个使用用户输入的计算器。 2 个号码和一个接线员。我对编码真的很陌生,目前仅限于非常简单地使用 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)
有一段时间我试图在互联网上找到解决这个问题的方法,但到目前为止我没有运气。
你可以使用字典和 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
只需计算您的数学表达式,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