我制作的计算器代码与我想象的不一样? (Python 3.x)

The code for a calculator I made doesn't act like I thought it would? (Python 3.x)

我目前正在积极学习 Python。我已经有了一些代码经验,但还不足以让我称自己为一名优秀的编码员(甚至是称职的编码员)。

我试图创建一个(非常)简单的计算器脚本。我想确保用户可以选择他想一起计算多少个不同的值。为此,我创建了一个 while 循环。

uArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

def divide():
    uAmount = int(input("How many different values do you want to add together? (max 10) "))
    if uAmount <= 10:
        for amount in range(0, uAmount):
            uArray[amount] = int(input("enter a number: "))
    else:
        print("ERROR\nMax 10 different values supported")
        return 1

    global uTotal
    uTotal = 1
    for amount1 in range(0, (uAmount - 1)):
        uTotal /= uArray[amount1]

    print("The result is: " + str(uTotal))

我知道这段代码对很多人来说可能看起来真的很难看,而且我相信如果我知道怎么做的话,同样的过程可以更容易和更简单地完成。

我只是想不通为什么我当前的方法不起作用,即使在尝试 google 之后也是如此。

示例:如果我选择使用 2 个不同的值。我将这些值设置为 50 和 2,它当然应该给出 25。但它给出的是 0.02。

在此先感谢任何愿意提供帮助的人! (对不起,如果这是一个菜鸟问题,哈哈)

I just can't figure out why my current method doesn't work

简单。您从 uTotal 等于 1 开始。然后除以每个数字(最后一个数字除外)。由于您只有两个数字,50 和 2,并且您没有使用第二个(由于 range(0, uAmount - 1)),因此整个计算等于:

1 / 50 # => 0.02

如何修复?

不是将 uTotal 设置为 1,而是将其设置为第一个元素的值。然后使用所有其他元素(第一个元素除外)应用您的操作(在本例中为除法)。

数组解包语法在这里可能会派上用场:

total, *rest = uArray
for operand in rest:
  total /= operand

目前它用 1 除以你的第一个输入,即 50。

请注意,for 循环不会像您想象的那样进行迭代。需要删除'- 1'

这是一个版本:

uArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

def divide():
    uAmount = int(input("How many different values do you want to add together? (max 10) "))
    if uAmount <= 10:
        for amount in range(0, uAmount):
            uArray[amount] = int(input("enter a number: "))
    else:
        print("ERROR\nMax 10 different values supported")
        return 1

    global uTotal
    uTotal = uArray[0]
    for amount1 in range(1, (uAmount)):
        uTotal /= uArray[amount1]

    print("The result is: " + str(uTotal))