【问题标题】:How to subtract, divide, or exponentiate 3 numbers with a string user input如何使用字符串用户输入对 3 个数字进行减法、除法或求幂
【发布时间】:2021-03-26 19:00:18
【问题描述】:

好吧,基本上我在高中的第一个计算机科学课上有一个作业,我能够弄清楚如何完成大部分作业。我们应该制作一个计算器,它可以使用 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)

感谢您的帮助!

【问题讨论】:

标签: python subtraction integer-division exponentiation


【解决方案1】:

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

话虽如此,为一系列除法中的一种情况修复代码的方法是在另一个方向上处理输入表达式。也就是说,从表达式末尾开始查找每个“/”并返回到开头。这只是对代码的一个小改动,它会导致像 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

【讨论】:

  • 在进行除法运算之前,我们不应该尝试对元素进行分组吗?不然答案可能不一样吧?
  • @Steve 谢谢你的帮助,我很感激。
  • @nithin11 - 我们根据代码的性质对元素进行分组。代码的 OPs 版本失败并且此版本有效的原因是,在相反方向上处理表达式会导致表达式的术语被不同地分组。事实上,使用这种非常简单的方法解决问题,从头到尾处理表达式会导致正确的分组。
猜你喜欢
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多