Python while循环条件为false时未终止运行该如何排查解决?
问题排查与修复方案
问题根因
- 循环嵌套逻辑错误:你将遍历所有价格的
for循环完全放在了while循环内部,while的终止条件price_t <= k只会在所有价格全部累加完成后才会校验,无法在累加中途判断是否超出阈值,自然不会提前跳出。 - 无中途终止逻辑:累加过程中没有增加超出阈值后的跳出判断,即使中间
price_t已经大于k,也会继续跑完整个for循环。 - 额外问题:
print(count)放在while循环内部,如果出现多轮while执行的情况会重复打印输出,不符合预期。
修复后代码
first_multiple_input = input().rstrip().split() n = int(first_multiple_input[0]) k = int(first_multiple_input[1]) prices = list(map(int, input().rstrip().split())) prices = sorted(prices) price_t = 0 count = 0 for price in prices: # 累加前判断是否会超过阈值,避免超阈值后还执行累加操作 if price_t + price <= k: price_t += price count +=1 else: # 超出阈值直接跳出,无需遍历后续更大的价格 break print(count)
测试用例验证
测试输入:
7 50 1 12 5 111 200 1000 10
排序后价格为[1,5,10,12,111,200,1000],累加前4个总和为28 ≤50,加第5个111后总和为139>50,最终输出为4,符合预期。
内容的提问来源于stack exchange,提问作者Zhengxi Jiang
相关产品推荐
相关产品推荐

