石头剪刀布Python脚本输入'y'后while循环无法重启的问题
石头剪刀布脚本重玩功能修复
你的脚本问题出在重玩逻辑没有形成循环,且分数未重置。当前流程是:游戏结束(一方赢3局)→ 询问重玩→ 输入'y'后没有任何代码引导回到游戏开始,输入'n'则退出。同时上一局的分数还保留着,就算强行回到循环也会因为分数已经到3而直接跳过游戏。
修复方案
把整个游戏流程放进一个外层循环,每次重玩时重置分数,具体修改如下:
import random while True: # 外层主循环,控制整个游戏的重玩 print("Welcome to Rock, Paper, Scissors!\n") player_wins = 0 computer_wins = 0 while player_wins != 3 and computer_wins != 3: player = input("\nEnter a choice (rock, paper, scissors): ").lower() while player not in ['rock', 'paper', 'scissors']: player = input("\nEnter a choice (rock, paper, scissors): ").lower() choices = ["rock", "paper", "scissors"] computer = random.choice(choices) print(f"\nYou chose {player}, computer chose {computer}.") if player == computer: print(f"Both players selected {player}. It is a tie!") elif player == "rock": if computer == "scissors": print("Rock smashes scissors. You win!") player_wins += 1 else: print("Paper covers rock. You lose.") computer_wins += 1 elif player == "paper": if computer == "rock": print("Paper covers rock. You win!") player_wins += 1 else: print("Scissors cuts paper. You lose.") computer_wins += 1 elif player == "scissors": if computer == "paper": print("Scissors cuts paper. You win!") player_wins += 1 else: print("Rock smashes scissors. You lose.") computer_wins += 1 # 优化分数展示逻辑,用elif替代多个if减少冗余输出 print("\nYour score is", player_wins) print("Computers score is", computer_wins) if player_wins > computer_wins: print("\nYou are leading!") elif player_wins < computer_wins: print("\nComputer is leading!") else: print("\nIt's a tie so far!!.") # 游戏结束后显示最终结果 print("\n=== Final Result ===") print(f"Your score: {player_wins} | Computer score: {computer_wins}") if player_wins > computer_wins: print("You won the game!") else: print("Computer won the game!") # 重玩判断 repeat = input("\nPlay again? (y/n): ") if repeat.lower() != "y": print("\nThanks for playing!") break # 退出外层主循环,结束程序
关键修改点说明
- 新增
while True:外层循环,让游戏可以重复执行 - 每次进入外层循环时,重置
player_wins和computer_wins为0,保证新一局从0开始 - 优化了分数展示的逻辑,用
elif替代多个独立if,避免原脚本每次对局后同时触发多个结果输出的bug - 游戏结束后单独显示最终结果,区分过程中的分数提示
- 用
break语句在用户输入'n'时退出外层循环,结束程序
内容的提问来源于stack exchange,提问作者JWall
相关产品推荐
相关产品推荐

