如何修复石头剪刀布程序中的循环和中断错误?

How to fix a looping and a break bug within a Rock, Paper, Scissors program?

提问人:ughhh 提问时间:4/25/2023 最后编辑:ewokxughhh 更新时间:4/25/2023 访问量:42

问:

我编写了一个基本程序,用于在 Powershell 中运行石头、纸张和剪刀布。


import random

print("Lets play Rock, Paper, Scissors...")
print("Type 'quit' to quit the game")
pwins = 0
cwins = 0
winning_score = 2

while pwins < winning_score and cwins < winning_score:
    print(f"Player wins:{pwins} | Computer wins: {cwins}")
    p1 = input("Player's move: ").lower()
    
    rand_num = random.randint(0,2)
    if rand_num == 0:
        computer = "rock"
    elif rand_num == 1:
        computer = "paper"
    else:
        computer = "scissors"

    if p1 == "quit" or p1 == "q":
        break
        
    print(f"Computer chooses: {computer}")

    if p1 == computer:
        print("It's a tie...")
        p1 = input("Player's move: ").lower()

    if p1 == "rock":
        if computer == "paper":
            print("Computer wins")
            cwins += 1
        else:
            print("Player wins")
            pwins += 1
    elif p1 == "paper":
        if computer == "scissors":
            print("Computer wins")
            cwins += 1
        else:
            print("Player wins")
            pwins += 1
    elif p1 == "scissors":
        if computer == "rock":
            print("Computer wins")
            cwins += 1
        else:
            print("Player wins")
            pwins += 1
    else:
        print("Please enter a valid move!")

    print(f"Final score... Player: {pwins} | Computer: {cwins}")

    if pwins > cwins:
        print("Congrats, you won!")
    elif pwins < cwins:
        replay = input("You lost...Do you want to play again? (y/n) ")
    if replay == "y":
        cwins = 0
        pwins = 0
    else:
        print("Loser!")
    else:
        print("It's a tie")`

问题在于每当我得到 p1 == 计算机领带时,如果我选择立即退出,我就会得到一个错误。我得到“请输入有效移动!”作为响应。如果我在第二次输入“退出”之后,程序将正确结束。

第二个问题是一旦玩家输了,程序会问“你想再玩一次吗?(是/否)”。如果我选择“y”,程序不会循环,只会结束。

我尝试移动代码部分并将它们按不同的顺序放置以使中断和循环正常运行,但我不知所措,因为问题不会得到解决并且会出现其他错误。感谢您的帮助。

python-3.x while-loop 中断

评论

0赞 ewokx 4/25/2023
问题是,在你输入'q'之后,你没有任何条件可以捕获.所以我猜可能是解决这个问题的方法。qelif p1 == "q": break

答:

0赞 Michael C 4/25/2023 #1

基于您遇到的错误。这可能会解决它们。

每当您获得 p1 == 计算机领带时,如果您选择立即退出,它将返回输入有效移动。这是意料之中的,因为在您的代码中,在平局之后,程序将要求另一个输入,而无法验证输入是否中断。若要解决此问题,应在每次请求用户输入时添加此内容。

if p1 == "quit" or p1 == "q":
    break

对于您的第二个错误。请尝试将代码的最后一部分重新创建为此。

  1. 显示最终分数
  2. 说玩家是输了、赢了还是平局。
  3. 然后询问玩家是否想再玩一次。

评论

0赞 ughhh 4/25/2023
感谢您的回复!您的提示帮助修复了第一个错误,但第二个错误的解决方案仍然让我无法找到。print(f“最终得分...玩家: {pwins} |Computer: {cwins}“) if pwins > cwins: print(”恭喜,你赢了!“) elif pwins < cwins: print(”你输了...“) else: print(”这是平局“) replay = input(”你想再玩一次吗?(是/否)“) if replay == ”y“: pwins = 0 cwins = 0 else: print(”Loser!“)在到达“你想再玩一次吗?(y/n)“,输入”y“不会重置循环。程序仍退出