Python中能否在同一循环内重检列表索引?需求与代码问题
问题分析
你需要按固定顺序遍历投资项目列表,每次检查当前资金是否满足对应项目的投资门槛:
- 满足则将对应收益加到总资金中
- 资金增加后,需要回头重新检查之前不满足条件的项目,直到没有新的项目可以投资为止
- 不能打乱项目顺序,必须保证
investments和revenue的索引一一对应
当前代码仅遍历了一次列表,导致初始资金不够的项目(比如索引0)后续资金足够时无法被重新检查,最终结果不符合预期。
修正后的代码
aMoney = 2040 investments = [3000, 2040, 3040, 5000, 3340, 4000, 7000] revenue = [500, 1000, 300, 450, 2010, 650, 1500] totalMoney = aMoney processed = [False] * len(investments) # 标记项目是否已处理 while True: updated = False # 标记本轮是否有项目被处理 for j in range(len(investments)): if not processed[j] and totalMoney >= investments[j]: totalMoney += revenue[j] processed[j] = True updated = True if not updated: break # 本轮没有项目被处理,退出循环 profit = totalMoney - aMoney print(f"The profit is ${profit}")
代码逻辑说明
- 标记已处理项目:用
processed列表记录每个项目是否已经被投资过,避免重复计算收益。 - 循环检查直到无新项目:用
while True持续遍历列表,每轮遍历后检查是否有项目被处理:- 如果有项目被处理(
updated=True),说明资金有增加,需要再一轮遍历检查之前不满足的项目 - 如果本轮没有任何项目被处理(
updated=False),说明所有能投资的项目都已处理,退出循环
- 如果有项目被处理(
- 计算利润:最终总资金减去初始资金即为利润
结果验证
运行代码后输出为The profit is $4910,与预期结果一致:
- 第一轮处理:索引1(2040≥2040)、索引2(3040≤3040)、索引4(3340≤5350)、索引5(4000≤7360),总资金变为2040+1000+300+2010+650=6000
- 第二轮处理:索引0(3000≤6000)、索引3(5000≤6500),总资金变为6000+500+450=6950
- 第三轮遍历:剩余索引6的投资门槛7000>6950,无项目处理,退出循环
- 利润:6950-2040=4910
内容的提问来源于stack exchange,提问作者F00
相关产品推荐
相关产品推荐

