希望在这里找到一些新的练习的帮助。
幸运的是,我知道如何使用递归函数,但这一个是杀了我,我可能只是想太多的跳出框框。
我们得到一个字符串:
c = "3+4*5+6+1*3"
现在我们必须编写一个函数,该函数递归地给出计算的结果。
现在我知道递归结束应该是字符串的长度,应该是1。
我们的教授给了我们另一个例子,我们应该用这个函数。
int(number)
string.split(symbol, 1)
我们有如下代码:
c = "3+4*5+6+1*3"
print(c)
print()
sub1, sub2 = c.split("+", 1)
print("Result with '+':")
print("sub1=" + sub1)
print("sub2=" + sub2)
print()
sub1, sub2 = c.split("*", 1)
print("Result with '*':")
print("sub1=" + sub1)
print("sub2=" + sub2)
print()
我的想法是把字符串分割成最小值,这样我就可以把它们变成整数,然后把它们加起来。但是我完全失去了代码应该是什么样子,我是一个真正的初学者,所以我真的很抱歉。我甚至不知道我一开始想的是对的。仍然希望,有人可以帮助!我所拥有的:
def calc(string):
if len(string) == 1:
return string
谢谢大家!
问候Chrissi
我创建了一个函数来求解这样的方程。但是,唯一可能的字符是数字,以及操作符add(+)和mult(*)。如果您尝试使用任何其他字符,如空格,将会出现错误。
# Solves a mathematical equation containing digits [0-9], and operators
# such as add + or multiply *
def solve(equation, operators, oindex=0):
# If an operator is available, use the operator
if (oindex < len(operators)):
# Get the current operator and pair: a op b
op = operators[oindex]
pair = equation.split(op, 1)
# If the pair is a pair (has 2 elements)
if (len(pair) == 2):
# Solve left side
a = solve(pair[0], operators)
# Solve right side
b = solve(pair[1], operators)
# If current operator is multiply: multiply a and b
if (op == '*'):
print(a, '*', b, '=', a*b)
return a * b
# If current operator is add: add a and b
elif (op == '+'):
print(a, '+', b, '=', a+b)
return a + b
# If it's not a pair, try using another operator
else:
return solve(equation, operators, oindex+1)
else:
# If no operators are available, then equation is
# just a number.
return int(equation)
if __name__ == '__main__':
equation = "3+4*5+6+1*3"
# If mult (*) takes precedence, operator order is "+*"
# > 3+4*5+6+1*3 = ((3)+((4*5)+((6)+(1*3))))
# = ((3)+((20)+((6)+(3))))
# = ((3)+(20+(9)))
# = ((3)+(29))
# = (32)
print("MULT, then ADD -> ",equation + " = ", solve(equation, "+*"))
# If add (+) takes precedence, operator order is "*+"
# > 3+4*5+6+1*3 = ((3+4)*(((5)+(6+1))*(3)))
# = ((7)*((5+7)*(3)))
# = ((7)*(12*3))
# = (7*36)
# = (252)
print("ADD, then MULT -> ",equation + " = ", solve(equation, "*+"))
可以使用参数operators
设置操作符,该参数为字符串,包含所有支持的操作符。本例中:+*
.
这些字符的顺序很重要,这会改变表达式中每个操作符的优先级。
输出如下:
4 * 5 = 20
1 * 3 = 3
6 + 3 = 9
20 + 9 = 29
3 + 29 = 32
MULT, then ADD -> 3+4*5+6+1*3 = 32
3 + 4 = 7
6 + 1 = 7
5 + 7 = 12
12 * 3 = 36
7 * 36 = 252
ADD, then MULT -> 3+4*5+6+1*3 = 252