Python循环未正确循环

2024-05-17 04:03:53 发布

您现在位置: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)))

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


Tags: 项目目的列表ifpurchaseitem物品次数
2条回答

对于所讨论的循环,我现在将其修改为

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

循环部分做得很好,但它没有像我希望的那样做正确的两件事

  1. 它没有将正确数量的append添加到列表中,因为它只是添加了一个aProp,当它在循环的顶部购买时,它购买了b数量的append。你知道吗
  2. 它不会循环浏览要从中购买的列表。它应该从[0]到最后一个(假设它有5个项目)[4]并为每个项目购买b次(除非它只能抓取一个),然后移动到下一个,所以,[0]掷3,购买3次,移动到[1],购买5次,然后移动到。。。最后点击[4],它被购买了2次,如果它还有剩余的CP,它会再次从[0]-[4]返回列表。你知道吗

你的问题是:

    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,以防止以后代码中出现这种类型的混淆。你知道吗

相关问题 更多 >