python - 骰子滚轮的第二个 while 循环出现问题

标签 python

我是一个长期潜伏者,第一次提问。我正在尝试自学 Python,虽然我研究了我的问题,但找不到答案。如果我删除第一个 While 循环,我的下面的代码就会运行,但目前它似乎没有进入第二个 while 循环。我想我可能正在引导我在工作中使用的内心 VBA,这只是我第二次尝试 Python。 我已经尝试更改第一个 while,因此它不仅仅是 true,并且在第二个 while 上尝试了变体。 这里的目的是研究我正在考虑的游戏的骰子池机制,并模拟滚动多个 D6、5-6 次爆炸、3 次以上成功和 1-2 次失败。最终我希望它运行掷骰子返回骰子列表成功次数等,然后重置询问用户再次掷骰子的数量。

import random
Scount = 0
Xcount = 0
Fcount = 0
rollcount = 0
cheat = 0
NoOfDice = 1
Dicelist = []
while True:
    print ("Input number of dice to roll")
    NoOfDice=input()
    while cheat<int(NoOfDice):
        rand = random.randint(1, 6)
        Dicelist.append(rand)
        if rand <= 4:
            cheat += 1
        if rand >= 3:
            Scount += 1
        if rand >= 2:
            Fcount += 1
        if rand <= 5:
            Xcount += 1
print (Dicelist)
print ("We rolled " + str(NoOfDice) + " you got " + str(Scount) + " number of succeses with " + str(Xcount) + " number of dice exploded with " + str(Fcount) + " dice failed")

谢谢大家,感谢您抽出时间!

最佳答案

第一个 while 循环的条件本质上始终为 True,这意味着它是一个无限循环。

您的第二个循环可能看起来没有在运行,但它确实在运行(只要您输入大于 0 的数字)。

您的程序没有输出的原因是您的 print() 语句位于无限循环之后,因此它们永远不会运行。这就是为什么当您删除无限循环时您的程序会按预期运行。

要解决此问题,只需将 print() 语句移至第一个循环内但位于末尾即可。

注意:如果您想在运行程序时有时间阅读正在打印的内容,则应该将 print() 更改为 input (),因为这意味着第一个循环仅在您按下 Enter 后循环。

附加说明:random.randint(1, 6) 返回 0 到 5 之间的值,而不是返回 1 到 6 之间的值。查看 中的值if 语句,您可能需要将代码更改为:

rand = random.randint(1,6) + 1

关于python - 骰子滚轮的第二个 while 循环出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49140860/

相关文章:

python - 无法使用 python 向 mysql 插入值

python - 我们如何/为什么使用 operator.abs

python - IOError: [Errno 22] 传入的时钟() 参数无效

python - 如何从一个文件 block 中解压许多 msgpack 数据

python - 在 Python 中使用 OAuth 的 Twitter 流在两台配置相同的机器上表现不同

python - Flask JSONEncoder 将 ensure_ascii 设置为 False

python - 来自jython中已解析的电子邮件对象的电子邮件正文

python - 来自 Python 的 awk : wrong subprocess arguments?

python - 什么时候可以动态地向对象添加字段?

python - 使用 Python/C API 将 Python 列表传递给 C 函数