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

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}")
代码逻辑说明
  1. 标记已处理项目:用processed列表记录每个项目是否已经被投资过,避免重复计算收益。
  2. 循环检查直到无新项目:用while True持续遍历列表,每轮遍历后检查是否有项目被处理:
    • 如果有项目被处理(updated=True),说明资金有增加,需要再一轮遍历检查之前不满足的项目
    • 如果本轮没有任何项目被处理(updated=False),说明所有能投资的项目都已处理,退出循环
  3. 计算利润:最终总资金减去初始资金即为利润
结果验证

运行代码后输出为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:55:30