Python使用While循环求和Neg值

时间:2019-04-04 16:43:35

标签: python

我正在尝试使用while循环编写代码以求和列表中的所有负数。我得到的是-10,而不是-17。知道为什么吗?谢谢!

# sum all the negative numbers using a while loop
given_list3 = [7, 5, 4, 4, 3, 1, -2, -3, -5 ,-7]
total6 = 0
i = 0
while -1 < 0:
        total6 += given_list3[i]
        i += -1
        if given_list3[i] > 0:
            break
print(total6)

7 个答案:

答案 0 :(得分:1)

各种错误

  • -1 < 0没有意义,它不会终止
  • 找到第一个否定元素时,您break

您应该做类似的事情

index = 0

while index < len(lst):
    value = lst[index]

    if value > 0:
        continue

    total += value

    index += 1

请注意,在python中,直接迭代值更为常见

for value in lst:
    if value >= 0:
        total += value

或使用列表理解

total = sum([x for x in lst if x >= 0])

答案 1 :(得分:0)

说实话,这不是最好的书写方式,但是,如果您有一个排序的列表,其中所有负数都在一侧,那么它将起作用。

此问题是您将i设置为0,在该列表中该值为7。因此,您的while循环正在执行的是7 + -7 + -5 + -3 + -2 ...您可能希望启动i = -1,以便它添加的第一个对象是-7,这将为您提供预期的结果。

# sum all the negative numbers using a while loop
given_list3 = [7, 5, 4, 4, 3, 1, -2, -3, -5 ,-7]
total6 = 0
i = -1
while -1 < 0:
    total6 += given_list3[i]
    i += -1
    if given_list3[i] > 0:
        break
print(total6)

要解释为什么这样做有效,您需要了解列表或数组中的位置。根据您的列表:

List items:  [7, 5, 4, 4, 3, 1, -2, -3, -5 ,-7]
Positions:   [0][1][2][3][4][5] [6] [7] [8] [9]

List items:  [  7,  5,  4,  4,  3,  1, -2, -3, -5 ,-7]
From Reverse:[-10][-9][-8][-7][-6][-5][-4][-3][-2][-1]

如果要查看它,可以通过这种方式将其视为连续光谱:

List:     [   7,  5,  4,  4,  3,  1, -2, -3, -5 ,-7, 7, 5, 4, 4, 3, 1, -2, -3, -5 ,-7]
Positions:[ -10][-9][-8][-7][-6][-5][-4][-3][-2][-1][0][1][2][3][4][5] [6] [7] [8] [9]

虽然列表仅包含7,..- 7,但对“ given_list3”的调用在上述范围内进行。允许负数从右开始工作,而0则从左开始工作。

答案 2 :(得分:0)

如果您有一个其中分散有负值的列表,则最好遍历每个对象,比较一下它是否小于0,然后将其添加到总计中。

given_list = [-2,-3,5,7,4,-5,4,3,1,-7]
total = 0
for num in given_list:
    if num < 0:
        total = total + num
print(total)

在这种情况下,您不必担心从列表的另一端开始。

答案 3 :(得分:0)

您应该放置debugger并逐步执行每行。您将看到添加的第一个值是numbers[0],它是正数7。从那里开始,它就像您期望的那样工作;它循环返回并添加数字,直到找到一个正数,然后退出。


您可以像filtersum一样使用higher order functions,以使您的代码更美观,并且更不易出错。

numbers = [7, 5, 4, 4, 3, 1, -2, -3, -5 ,-7]

sum(filter(lambda x: x<0, numbers))

答案 4 :(得分:0)

  l=[1,2,3,-1,-4]
  i=-1
  total=0
  while l[i]<0:
      total+=l[i]
      i-=1
  print(total)

答案 5 :(得分:0)

这是您要寻找的吗?

c_list = [5, 3, 1, -2, -4, -6, -100]
total6 = 0
i = 0
while c_list[i] <= len(c_list):
    for i in c_list:
        if i <= 0:
            total6 += i
            i += 1
    break
print(total6)

enter image description here

答案 6 :(得分:-2)

假设 given_list 总是降序。

given_list = [7, 5, 4, 4, 3, 1, -2, -3, -5, -7] # find the sum of negative numbers

total = 0
# i start at the end of the list and went backward
i = len(given_list)-1
while given_list[i] < 0:
    total = total + given_list[i]
    i = i-1
print(total)