Python: имя 'переменная' является локальным и глобальным - PullRequest
0 голосов
/ 04 августа 2020

У меня недавно возникла проблема при попытке создать приложение таймера в python. Поскольку я новичок, я только начал разбираться в функциях.

Я знаю, что нельзя получить доступ к переменным внутри функций без глобального оператора, но когда я пытаюсь это сделать, я получаю следующую ошибку :

SyntaxError: name 'seconds' is local and global

из следующего кода:

def countdown(minutes, seconds):
    global minutes
    global seconds
    while (minutes*60) > 0 or seconds > 0:
        seconds -= 1
        if seconds < 0:
            seconds = 59
            minutes = minutes - 1
        time.sleep(1)

    print(minutes)
    print(seconds)

Я буду очень признателен за любую помощь :)

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Каждая функция имеет свою область действия. Обычно переменные либо передаются как параметры, либо объявляются внутри.

Здесь вы делаете и то, и другое. Вы сначала передаете их, а затем пытаетесь получить их извне как глобальные переменные.

Используйте глобальные переменные, только если у вас есть веская причина (предварительно определенный список параметров, который вы не можете изменить, et c ...) . Здесь они вам не нужны.

Должно работать так:

import time

def countdown(minutes, seconds):
    while minutes > 0 or seconds > 0:
        print(minutes, seconds)
        time.sleep(1)
        seconds -= 1
        if seconds < 0:
            seconds = 59
            minutes = minutes - 1
    
if __name__ == "__main__":
    countdown(0, 5)
1 голос
/ 04 августа 2020

Я не думаю, что это лучшее решение, но поскольку вы хотите интегрировать функцию в приложение tkinter, вы можете использовать timeRemaining ['text'] = output и root .update () в вашем while l oop внутри функции обратного отсчета.

Вот так:

def countdown(minutes, seconds):
    while (minutes*60) > 0 or seconds > 0:
            seconds -= 1
            if seconds < 0:
                seconds = 59
                minutes = minutes - 1
            time.sleep(1)
            output = '%02d : %02d' % (minutes, seconds)
            timeRemaining['text'] = output
            root.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...