在Python中,我得到了一个错误的总数,我只得到了位于负数之前的正数的总数

在Python中,我得到了一个错误的总数,我只得到了位于负数之前的正数的总数,python,negative-integer,Python,Negative Integer,我用python编写了以下代码: list=[3,5,7,6,-9,5,4] i=0 total=0 while i<len(list) and list[i] > 0: total+=list[i] i+=1 print(total) list=[3,5,7,6,-9,5,4] i=0 总数=0 而我0: 总计+=列表[i] i+=1 打印(总计) 而不是得到所有正数的总数,我只得到位于负数之前的总数,我不确定我做错了什么,这只是我在python中的第四个代

我用python编写了以下代码:

list=[3,5,7,6,-9,5,4]
i=0
total=0
while i<len(list) and list[i] > 0:
     total+=list[i]
     i+=1
print(total)
list=[3,5,7,6,-9,5,4]
i=0
总数=0
而我0:
总计+=列表[i]
i+=1
打印(总计)

而不是得到所有正数的总数,我只得到位于负数之前的总数,我不确定我做错了什么,这只是我在python中的第四个代码,我需要一些帮助^^

这是因为如果遇到负数,循环将结束。您可以首先从循环中删除该条件

while i<len(list):

试着理解while循环的工作原理。只要
i
list[i]>0
,它就可以工作。当它达到值
-9
时,while循环的第二个条件变为false并终止。因此在遇到第一个负整数后,不会计算和

要解决这个问题,请执行以下操作:

lis = [3, 5, 7, 6, -9, 5, 4]
sum = 0
for i in lis:
    if i > 0:
        sum += i
对于while循环代码,使用

lis = [3, 5, 7, 6, -9, 5, 4]
i = 0
sum = 0
while i < len(lis):
    if lis[i] > 0:
        sum += lis[i]
    i = i + 1
lis=[3,5,7,6,-9,5,4]
i=0
总和=0
而我0:
总和+=lis[i]
i=i+1

此外,虽然可以使用变量名作为
list
,但建议不要在Python中使用,因为
list
也是一个关键字。

在这种情况下,不要使用
while
循环。在Python中,使用
for
循环,容器中的项的迭代更容易。另外,逻辑错误,退出
while
循环在
和list[i]>0
条件失败时提前操作

lst = [3,5,7,6,-9,5,4]
total = 0
for item in lst:
    if item > 0:
        total += item
print(total)
另外,不要使用
list
作为变量名。这将替换内置的
list
类型,称为“阴影”

您还可以使用列表理解并进一步简化代码:

lst = [3,5,7,6,-9,5,4]
total = sum([item for item in lst if item > 0])
print(total)

在这里,您不应该使用
while
循环。想想看:while循环将在数字保持正数时继续执行,并在遇到第一个负数时立即停止。请改用
for
循环,或更改while循环中的条件表达式。@pavel
while
循环不存在问题g使用或
for
循环。考虑到适当的条件,代码在这两种情况下都能很好地工作。@SwatiSrivastava虽然
While
可以工作,但在这种情况下使用它是错误的工具。使用
for
循环在容器上进行迭代更简单。不需要初始化或增加索引,并且如果需要索引,请使用枚举(lst)中的i项的
。对于这种情况,更简单的是列表理解。@MarkTolonen我同意
for
在迭代条件下效果更好,但是使用
while
可能没有错,只是效率低下。谢谢!我尝试过这个解决方案,但现在我只得到了输出中的第一个数字,即3
lst = [3,5,7,6,-9,5,4]
total = sum([item for item in lst if item > 0])
print(total)