Python函数不返回值

时间:2019-03-01 17:56:45

标签: python function return return-value

我正在创建一个带有两个计时器的数字时钟计时器。第一个是30分钟,第二个是30到20秒,具体取决于第一次计时器还剩多长时间。要每30或20秒重置第二个时钟,我创建了一个函数来调用它以将ShotTimer设置回30。但是,它并没有返回任何原因的Shot Timer值。代码在下面

def countdown(matchtime,shottime):
    matchstr = str(datetime.timedelta(seconds=matchtime))
    shottimestr = str(datetime.timedelta(seconds=shottime))
    lbl_text['text'] = matchstr
    lbl_textshot['text'] = shottimestr
    if shottime == 0:

        ShotTime(matchtime, shottime)
        print (shottime)
    if matchtime > 0:
        root.after(1000, countdown, matchtime-1, shottime-1)    
        print (shottime)    
        matchstr = str(datetime.timedelta(seconds=matchtime))
        shottimestr = str(datetime.timedelta(seconds=shottime))

        lbl_text['text'] = matchstr
        lbl_textshot['text'] = shottimestr


    elif(matchtime == 0):
        global NewForm
        NewForm = Toplevel() 
        NewForm.title("Sourcecodester")
        width = 500
        height = 300
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        x = (screen_width/2) - (width/2)
        y = (screen_height/2) - (height/2)
        NewForm.geometry("%dx%d+%d+%d" % (width, height, x, y))
        NewForm.resizable(0, 0)
        lbl_blast = Label(NewForm, text="Blast Off!", font=('arial', 50))
        lbl_blast.pack(fill=BOTH, pady=100)
        btn_back = Button(NewForm, text="Reset", font=('arial', 16), command=BackBtn)
        btn_back.pack(side=TOP)   
def ShotTime(matchtime, shottime):
        if shottime == 0 and matchtime > 900:
            shottime = 30
            return matchtime, shottime
        elif matchtime <= 900 and shottime == 0:
            shottime = 20
            return matchtime, shottime

2 个答案:

答案 0 :(得分:1)

您在def ShotTime中有一个return语句,但是ShotTime不等于任何值。

编辑: 要详细说明 `def ShotTime(比赛时间,射击时间):

 如果射击时间== 0且比赛时间> 900:
    射击时间= 30
    返回比赛时间,击球时间
Elif比赛时间<= 900和射击时间== 0:
    射击时间= 20
    返回比赛时间,射击时间
 

所以您在那里有return语句。

 如果拍摄时间== 0:

ShotTime(比赛时间,射击时间)
打印(拍摄时间)
 

但是在def countdown()中,您没有将其设置为等于任何值。我相信在python中,您必须执行x = ShotTime(matchtime,shottime)之类的操作,这将返回一个数组,然后执行matchtime = x [0]然后shottime = x [1]

edit2:这是@kevin比赛时间,射击时间= ShotTime(比赛时间,射击时间)的一种更好的方法

这与可变范围有关。除非它是全局变量,否则变量将保留在其创建的函数中。仅仅因为它具有相同的名称并不意味着它是相同的变量。

答案 1 :(得分:0)

函数 ShotTime(比赛时间,射击时间)通过值获取参数,而不是通过引用获取参数。设置

shottime = 30

只会影响您返回的值。您没有使用该值。例如

ShotTime(matchtime, shottime)

您可能希望更改为

matchtime, shottime = ShotTime(matchtime, shottime)