Skip to main content
 首页 » 编程设计

python之结束 while 循环

2025年05月04日9duanxz

我目前正在用 Python 3.6 为一个骰子游戏编写代码,我知道我的编码在这方面有点不对劲,但是,我真的只是想知道如何开始我的 while 循环。游戏说明如下……

  • 人类玩家与计算机对战。

  • 玩家 1 掷骰,直到他们获胜、决定保留或掷出 1。玩家 2 也一样。

  • 他们轮流掷两个骰子,除非掷出 1,否则将骰子的总数加在一起。

  • 如果掷出一个 1,则您不会加分,轮到下一个人了。如果掷出两个 1,您将失去所有分数,轮到下一个人了。

  • 第一个达到 100 分的玩家获胜。

我的游戏运行良好,直到玩家 1 和玩家 2 都按下“y”以阻止游戏。然后游戏退出玩家之间的切换,直到“n”再次被击中。知道为什么吗? 有人告诉我我需要变量来决定轮到谁,但我不确定如何将它们合并到我的代码中。 任何帮助将不胜感激。

import random 
def main(): 
 
    print("Welcome to the Two Dice Pig Game. You are Player 1!") 
 
    Player1 = 0 
    Player2 = 0 
 
    while(Player1<100 and Player2<100): 
 
        p1dice=random.randrange(1,7) 
        p1dice2=random.randrange(1,7) 
        Player1+=p1dice+p1dice2 
        print("Player 1 dice 1 =",p1dice) 
        print("Player 1 dice 2 =",p1dice2) 
        print("Player 1 dice total =",Player1) 
        print("Does player 1 want to hold?") 
        choose1 = input("Enter y for yes or n for no.") 
        if(choose1=="n"): 
            p1dice=random.randrange(1,7) 
            p1dice2=random.randrange(1,7) 
            Player1+=p1dice+p1dice2 
            print("Player 1 dice 1 =",p1dice) 
            print("Player 1 dice 2 =",p1dice2) 
            print("Player 1 dice total =",Player1) 
            if(Player1>=100): 
                print("Player 1 wins!") 
            else: 
                print("Does player 1 want to hold?") 
                choose1 = input("Enter y for yes or n for no.") 
        while(choose1=="y"): 
 
            print("It's player 2's turn.") 
            p2dice=random.randrange(1,7) 
            p2dice2=random.randrange(1,7) 
            Player2+=p2dice+p2dice2 
            print("Player 2 dice 2 =",p2dice) 
            print("Player 2 dice 2 =",p2dice2) 
            print("Player 2 dice total =",Player2) 
            print("Does player 2 want to hold?") 
            choose2 = input("Enter y for yes or n for no.") 
            while(choose2=="n"): 
                p2dice=random.randrange(1,7) 
                p2dice2=random.randrange(1,7) 
                Player2+=p2dice+p2dice2 
                print("Player 2 dice 2 =",p2dice) 
                print("Player 2 dice 2 =",p2dice2) 
                print("Player 2 dice total =",Player2) 
                print("Does player 2 want to hold?") 
                choose2 = input("Enter y for yes or n for no.") 
            while(choose2=="y"): 
                print("It's player 1's turn.") 
                p1dice=random.randrange(1,7) 
                p1dice2=random.randrange(1,7) 
                Player1+=p1dice+p1dice2 
                print("Player 1 dice 2 =",p1dice) 
                print("Player 1 dice 2 =",p1dice2) 
                print("Player 1 dice total =",Player1) 
                print("Does player 1 want to hold?") 
                choose2 = input("Enter y for yes or n for no.") 
 
main() 

请您参考如下方法:

使用字典为每个玩家名称保留一个分数,切换一个包含玩家当前掷骰子的 turn。

实现了一些逻辑,例如何时将 turn 从一个更改为另一个:

import random 
 
def score(players): 
    for k in players: 
        print("{} has {} points".format(k,players[k])) 
 
def hold(player): 
    if input("Does {} want to hold? [y or anything]".format(player)).lower().strip() == "y": 
        return "y" 
    return "n" 
 
 
def main(): 
 
    dice = range(1,7) 
    players = {"p1":0, "p2":0} 
    turn = "" 
    change_player = "y" 
 
    print("Welcome to the Two Dice Pig Game. You are Player 1!") 
 
    while all(x < 100 for x in players.values()): 
        # initially changePlayer is  
        if change_player == "y": 
            # print both scores on player changed 
            score(players) 
            turn = "p1" if turn != "p1" else "p2" 
 
        dice1, dice2 = random.choices(dice,k=2) 
        print("{} threw {} and {} for a total of {}".format(turn,d1,d2,d1+d2)) 
 
        if dice1 + dice2 == 2: 
            players[turn] = 0 
            print("Two 1 - you're done for now. Your points go back to 0.") 
            change_player = "y" 
        elif dice1 == 1 or dice2 == 1: 
            print("One 1 - you're done for now.") 
            change_player  = "y" 
        else: 
            # only case where we need to add values and print new score 
            players[turn] += dice1 + dice2 
            print("Your score: {}".format(players[turn])) 
            if turn == "p1": 
                change_player = hold(turn) 
            else: 
                change_player = "n" # computer is greedy, never stops 
 
    winner, points = max(players.items(),key=lambda x: x[1]) 
    print("The winner is {} with {} points.".format(winner,points)) 
 
 
main()  

输出:

Welcome to the Two Dice Pig Game. You are Player 1! 
p1 has 0 points 
p2 has 0 points 
p1 threw 5 and 1 for a total of 6 
One 1 - you're done for now. 
p1 has 0 points 
p2 has 0 points 
p2 threw 3 and 6 for a total of 9 
Your score: 9 
p2 threw 6 and 2 for a total of 8 
Your score: 17 
p2 threw 4 and 1 for a total of 5 
One 1 - you're done for now. 
p1 has 0 points 
p2 has 17 points 
p1 threw 4 and 5 for a total of 9 
Your score: 9 
Does p1 want to hold? [y or anything] 
p1 threw 2 and 6 for a total of 8 
Your score: 17 
Does p1 want to hold? [y or anything] 
p1 threw 4 and 6 for a total of 10 
Your score: 27 
 
[snipp] 
 
One 1 - you're done for now. 
p1 has 91 points 
p2 has 51 points 
p1 threw 6 and 4 for a total of 10 
Your score: 101 
Does p1 want to hold? [y or anything] 
The winner is p1 with 101 points.