我的循环“假设”是从列表中遍历到最后一件商品,最多7件,然后购买并计算从列表中购买该商品的次数,然后将结果乘以一个值。
它目前正在做的是购买少量的商品,输出每个商品被购买的次数,就是这样。它甚至没有“花”掉所有的“零用钱”
它通常会输出
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)))是不是特别让我感到悲伤的部分?
发布于 2019-02-24 17:06:49
这就是你的问题:
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来表示不同的东西。我强烈建议您将其更改为两个具有更有意义的名称的不同变量,例如unitCost和groupCost,以防止以后在代码中出现这种类型的混淆。
发布于 2019-02-25 01:03:24
对于有问题的循环,我现在已经将其修改为
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)))它的循环部分做得很好,但它没有像我希望的那样正确地做两件事
https://stackoverflow.com/questions/54849820
复制相似问题