首页 > 解决方案 > 如何使用字符串用户输入对 3 个数字进行减法、除法或求幂

问题描述

好的,所以基本上我在高中的第一个计算机科学课上有一个作业,我能够弄清楚如何完成大部分作业。我们应该制作一个计算器,它可以使用 PEMDAS 运算符执行基本功能,并进行跨不同运算符的计算。我能够把它的大部分记下来,但我不知道如何让除法、减法或求幂来处理超过 2 个数字。请帮忙,谢谢!

分配说明:

在下面的练习中,您将创建一个程序,该程序使用递归来求解任何基本方程(加法、减法、乘法、除法和指数)。以下是您的程序的框架。

equation = input("Please enter an equation: ") 
    
def solveIt(e): 
    # loop through e
        # if you find a plus sign
            # return recursive call @param part of e before the plus sign + 
                    # recursive call @param part of e after the plus sign
    return e
print(solveIt(equation))

不要更改任何现有代码。提供的说明将帮助您获取代码以通过加法求解方程。使用复合方程(如 343 + 87 + 5)测试您的代码,并在继续下一步之前验证结果是否正确。

现在这是我可以用来做 8/2,但我不能做 8/2/2 的代码:

expression = input("Please enter an equation: ") 
equation = expression.replace(' ', '')
res=0
total=0
def solveIt(e): 
    global res, total
    for i in range(len(e)):
        if e[i]=="/":
            e1 = e[:i]
            e2 = e[i+1:]
            total=total+solveIt(e1) / solveIt(e2)
            return total
    return int(e)

(solveIt(equation))
print("total:",total)

谢谢您的帮助!

标签: pythonsubtractioninteger-divisionexponentiation

解决方案


对于用于评估数值表达式的一般方法,您将遇到各种问题。您将在运算符优先级、术语的正确分组和正确的评估顺序方面遇到问题。

话虽如此,为一系列除法中的一种情况修复代码的方法是在另一个方向上处理输入表达式。也就是说,从表达式末尾开始查找每个“/”并返回到开头。这只是对代码的一个小改动,它会导致表达式12/3/2正确评估:

expression = input("Please enter an equation: ")
equation = expression.replace(' ', '')
res=0
total=0
def solveIt(e):
    global res, total
    for i in range(len(e)-1, -1, -1):
        if e[i]=="/":
            e1 = e[:i]
            e2 = e[i+1:]
            total=total+solveIt(e1) / solveIt(e2)
            return total
    return int(e)

(solveIt(equation))
print("total:",total)

样本输入:

10000/10/10/5/4

结果输出:

total: 5.0

推荐阅读