如何调用一组函数

我不知道该怎么做,以便每次按下按钮时结果标签都应该显示新结果,我应该在重复功能中复制并粘贴 3 个石头、剪纸和剪刀功能还是什么?


它的python 2.7



from Tkinter import*

import random

# variables

a = "rock"

b = "paper"

c = "scissors"

pc = random.choice([a, b, c])

windows = Tk()

windows.geometry("200x300")



# function that makes the


def repeat():

    pc = random.choice([a, b, c])

    print pc

    # im stuck here!






def tie():

    lbresult.configure(text="Tie!")




def win():

    lbresult.configure(text="you win!!")




def loose():

    lbresult.configure(text="you loose")




# functions for each election

def rock():

    if pc == "paper":

        loose()

    elif pc == "rock":

        tie()

    elif pc == "scissors":

        win()

    repeat()



def paper():

    if pc == "paper":

        tie()

    elif pc == "rock":

        win()

    elif pc == "scissors":

        loose()

    repeat()



def scissors():

    if pc == "paper":

        win()

    elif pc == "rock":

        loose()

    elif pc == "scissor":

        tie()

    repeat()



#buttons for choosing options

lbresult = Label(text="result will appear here")

btrock = Button(text="  rock    ", command=rock)

btpaper = Button(text="  paper  ", command=paper)

btscissors = Button(text="scissors", command=scissors)


btrock.pack()

btpaper.pack()

btscissors.pack()

lbresult.pack()

#result label



windows.mainloop()

请帮助我疯狂地尝试解决这个问题,


如果你能回答,请解释我为什么......我会很感激


aluckdog
浏览 107回答 3
3回答

跃然一笑

pc当且仅当按下按钮时选择一个新的随机选项。...c = "scissors"pc = random.choice([a, b, c]) # remove thiswindows = Tk()......def rock():    pc = random.choice([a, b, c])    if pc == "paper":        loose()    elif pc == "rock":        tie()    elif pc == "scissors":        win()    repeat() # remove this, and the whole repeat function itself...请注意,如果您只是要显示赢/输/平的最终结果,则游戏本身实际上不需要任何逻辑。只需将所有三个按钮都连接到显示结果的相同功能:from Tkinter import *import randomwindows = Tk()windows.geometry("200x300")def play():    lbresult.configure(text=random.choice(['You win!', 'You lose!', 'Tie!']))lbresult = Label(text="result will appear here")btrock = Button(text="  rock    ", command=play)btscissors = Button(text="scissors", command=play)btpaper = Button(text="  paper  ", command=play)btrock.pack()btpaper.pack()btscissors.pack()lbresult.pack()#result labelwindows.mainloop()另请注意,Python 2 现在正式不受支持,并且不再接收任何更新,包括安全补丁。今天学习 Python 的任何人都应该学习 Python 3。

波斯汪

了解什么是局部变量。最简单(尽管很愚蠢)的解决方案是使用global关键字,如下所示:def repeat():    global pc    pc = random.choice([a, b, c])    print(pc)但是global,如果代码应该是可靠的或可开发的,则永远不要使用。这里是没有它的解决方案,学习OOP来理解:from tkinter import *import randomclass RPS:    def __init__(self):        self.windows = Tk()        self.windows.geometry("200x300")        self.a = "rock"        self.b = "paper"        self.c = "scissors"        self.repeat()        self.lbresult = Label(text="result will appear here")        btrock = Button(text="  rock    ", command=self.rock)        btpaper = Button(text="  paper  ", command=self.paper)        btscissors = Button(text="scissors", command=self.scissors)        btrock.pack()        btpaper.pack()        btscissors.pack()        self.lbresult.pack()        self.windows.mainloop()    def repeat(self):        self.pc = random.choice([self.a, self.b, self.c])        print(self.pc)    def tie(self):        self.lbresult.configure(text="Tie!")    def win(self):        self.lbresult.configure(text="you win!!")    def loose(self):        self.lbresult.configure(text="you loose")    def rock(self):        if self.pc == "paper":            self.loose()        elif self.pc == "rock":            self.tie()        elif self.pc == "scissors":            self.win()        self.repeat()    def paper(self):        if self.pc == "paper":            self.tie()        elif self.pc == "rock":            self.win()        elif self.pc == "scissors":            self.loose()        self.repeat()    def scissors(self):        if self.pc == "paper":            self.win()        elif self.pc == "rock":            self.loose()        elif self.pc == "scissor":            self.tie()        self.repeat()RPS()希望这会有所帮助!

DIEA

这里有很多可能的方法。与您当前的方法最相似的方法是传递一个函数。你有一个函数,像这样:paper()函数可以有参数。这些参数将进入括号,它们成为该函数中的变量。举个例子,你可以有一个函数 play(),然后像这样向它传递 'rock'、'paper' 或 'scissors':def play(user_choice):  if user_choice == 'paper':    paper()  if user_choice == 'rock':    rock()....然后,您将像这样调用该函数:>>> play('paper')在该示例中,我将字符串“paper”传递给函数 play()。但是,我也可以将函数 play() 传递给函数,如下所示:def play(func):  func()通过这种方法,我可以将函数“rock”“paper”或“scissors”发送到函数 play,然后调用我传递的任何函数。你可以 - 虽然它可能不是最好的方法 - 将一个函数传递给它自身的另一个函数:def repeat(func):  func()def play():  # do your things  repeat(play)但是..这种方法是多余的。当您可以简单地调用函数时,创建函数只是为了调用函数是没有意义的:def play():  # do your things  play()这是一个递归函数。在函数结束时,它再次调用自身。如果你不停止它,这将永远持续下去,所以递归通常是有条件的:def play():  # do your things  continue = input("Would you like to continue [y/n]? ")  if continue == 'y':    play()  else:    pass        # This else statement is implicit. If you don't add it, it'll do it anyway.另一种选择是循环,例如“while 循环”:def play():  keep_going = True  while keep_going:    #do your things    continue = input("Would you like to continue [y/n]? ")    if continue == "y":      keep_going = True    else:      keep_going = Falsewhile 循环类似于递归 if 语句。当代码到达 while 语句时,它会确定该语句是真还是假,只有在它为真时才运行其中的代码。但是,与 if 语句不同的是,当它运行完代码后,它会返回并再次重新评估该语句,如果它仍然为真,则再次运行它。仅当您更改其评估的变量以使语句最终评估为 false 时,while 循环才会结束,此时程序将继续。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python