You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python while循环计算列表最后两零间元素和输出0问题排查

问题说明

给定整数列表 numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9],列表至少包含2个0,需求为计算最后两个0之间的数字之和,若最后两个0相邻则输出0。
原有实现代码如下:

numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
index_of_first_zero = 0
i = 0
while i < len(numbers):
    if numbers[i] == 0:
        index_first_zero = 1
        break
    i += 1

index_of_last_zero = len(numbers) - 1
i = len(numbers) - 1
while i >= 0:
    if numbers[i] == 0:
        index_of_last_zero = i
        break
    i -= 1


summa = 0
while i in range(index_of_first_zero+1, index_of_last_zero):
    summa += numbers[i]

print("Summa =", summa)

运行代码始终输出Summa = 0,不符合预期。

代码存在的问题
  • 目标索引找错:需求是取最后两个0的位置,原有代码从列表头部开始找整个列表的第一个0,完全不符合需求,需要定位的是倒数第二个0的位置,不是列表首个0。
  • 变量拼写+赋值错误:提前定义的变量名为index_of_first_zero,找到0时却给拼写错误的index_first_zero赋值,且赋值为硬编码的1,没有存储当前0的索引值,后续计算引用的变量值完全错误。
  • 求和循环逻辑错误:while i in range(...) 是错误写法,找完最后一个0后i的值就是最后一个0的索引,不在目标遍历区间内,循环体一次都不会执行,求和变量始终为初始值0。
修正后的代码

正确思路是先从列表尾部往前找最后一个0,再从该位置继续往前找倒数第二个0,最后累加两个索引中间的元素即可,相邻0的场景下遍历区间为空,自然得到和为0,不需要额外判断:

numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]

# 定位最后一个0的索引
i = len(numbers) - 1
while i >= 0:
    if numbers[i] == 0:
        last_zero = i
        break
    i -= 1

# 定位倒数第二个0的索引
i = last_zero - 1
while i >= 0:
    if numbers[i] == 0:
        second_last_zero = i
        break
    i -= 1

# 累加两个0中间的数值
summa = 0
for idx in range(second_last_zero + 1, last_zero):
    summa += numbers[idx]

print("Summa =", summa)

运行后输出Summa = 2,符合预期(示例列表最后两个0在索引7和9的位置,中间只有数字2)。

内容的提问来源于stack exchange,提问作者user19401771

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:21:24