为了账号安全,请及时绑定邮箱和手机立即绑定

如何调用一组函数

如何调用一组函数

aluckdog 2022-11-09 16:24:10
我不知道该怎么做,以便每次按下按钮时结果标签都应该显示新结果,我应该在重复功能中复制并粘贴 3 个石头、剪纸和剪刀功能还是什么?它的python 2.7from Tkinter import*import random# variablesa = "rock"b = "paper"c = "scissors"pc = random.choice([a, b, c])windows = Tk()windows.geometry("200x300")# function that makes thedef 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 electiondef 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 optionslbresult = 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 labelwindows.mainloop()请帮助我疯狂地尝试解决这个问题,如果你能回答,请解释我为什么......我会很感激
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

pc当且仅当按下按钮时选择一个新的随机选项。


...

c = "scissors"

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

windows = 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 random

windows = 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 label


windows.mainloop()

另请注意,Python 2 现在正式不受支持,并且不再接收任何更新,包括安全补丁。今天学习 Python 的任何人都应该学习 Python 3。


查看完整回答
反对 回复 2022-11-09
?
波斯汪

TA贡献1811条经验 获得超4个赞

了解什么是局部变量。最简单(尽管很愚蠢)的解决方案是使用global关键字,如下所示:


def repeat():

    global pc

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

    print(pc)

但是global,如果代码应该是可靠的或可开发的,则永远不要使用。这里是没有它的解决方案,学习OOP来理解:


from tkinter import *

import random


class 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()

希望这会有所帮助!


查看完整回答
反对 回复 2022-11-09
?
DIEA

TA贡献1820条经验 获得超2个赞

这里有很多可能的方法。与您当前的方法最相似的方法是传递一个函数。你有一个函数,像这样:


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 = False

while 循环类似于递归 if 语句。当代码到达 while 语句时,它会确定该语句是真还是假,只有在它为真时才运行其中的代码。但是,与 if 语句不同的是,当它运行完代码后,它会返回并再次重新评估该语句,如果它仍然为真,则再次运行它。仅当您更改其评估的变量以使语句最终评估为 false 时,while 循环才会结束,此时程序将继续。


查看完整回答
反对 回复 2022-11-09
  • 3 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信