python - Python循环未正确循环
问题描述
我的循环“应该”从 [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)))
是不是特别让我伤心的部分
解决方案
这是你的问题:
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
,以防止以后在代码中出现这种类型的混淆。
推荐阅读
- google-chrome - 如何在没有键盘快捷方式或屏幕选项的情况下打开 chrome 开发工具并保存数据
- c++ - C++20 - 模板参数推导/替换问题
- node.js - 有没有将 gwt 用于 nodejs 的示例?
- javascript - 隐藏元素,但保持可点击?
- node.js - db-migrate 命令运行时如何自动重启 pm2 服务器?
- r - 如何通过 Powershell 远程运行 R 脚本
- python - 尝试在 Google Cloud AI Platform 上使用 scikit-learn 训练模型时作业失败
- php - 如何在 php 中复制此连接?
- c# - 如何在第一个摄像头仍然打开时打开第二个摄像头几秒钟(从而模拟空白屏幕)
- python - 为每个工人运行的烧瓶 + gunicorn 应用程序中的 BackgroundScheduler,而不仅仅是一次