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
相关产品推荐
相关产品推荐

