【问题标题】:Python craps game, while-loop issuePython掷骰子游戏,while循环问题
【发布时间】:2014-11-17 01:30:19
【问题描述】:

我正在寻找创建一个简单的掷骰子游戏,但遇到了问题。

当输入此代码时:

import random
def main():
    starting_money = int(input("How much do you have to gamble? : "))
    print()
    player_bet = int(input("Enter your bet: "))
    number_1 = (random.randint(1,6))
    number_2 = (random.randint(1,6))
    print("Dice roll 1: ", number_1)
    print("Dice roll 2: ", number_2)
    roll = number_1 + number_2
    print("Your roll: ", roll)
    rounds = input("Play again? (Y/N): ")
    while rounds != "n" and rounds == "y":
        if rounds == "n":
            print("Congratulations, you left with")
        if roll == 7 or roll == 11:
            print("You win $", player_bet, sep="")
            new_money = starting_money + player_bet
            print("You have $", new_money, " remaining.", sep="")
        elif roll == 2 or roll == 3 or roll == 12:
            new_money = starting_money - player_bet
            print("You lost $", player_bet, sep="")
            print("You have $", new_money, " remaining.", sep="")
        else:
            print("You push.")
            new_money = starting_money
            print("You have $", new_money, " remaining.", sep="")
        break
main()

当我输入“n”时会发生这种情况。

Enter your bet: 5
Dice roll 1:  6
Dice roll 2:  6
Your roll:  12
Play again? (Y/N): n

当我输入“y”时会发生这种情况。

Enter your bet: 5
Dice roll 1:  2
Dice roll 2:  3
Your roll:  5
Play again? (Y/N): y
You push.
You have $10 remaining.

在这两种情况下,它都需要在询问用户是否想再次玩之前告诉用户他们是推、赢还是输。我怎样才能做到这一点?

如果我在 while 循环中放置“轮数”,它会告诉我轮数在分配之前已被引用。

【问题讨论】:

    标签: python


    【解决方案1】:

    我认为这里有很多需要整理的地方,但为什么不开始:

     rounds = 'y'
     while .....
       ....
       ....
       else:
         ....
       rounds = input("Play again (y/n)")
    

    这样,您在第一次滚动后会自动进入 while 循环,并在询问用户是否要再次播放之前给出结果。您必须处理的下一个问题是,在 while 循环中,没有规定可以下新赌注或再次掷骰子。

    【讨论】:

    • 是的,我正在想办法做到这一点:(
    【解决方案2】:

    第一个问题是所有告诉用户他们是推、赢还是输的代码都在循环内,如果用户输入“n”,该代码永远不会运行。真正的问题是你的大部分代码真的应该在循环中,包括询问用户他们想下注多少和掷骰子。

    我会首先将rounds 变量初始化为默认值“y”,这样循环至少会运行一次,然后在循环结束之前不要询问用户是否要再次播放。然后将所有其他代码移动到循环中。 (除了“你要赌多少?”部分。这可能应该留在循环之外。)

    这是未经测试的,但事情的顺序应该是这样的:

    import random
    
    def main():
        starting_money = int(input("How much do you have to gamble? : "))
        print()
    
        rounds = "y"
    
        while rounds != "n" and rounds == "y":
    
            player_bet = int(input("Enter your bet: "))
            number_1 = (random.randint(1,6))
            number_2 = (random.randint(1,6))
            print("Dice roll 1: ", number_1)
            print("Dice roll 2: ", number_2)
            roll = number_1 + number_2
            print("Your roll: ", roll)
    
            if rounds == "n":
                print("Congratulations, you left with")
            if roll == 7 or roll == 11:
                print("You win $", player_bet, sep="")
                new_money = starting_money + player_bet
                print("You have $", new_money, " remaining.", sep="")
            elif roll == 2 or roll == 3 or roll == 12:
                new_money = starting_money - player_bet
                print("You lost $", player_bet, sep="")
                print("You have $", new_money, " remaining.", sep="")
            else:
                print("You push.")
                new_money = starting_money
                print("You have $", new_money, " remaining.", sep="")
    
            rounds = input("Play again? (Y/N): ")
    
    
    main()
    

    如果玩家的钱用完了,你可能还应该考虑结束游戏。

    【讨论】:

    • 我做了所有这些,但无论出于何种原因,代码仍然没有循环。
    • @JCJG 去掉break 声明。
    • 啊!那行得通!谢谢一百万,我想我可以从这里得到剩下的 :)
    • @JCJG 如果那部分在循环之前(就像上面一样),那么它不应该重复。
    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2020-02-15
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多