繁体   English   中英

玩家掷 2 个骰子,直到一个达到 100

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM