只对列表中的奇数求和,用 for 循环很容易做到,但是 while 循环呢?

sum only the odd numbers in the list, easy to do with for loop but how about while loop?

我试着为这个特定的列表写这个,但它总是崩溃,我能改变什么?

items = [23, 555, 666, 123, 128, 4242, 990]
summa = 0
n = 0
while n < len(items):
   num = items[n]
   if num % 2 != 0:
      continue
   summa += num
   n += 1
print(summa)

您还应该在 if 块中递增 n

if num % 2 != 0:
  n += 1
  continue

编辑:
如评论中所述,更简洁的解决方案是在 if 块之前递增 n,以防止重复代码:

while n < len(items):
   num = items[n]
   n += 1
   if num % 2 != 0:
      continue
   summa += num
print(summa)

如果 num % 2 != 0

你忘了加数
items = [23, 555, 666, 123, 128, 4242, 990]
summa = 0
n = 0
while n < len(items):
   num = items[n]
   if num % 2 != 0:
      n += 1
      continue
   summa += num
   n += 1
   print(summa)

正如其他答案指出的那样,当 if 为真时,永远不会达到 n += 1,所以你有一个无限循环。

您可以使用生成器表达式

代替while循环
print(sum(item for item in items if item % 2)) # 701

你不需要继续它只是在不增加 n 的值的情况下不断循环。 而是进行以下更改:

items = [23, 555, 666, 123, 128, 4242, 990]
summa = 0
n = 0
while n < len(items):
   num = items[n]
   if num % 2 != 0:
      summa += num
   n += 1
print(summa)

没有使用 continue 关键字。只需删除它,如果数字是奇数,则将其添加到 summa 中,否则什么都不做。在这两种情况下,n 的值都会增加 1,因为它在 if 块之外。

items = [23, 555, 666, 123, 128, 4242, 990]
summa = 0
n = 0
while n < len(items):
    num = items[n]
    if num % 2 != 0:
        summa += num
    n += 1
print(summa)

这是您将得到的输出 701

这是适合您的代码:

items = [23, 555, 666, 123, 128, 4242, 990,1]
summa = 0
n = 0

while n < len(items):
    summa += items[n] if items[n]%2 != 0 else 0
    n+=1
print (summa)