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

Python写石头剪刀布时Game()函数无法获取更新变量致无胜负输出

石头剪刀布游戏胜负判定不生效问题修复

问题复现

原代码运行后无法正常输出胜负判定结果,负责胜负逻辑的函数为Game(),原始实现如下:

import random

playerChoice=0
computerChoice=0

computerChoices=["Rock","Paper","Scissors"]

def Game():
    def Rock():
        if playerChoice=="Rock":
            if computerChoice=="Rock":
                print("Tie")
            if computerChoice=="Paper":
                print("You Lost")
            if computerChoice=="Scissors":
                print("You Won")
        else:
            Paper()
    def Paper():
        if playerChoice=="Paper":
            if computerChoice=="Paper":
            print("Tie")
            if computerChoice=="Scissors":
            print("You Lost")
            if computerChoice=="Rock":
            print("You Won")
        else:
            Scissors()
    def Scissors():
        if computerChoice=="Scissors":
            print("Tie")
        if computerChoice=="Rock":
            print("You Lost")
        if computerChoice=="Paper":
            print("You Won")
    Rock()

def Play():
    playerChoice=input("Do you pick rock, paper or scissors? \n").capitalize()
    computerChoice=random.choice(computerChoices)
    print(f"Computer Picked {computerChoice}")
    Game()

Play()

错误原因

  • 变量作用域不匹配:Play()函数内赋值的playerChoice、computerChoice属于函数局部变量,和全局定义的同名变量相互独立,Game()函数读取的始终是全局初始值0,拿不到实际的玩家输入、电脑随机选择结果。
  • 语法缩进错误:Paper()函数内三个条件分支下的print语句没有缩进,不符合Python按缩进划分代码块的规则,运行时会直接抛出缩进异常。
  • 分支逻辑缺失:Scissors()函数没有先校验玩家选择是否为剪刀,只要执行到该函数就直接按电脑的选择输出结果,判断逻辑不完整。

修复后可运行代码

通过传参方式把玩家、电脑的选择传入Game()函数,同时修正缩进、补全判断逻辑,所有提示文本翻译为中文:

import random

computerChoices = ["Rock", "Paper", "Scissors"]

def Game(playerChoice, computerChoice):
    def Rock():
        if computerChoice == "Rock":
            print("平局")
        elif computerChoice == "Paper":
            print("你输了")
        elif computerChoice == "Scissors":
            print("你赢了")
    def Paper():
        if computerChoice == "Paper":
            print("平局")
        elif computerChoice == "Scissors":
            print("你输了")
        elif computerChoice == "Rock":
            print("你赢了")
    def Scissors():
        if computerChoice == "Scissors":
            print("平局")
        elif computerChoice == "Rock":
            print("你输了")
        elif computerChoice == "Paper":
            print("你赢了")
    
    if playerChoice == "Rock":
        Rock()
    elif playerChoice == "Paper":
        Paper()
    elif playerChoice == "Scissors":
        Scissors()
    else:
        print("输入无效,请输入Rock/Paper/Scissors对应石头、布、剪刀")

def Play():
    playerChoice = input("你要出石头、剪刀还是布?请输入对应英文rock/paper/scissors:\n").capitalize()
    computerChoice = random.choice(computerChoices)
    print(f"电脑出了 {computerChoice}")
    Game(playerChoice, computerChoice)

Play()

内容的提问来源于stack exchange,提问作者KristiyanArnaudov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:48:17