首页 > 解决方案 > Python循环未正确循环

问题描述

我的循环“应该”从 [0] 遍历列表到最多为 [7] 的最终项目,然后购买并计算从列表中购买该项目的次数,然后将结果乘以一个值。

它目前正在做的是购买少量物品,输出每个物品的购买次数,仅此而已。它甚至没有“花掉”所有的“津贴”

https://pastebin.com/vSecjxA5

它通常输出

CP Total: 2000
Type Item: Item
# of Properties: 5
{'MDEF': 4}
{'SPR': 3}
{'AGI': 2}
{'CRIT': 3}
{}

如果您看到代码并将成本加在一起,它最多只能加起来 100-200,而不是接近 2000

for aProp in S:
    cost = CostDic[aProp]
    if (cost * 5) < CP:
        purchase_ls = []
        while CP >= cost:
            b = randint(1, 5)
            cost = cost * b
            if CP < cost:
                continue
            purchase_ls.append(aProp)
            CP = CP - cost
    else:
        purchase_ls = []
        while CP >= cost:
            cost = cost
            if CP < cost:
                continue
            purchase_ls.append(aProp)
            CP = CP - cost
    print(dict(Counter(purchase_ls)))

是不是特别让我伤心的部分

标签: pythonpython-3.x

解决方案


这是你的问题:

    while CP >= cost:
        b = randint(1, 5)
        cost = cost * b
        # More stuff follows...

在这个循环中,你现在已经修改了 的值cost,我猜你不是故意的。具体来说,cost = cost * b我相信您的意图是,cost右侧代表单个单位的成本,cost左侧代表“n”个单位的成本,其中“n”是1 到 5 之间的随机数。

但是这段代码实际上在做什么与那个意图不同。第二次进入该while循环时,变量cost仍处于其新的更高值,然后将再次乘以随机数 1-5。因此,以这个速度cost将很快变得太大而CP >= cost无法保持真实。

我认为让你在这里绊倒的是你cost在不同的时间使用相同的变量来表示不同的事物。我强烈建议您将其更改为具有更有意义名称的两个不同变量,例如unitCostgroupCost,以防止以后在代码中出现这种类型的混淆。


推荐阅读