python - 2 名玩家以 6 个标记开始。每轮掷出 3 个标准骰子。找到游戏的获胜者并估计玩家 2 获胜的概率
问题描述
如果掷出 11,则玩家 2 给玩家 1 一个标记,如果掷出 14,玩家 1 给玩家 2 一个标记。第一个收集到 12 个标记的人获胜。玩家 2 获胜的确切概率是 0.0286。这是我到目前为止所拥有的,但是当我运行它时没有任何反应。
import random
i = 0
player1 = 6
player2 = 6
rolls = 10000
while player1 != 12 or player2 != 12:
for i in range(rolls):
total = random.randint (1,6) + random.randint(1,6) + random.randint (1,6)
if total == 11:
player2 = player2 - 1
player1 = player1 + 1
if total == 14:
player1 = player1 - 1
player2 = player2 +1
else:
player1 = player1 + 0
player2 = player2 + 0
if player1 == 12:
print('Player 1 wins')
if player2 == 12:
print('Player 2 wins')
解决方案
只要至少一名玩家没有 12 个令牌,您的 while 循环就会运行。
情况总是如此,因为总共只有 12 个令牌。
如果一个人拥有它,另一个人拥有的更少,所以你while player1 != 12 or player2 != 12
是真实的,它会转来转去。
尝试
while player1 != 12 and player2 != 12:
要将游戏总共限制为 10k 轮,请在 while 循环之前初始化一个计数器,在 while 循环内增加它,如果计数器超过 10000:break
while 循环。
永远摆脱 for 循环,它根本不需要。
import random
i = 0
player1 = 6
player2 = 6
rolls = 10000
c = 0
while player1 != 12 and player2 != 12 and c < rolls:
c += 1
total = random.randint (1,6) + random.randint(1,6) + random.randint (1,6)
if total == 11:
player2 = player2 - 1
player1 = player1 + 1
if total == 14:
player1 = player1 - 1
player2 = player2 +1
if player1 == 12:
print('Player 1 wins')
if player2 == 12:
print('Player 2 wins')
推荐阅读
- python - Matplotlib 的标题和副标题没有正确对齐
- python - 我正在尝试用 Python 开发一个带有 nltk 库的聊天机器人
- python-3.x - 拆分字符串的内容
- sql - SQL Server:通过通用触发器记录数据库更改
- c - C 带取消和回调的定时器
- javascript - Chrome 扩展程序:后台脚本仅第一次正常运行
- angular - 自定义角度组件在其容器之外呈现
- nginx - 具有非捆绑 Nginx 的 GitLab 返回 502 不响应
- c - copy_to/from_user() 的源地址和目标地址来自哪里?
- java - 如何使用 JSON 正文在 java 中发送 post 请求