【问题标题】:How do I stop this loop in Python?如何在 Python 中停止这个循环?
【发布时间】:2018-10-08 04:50:04
【问题描述】:

这完全按照我的意愿工作,除了当用户输入无效选项时我无法让它停止。这是一个石头剪刀布游戏,它不仅记录用户的输入,而且保留当前回合的得分,并保留所有回合的最终得分,直到游戏结束......就像现在一样,永远不会发生。当用户输入无效选项时,我该如何结束这个游戏?我尝试使用break,但它无效。

def rock_paper_scissors():
    playerScore = 0
    computerScore = 0

    print("")

    player = input("Choose Rock, Paper, or Scissors: ")
    player = player.lower()

    choices = ["rock", "paper", "scissors"]

    computer = random.choice(choices)


    if player == computer:
        print("I chose " + str(computer) + " and you chose " + player + ". It's a tie!")
    elif player == "rock" and computer == "scissors":
        playerScore += 1
        print("I chose " + str(computer) + " and you chose " + player + ". Congratulations! You won! " + player + " beats " + str(computer) + ".")
    elif player == "paper" and computer == "rock":
        playerScore += 1
        print("I chose " + str(computer) + " and you chose " + player + ". Congratulations! You won! " + player + " beats " + str(computer) + ".")
    elif player == "scissors" and computer == "paper":
        playerScore += 1
        print("I chose " + str(computer) + " and you chose " + player + ". Congratulations! You won! " + player + " beats " + str(computer) + ".")
    elif computer == "rock" and player == "scissors":
        computerScore += 1
        print("I chose " + str(computer) + " and you chose " + player + ". You lost! " + str(computer) + " beats " + player + ".")
    elif computer == "paper" and player == "rock":
        computerScore += 1
        print("I chose " + str(computer) + " and you chose " + player + ". You lost! " + str(computer) + " beats " + player + ".")
    elif computer == "scissors" and player == "paper":
        computerScore += 1
        print("I chose " + str(computer) + " and you chose " + player + ". You lost! " + str(computer) + " beats " + player + ".")
    else:
        print("Sorry, but you entered an invalid option.  The game has ended.  See below for the final score.  Thank you for playing")
        print("")
        print("Your score:", str(playerScore) + ", Computer score:", str(computerScore))

    return playerScore, computerScore

playerFinal = 0
computerFinal = 0

while True:
    player, computer = rock_paper_scissors()
    playerFinal += player
    computerFinal += computer
    print("Your score:", str(playerFinal) + ", Computer score:", computerFinal)

【问题讨论】:

    标签: python function loops if-statement break


    【解决方案1】:

    这可以通过简单地添加一个标志来检查是否需要结束while True循环来解决。 这里:

    import random
    def rock_paper_scissors():
        playerScore = 0
        computerScore = 0
        flag = False
    
        print("")
    
        player = input("Choose Rock, Paper, or Scissors: ")
        player = player.lower()
    
        choices = ["rock", "paper", "scissors"]
    
        computer = random.choice(choices)
    
    
        if player == computer:
            print("I chose " + str(computer) + " and you chose " + player + ". It's a tie!")
        elif player == "rock" and computer == "scissors":
            playerScore += 1
            print("I chose " + str(computer) + " and you chose " + player + ". Congratulations! You won! " + player + " beats " + str(computer) + ".")
        elif player == "paper" and computer == "rock":
            playerScore += 1
            print("I chose " + str(computer) + " and you chose " + player + ". Congratulations! You won! " + player + " beats " + str(computer) + ".")
        elif player == "scissors" and computer == "paper":
            playerScore += 1
            print("I chose " + str(computer) + " and you chose " + player + ". Congratulations! You won! " + player + " beats " + str(computer) + ".")
        elif computer == "rock" and player == "scissors":
            computerScore += 1
            print("I chose " + str(computer) + " and you chose " + player + ". You lost! " + str(computer) + " beats " + player + ".")
        elif computer == "paper" and player == "rock":
            computerScore += 1
            print("I chose " + str(computer) + " and you chose " + player + ". You lost! " + str(computer) + " beats " + player + ".")
        elif computer == "scissors" and player == "paper":
            computerScore += 1
            print("I chose " + str(computer) + " and you chose " + player + ". You lost! " + str(computer) + " beats " + player + ".")
        else:
            flag = True
            print("Sorry, but you entered an invalid option.  The game has ended.  See below for the final score.  Thank you for playing")
            print("")
            print("Your score:", str(playerScore) + ", Computer score:", str(computerScore))
    
        return playerScore, computerScore, flag
    
    playerFinal = 0
    computerFinal = 0
    
    while True:
        player, computer, flag = rock_paper_scissors()
        playerFinal += player
        computerFinal += computer
        print("Your score:", str(playerFinal) + ", Computer score:", computerFinal)
        if flag:
            break
    

    【讨论】:

    • 成功了!非常感谢您对此进行解释和展示。
    【解决方案2】:

    如果返回的分数都为零,则玩家输入错误,您可以中断循环。

    while True:
        player, computer = rock_paper_scissors()
        if player == 0 and computer == 0:
            break
        playerFinal += player
        computerFinal += computer
        print("Your score:", str(playerFinal) + ", Computer score:", computerFinal)
    

    【讨论】:

    • 感谢您的回复。我试过了,但它只是将最终分数重置为 0。我需要它们打印用户在游戏结束时玩的所有回合的最终分数。
    【解决方案3】:

    在无效的选择后面加上break 你可以让玩家在那个时候用减号滚动

    if player < 0
       playerFinal = -1 * player
       break
    

    【讨论】:

    • 这不起作用,因为选择是在 rock_paper_scissors() 函数内部进行的,但循环位于主级别。
    【解决方案4】:

    从以下位置更改循环条件:

    while True:
    

    到:

    while True and (player+computer) != 0 :
    

    如果用户选择无效,则该轮的得分将为 0,并且下次循环不会通过条件。

    【讨论】:

    • 这是一个错误,因为在循环至少执行一次之前,playercomputer 才被定义。
    • 正确!您必须连同playerFinalcomputerFinal 一起初始化它们。分配值 -1 应该没问题,这样它们就不会加起来为 0 并进入循环。
    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 2013-11-19
    • 2013-08-03
    • 2022-01-11
    相关资源
    最近更新 更多