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

Python3石头剪刀布游戏报NameError: name 'outcome' is not defined如何解决?

错误原因
  • 核心是执行顺序逻辑错误:rock、paper、scissors三个函数中,先尝试调用outcome.config()修改控件文本,之后才调用output_window()创建outcome控件,执行修改操作时outcome还没有被定义,直接触发NameError。
  • 额外不合理写法:滥用global全局变量会导致多次运行游戏时变量残留冲突;每次新建结果窗口都创建Tk()实例不符合Tkinter规范,会导致窗口消息队列混乱,应该用Toplevel()创建子窗口。
修复方案

调整函数执行顺序,先计算对局结果再调用窗口创建函数,同时优化代码去掉不必要的全局变量,将结果直接作为参数传递给窗口创建函数。修复后可运行代码如下:

import random
from tkinter import Tk, Button, Toplevel, Label

def game():
    ai_choice = {'0':'Rock', '1':'Paper', '2': 'Scissors'}
    
    # 窗口创建函数直接接收结果参数
    def output_window(output):
        # 用Toplevel创建子窗口,不要重复创建Tk实例
        show_output = Toplevel()
        show_output.title("Result")
        show_output.geometry("200x200")
        # 生成Label时直接赋值文本,不需要后续修改,也不需要全局变量存储控件
        outcome = Label(show_output, text=output)
        outcome.pack()

    def rock():
        ai = ai_choice[str(random.randint(0,2))]
        if ai == "Rock":
            output = "Tie"
        elif ai == "Scissors":
            output = "User Win"
        else:
            output = "User Lose"
        # 先计算结果,直接传给窗口创建函数
        output_window(output)

    def paper():
        ai = ai_choice[str(random.randint(0,2))]
        if ai == "Rock":
            output = "User Lose"
        elif ai == "Scissors":
            output = "Tie"
        else:
            output = "User Win"
        output_window(output)

    def scissors():
        ai = ai_choice[str(random.randint(0,2))]
        if ai == "Paper":
            output = "Tie"
        elif ai == "Scissors":
            output = "User Lose"
        else:
            output = "User Win"
        output_window(output)
    
    # 主窗口绑定按钮逻辑
    root = Tk()
    root.title("Rock Paper Scissors")
    Button(root, text="Rock", command=rock).pack(padx=20, pady=5)
    Button(root, text="Paper", command=paper).pack(padx=20, pady=5)
    Button(root, text="Scissors", command=scissors).pack(padx=20, pady=5)
    root.mainloop()

if __name__ == "__main__":
    game()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:18:02