You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

石头剪刀布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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:34:55