Функция Python не возвращает значения - PullRequest
0 голосов
/ 01 марта 2019

Я создаю цифровой таймер с двумя таймерами.Первый - 30 минут, а второй - от 30 до 20 секунд, в зависимости от того, сколько времени осталось в первом таймере.Чтобы сбрасывать вторые часы каждые 30 или 20 секунд, я создал функцию, которая будет вызывать их, чтобы установить тактовую частоту обратно на 30. Однако он не возвращает значение таймера выстрела, поэтому нет никаких идей, почему.Код ниже

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 голосов
/ 01 марта 2019

Функция ShotTime (время матча, время выстрела) принимает свои параметры по значению, а не по ссылке.Настройка

shottime = 30

Влияет только на возвращаемое вами значение.Вы не используете это значение.например,

ShotTime(matchtime, shottime)

Возможно, вы захотите изменить на

matchtime, shottime = ShotTime(matchtime, shottime)
0 голосов
/ 01 марта 2019

У вас есть оператор возврата в def ShotTime, но у вас нет ShotTime, равного чему-либо.

Редактировать: Чтобы уточнить, у вас есть `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`

Таким образом, у вас есть операторы возврата.

if shottime == 0:

ShotTime(matchtime, shottime)
print (shottime)

, но в def countdown () вы не устанавливаете его равным чему-либо.Я полагаю, что в Python вы должны сделать что-то вроде x = ShotTime (matchtime, shottime), и это вернет массив, затем сделайте как matchtime = x [0], затем shottime = x [1]

edit2: этоэто лучший способ thx @kevin matchtime, shottime = ShotTime (matchtime, shottime)

Это связано с переменной областью действия.Если это не глобальная переменная, переменные остаются в функции, которую они создали.То, что оно имеет одно и то же имя, не означает, что это одна и та же переменная.

...