我制作的计算器代码与我想象的不一样? (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))
我目前正在积极学习 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))