我正在尝试使用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)
答案 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
。从那里开始,它就像您期望的那样工作;它循环返回并添加数字,直到找到一个正数,然后退出。
您可以像filter
和sum
一样使用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)
答案 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)