NameError:未定义名称“Pick”

2024-10-02 00:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个通过与Tkinter创建一个石头、布、剪刀游戏来学习if语句的人。我正在尝试制作一个标签,如果按下按钮就会出现。例如,如果我按下摇滚按钮,它会贴上一个标签,上面写着“摇滚”。但是我在if语句中遇到了一个问题。这就是我所拥有的

import random
from tkinter import *

click = True

def compick():
    choice = random.choice(["rock","paper","scissors"])
    return choice

compchoice = compick()

def yourChoice(Pick):
    global click

br = Button(gui, image=img1, command= lambda:yourChoice('rock'))
br.place(x=15, y=100)
bp = Button(gui, image=img2, command= lambda:yourChoice('paper'))
bp.place(x=200 ,y=100)
bs = Button(gui, image=img3, command= lambda:yourChoice('scissors'))
bs.place(x=350, y=100)

if click==True:
    if Pick =='rock':
        LR.place(x=225, y=500)
        if compchoice =='rock':
            LR.place(x=225, y=15)

gui.mainloop()

它给了我一个错误,说“名称‘Pick’未定义”。我不知道代码出了什么问题


Tags: lambdaimageifplaceguibutton标签语句
3条回答

Python是为数不多的几个缩进非常重要的语言之一。您可以尝试在“全局单击”之后调整代码的缩进,以便它们匹配。大概是这样的:

import random
from tkinter import *

click = True

def compick():
    choice = random.choice(["rock","paper","scissors"])
    return choice

compchoice = compick()

def yourChoice(Pick):
    global click
    br = Button(gui, image=img1, command= lambda:yourChoice('rock'))
    br.place(x=15, y=100)
    bp = Button(gui, image=img2, command= lambda:yourChoice('paper'))
    bp.place(x=200 ,y=100)
    bs = Button(gui, image=img3, command= lambda:yourChoice('scissors'))
    bs.place(x=350, y=100)

    if click==True:
        if Pick =='rock':
            LR.place(x=225, y=500)
            if compchoice =='rock':
                LR.place(x=225, y=15)

gui.mainloop()

缩进函数定义:

def yourChoice(Pick):
    global click

    br = Button(gui, image=img1, command= lambda:yourChoice('rock'))
    br.place(x=15, y=100)
    bp = Button(gui, image=img2, command= lambda:yourChoice('paper'))
    bp.place(x=200 ,y=100)
    bs = Button(gui, image=img3, command= lambda:yourChoice('scissors'))
    bs.place(x=350, y=100)

    if click==True: # <  Be careful, you set it to True just before ! 
        if Pick =='rock':
            LR.place(x=225, y=500)
            if compchoice =='rock':
                LR.place(x=225, y=15)

此外,以下代码可能对您的实现有用,它将使您避免冗长的if…else结构:

choice ={
    "rock":0,
    "paper":1,
    "scissors":2
    }

result = {
    0:"It's a draw",
    1:"Player1 win",
    2:"Player2 win"
    }

def judge(player1_choice,player2_choice):
    P1=choice[player1_choice]
    P2=choice[player2_choice]
    return result[(P1-P2)%3]

似乎是缩进错误。将函数yourChoice的所有代码放在一个缩进下

大概是这样的:

def yourChoice(Pick):
    global click

    br = Button(gui, image=img1, command= lambda:yourChoice('rock'))
    br.place(x=15, y=100)
    bp = Button(gui, image=img2, command= lambda:yourChoice('paper'))
    bp.place(x=200 ,y=100)
    bs = Button(gui, image=img3, command= lambda:yourChoice('scissors'))
    bs.place(x=350, y=100)

    if click==True:
        if Pick =='rock':
           LR.place(x=225, y=500)
            if compchoice =='rock':
                LR.place(x=225, y=15)

现在,当调用yourChoice函数时,执行上述所有代码

相关问题 更多 >

    热门问题