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
相关产品推荐
相关产品推荐

