Python不能正确地对列表求和

4

Python没有将列表中的所有项相加。我做错了什么?

我正在尝试编写一个计算输入数字平均值的程序,似乎len()函数工作正确,但是sum()函数只对某些数字进行求和。

numbers = []
More = True

while More:
    xInp = input('Number: ')
    yInp = input('Again?(y/n) ')
    if yInp == 'y':
        numbers.append(int(xInp))
    elif yInp == 'n':
        break

print(sum(numbers))
print(len(numbers) + 1)
print(sum(numbers) / int(len(numbers) + 1))

1
你确定这段代码的意图是正确的吗?此代码要求输入一个数字,只有当用户回答“是的,我想再添加一些数字”时才将该数字添加到列表中。这样做正确吗?我认为程序应该将数字添加到列表中,然后再询问用户是否要添加更多数字。 - emremrah
2
第5行有语法错误。编辑:等等,为什么数字会是一个是/否的选择? - wjandrea
我修改了一下,谢谢。那只是我的翻译不够准确,可能是无意中犯的错误。 - Kacper
3个回答

4
问题在于顺序,您正在退出程序而没有考虑到最后一次输入的值。稍微改变一下顺序会帮助您解决这个问题。此外,请注意撇号和双撇号,在答案中我已经编辑了它们,否则会返回一个SyntaxError
numbers = []

while True:
    xInp = input('Number: ')
    numbers.append(int(xInp))
    yInp = input('Again?(y/n) ')
    if yInp == 'y':
        pass
    elif yInp == 'n':
        break

print(sum(numbers))
print(len(numbers))
print(sum(numbers) / int(len(numbers)))

谢谢,语法错误只是我将代码翻译成英语时粗心大意,可能是因为我不小心犯了错误,因为它在我的原始代码中不存在。 - Kacper
希望答案能帮助您理解并解决问题 :) 请自由选择接受任何一个答案来标记您的问题已得到回答。 - Celius Stingher
让我检查一下,如果有问题我会解决它。谢谢,已经编辑以提供准确的答案。 - Celius Stingher

3

如果用户在下一个提示中选择y,你的代码只会将最近输入的数字添加到数组中。一旦他们输入n,最后输入的数字就不会被添加到列表中。

你需要在数字输入后立即将其添加到列表中,然后检查用户是否想要添加更多数字。

numbers = []

while True: # No need for a variable here
    xInp = input("Number: ")
    numbers.append(int(xInp))
    yInp = input("Again? (y/n): ")
    if yInp == "y":
       pass
    elif yInp == "n":
        break

print(sum(numbers))

按照惯例,变量应从小写字母开始。首字母大写是为类定义(而不是实例)。我最初将More更改为more,但如评论中所提到的,这甚至不必要,因此我将其替换为while True


3
注意使用撇号,否则会返回“语法错误(SyntaxError)”。 - Celius Stingher
@IvanLibedinsky 好的点子 - 我还没有注意到这一点 - 我只是把剩下的内容粘贴进去了。我会修复的。 - Chris
1
@IvanLibedinsky 我做了一些更改并进行了测试,现在它可以工作了。 - Chris
More is never used for anything useful. You might as well drop the variable and do while True: - tripleee

2
您错过了超过一个值中的最后一个值。
numbers = []
More = True

while More:
    xInp = input('Number: ')
    yInp = input('Again?(y/n) ')
    if yInp == 'y':
        numbers.append(int(xInp))
    elif yInp == 'n':
        if xInp:
            numbers.append(int(xInp))
        break

print(sum(numbers))
print(len(numbers))
print(sum(numbers) / int(len(numbers)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接