[英]players roll 2 dice till one reaches 100
每个玩家在一个回合中连续掷两个骰子。 获得的骰子数量将添加到玩家的总点数中。 当第一个玩家至少获得 100 分时,游戏结束。
from random import randint
dicesum2 = 0
dicesum1 = 0
while (dicesum1 < 100):
dice1 = [randint(1, 6) for i in range(2)]
dicesum1 += sum(dice1)
print('player 1',dice1,'|',dicesum1)
dice2 = [randint(1, 6) for i in range(2)]
dicesum2 += sum(dice2)
print('player 2',dice2,'|',dicesum2)
我需要它在一个达到 100 时结束。我如何检查两者?
如果玩家只投掷一枚,他将失去该回合获得的分数;
我如何检查生成的数字之一何时为 1?
我需要它在一个达到 100 时结束。我如何检查两者?
了解or
逻辑运算符的作用:
dicesum1 < 100 or dicesum2 < 100
我如何检查生成的数字之一何时为 1?
了解in
运算符的作用:
if 1 in dice1:
# Apply penalty.
您可以按如下方式更改while
条件:
while (dicesum1 < 100 and dicesum2 < 100):
或者,您也可以使用break
:
...
if dicesum1 >= 100:
break
...
if dicesum2 >= 100:
break
看看这个,看看它是否有帮助
from random import randint
def roll():
return [randint(1, 6) for i in range(2)]
def check_for_one(rolls):
for roll in rolls:
# this could be simplified to "if 1 in rolls", this was just my preference
if roll == 1:
return True
return False
dicesum2 = 0
dicesum1 = 0
while True:
d1 = roll()
dicesum1 += sum(d1)
if check_for_one(d1):
print(f"Player 1 rolled a 1 in batch: {d1}")
print(f"Player 1 roll: {d1} | {dicesum1}")
d2 = roll()
dicesum2 += sum(d2)
if check_for_one(d2):
print(f"Player 2 rolled a 1 in batch: {d2}")
print(f"Player 2 roll: {d2} | {dicesum2}")
if dicesum1 >= 100:
print(f"Player 1 won with: {dicesum1}")
break
elif dicesum2 >= 100:
print(f"Player 2 won with: {dicesum2}")
break
所以在这个例子中,我们将 roll out 推到一个函数和 check_for_one ,它迭代你正在检查的列表并返回一个布尔值。
我将循环更改为while True
因此循环不负责可以限制的更复杂的条件。
对于每个玩家,它执行掷骰、求和、检查并报告批次中是否为 1,报告掷骰。
最后,它会检查获胜者并在获胜者达到或超过 100 时中断,并报告他们的胜利。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.