【问题标题】:in Python, I get a wrong total, i only get the total of the positive numbers that are located before the negative ones [duplicate]在Python中,我得到一个错误的总数,我只得到位于负数之前的正数的总数[重复]
【发布时间】:2020-09-20 23:50:24
【问题描述】:

我用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)

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

【问题讨论】:

  • 这里你不应该使用while 循环。想一想:while 循环将继续执行 while 数字保持正数,并在遇到第一个负数时立即停止。请改用 for 循环或更改 while 循环中的条件表达式。
  • @pavel 使用while 循环或for 循环不是问题。考虑到适当的条件,该代码在这两种情况下都能正常工作。
  • @SwatiSrivastava 虽然while 可以工作,但在这种情况下使用它是错误的工具。使用for 循环对容器进行迭代更简单。无需初始化或递增索引,如果需要索引,请使用for i,item in enumerate(lst)。对于这种情况,更简单的是列表推导。
  • @MarkTolonen 我同意for 在迭代条件下效果更好,但使用while 可能没有错,只是效率低下。

标签: python negative-integer


【解决方案1】:

那是因为你有条件遇到负数就结束循环。您可以先从循环中删除该条件。

while i<len(list):

接下来,您只想添加非负数,因此,在循环中使用带有所需条件的条件语句。

if list[i] > 0:

【讨论】:

  • 谢谢!我已经尝试过这个解决方案,但现在我只在输出中输入第一个数字 3
【解决方案2】:

尝试理解 while 循环的工作原理。只要i &lt; len(listlist[i] &gt; 0 就可以工作。当它达到值-9 时,while 循环的第二个条件为假并终止。因此在遇到第一个负整数后不会计算总和。

要解决这个问题,请这样做

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

另外,虽然list 可以使用变量名,但建议不要在 Python 中这样做,因为list 也是关键字。

【讨论】:

    【解决方案3】:

    在这种情况下不要使用while 循环。在 Python 中使用 for 循环对容器中的项目进行迭代更容易。再加上逻辑错误,当and list[i] &gt; 0条件失败时提前退出while循环。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2016-03-11
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      • 1970-01-01
      相关资源
      最近更新 更多