我的循环被“假设”遍历列表,从[0]到最后一个项目,该项目最多为[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)))
尤其是引起我悲伤的那部分
答案 0 :(得分:0)
这是您的问题:
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
,以防止稍后在代码中出现这种类型的混乱。
答案 1 :(得分:0)
对于有问题的循环,我现在将其修改为
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)))
哪个循环部分很好,但它没有像我希望的那样正确地做两件事