首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python循环未正确循环

Python循环未正确循环
EN

Stack Overflow用户
提问于 2019-02-24 15:43:24
回答 2查看 53关注 0票数 0

我的循环“假设”是从列表中遍历到最后一件商品,最多7件,然后购买并计算从列表中购买该商品的次数,然后将结果乘以一个值。

它目前正在做的是购买少量的商品,输出每个商品被购买的次数,就是这样。它甚至没有“花”掉所有的“零用钱”

https://pastebin.com/vSecjxA5

它通常会输出

代码语言:javascript
复制
CP Total: 2000
Type Item: Item
# of Properties: 5
{'MDEF': 4}
{'SPR': 3}
{'AGI': 2}
{'CRIT': 3}
{}

如果您查看代码并将成本加在一起,最多只有100-200,不会接近2000

代码语言:javascript
复制
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)))

是不是特别让我感到悲伤的部分?

EN

回答 2

Stack Overflow用户

发布于 2019-02-24 17:06:49

这就是你的问题:

代码语言:javascript
复制
    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,以防止以后在代码中出现这种类型的混淆。

票数 0
EN

Stack Overflow用户

发布于 2019-02-25 01:03:24

对于有问题的循环,我现在已经将其修改为

代码语言:javascript
复制
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. 它没有将正确数量的追加添加到列表中,因为当它在循环的顶部购买时,它只是添加了1 aProp,它购买了b数量的追加。
  2. 它不会循环通过S列表进行购买。它应该去从最后一个(假设它有5个项目)4,并为每个购买他们b次(除非它只能抓住一个),然后移动到下一个,所以,卷3,被购买了3次,移动到1,它被购买了5次,然后移动到…最后点击4,它被购买了2次,然后如果它仍然有剩余的CP,它将再次从-4开始返回列表。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54849820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档