имя 'времена' используется до глобального объявления - Но IT объявленная IS!

Я кодирую небольшую программу ко времени и шоу, заказанным способом, моими решениями Кубика Рубика. Но Python (3) продолжает беспокоить меня во времена, используемые до глобального объявления. Но то, что является странным, - то, что IT IS объявил, прямо на beggining, как times = [] (да, это - список), и с другой стороны, на функции (это - то, где он жалуется), как times = [some, weird, list] и "globaling" это с global times. Вот мой код, таким образом, можно проанализировать его, как Вы хотите:

import time

times = []

def timeit():
    input("Press ENTER to start: ")
    start_time = time.time()
    input("Press ENTER to stop: ")
    end_time = time.time()
    the_time = round(end_time - start_time, 2)
    print(str(the_time))
    times.append(the_time)
    global times
    main()

def main():
    print ("Do you want to...")
    print ("1. Time your solving")
    print ("2. See your solvings")
    dothis = input(":: ")
    if dothis == "1":
        timeit()
    elif dothis == "2":
        sorte_times = times.sort()
        sorted_times = sorte_times.reverse()
        for curr_time in sorted_times:
            print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time))
    else:
        print ("WTF? Please enter a valid number...")
        main()

main()

Любая справка очень ценилась бы, поскольку я новый в мире Python:)

30
задан AntonioPT 20 January 2010 в 22:53
поделиться

4 ответа

Глобальная декларация заключается в том, что когда вы объявляете, что раз Global

def timeit():
    global times # <- global declaration
    # ...

, если переменная объявлена ​​ Global , он не может использоваться до декларации.

В этом случае я не думаю, что вам вообще нужна декларация, потому что вы не назначаете раз , просто изменяя его.

34
ответ дан 27 November 2019 в 23:45
поделиться

Из документов Python

имена, перечисленные в глобальном операторе, не должны использоваться в том же блоке кода, предшествующего этому глобальному утверждению.

3
ответ дан 27 November 2019 в 23:45
поделиться

Из документации по Python:

Names listed in a global statement must not be used in the same code block
textually preceding that global statement.

http://docs.python.org/reference/simple_stmts.html#global

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

Но в этой ситуации следует постараться не использовать глобулы. Подумайте об использовании класса.

21
ответ дан 27 November 2019 в 23:45
поделиться

Эта программа должна работать, но не может работать точно так, как вы намереваетесь. Пожалуйста, обратите внимание на изменения.

import time

times = []

def timeit():
    input("Press ENTER to start: ")
    start_time = time.time()
    input("Press ENTER to stop: ")
    end_time = time.time()
    the_time = round(end_time - start_time, 2)
    print(str(the_time))
    times.append(the_time)

def main():
    while True:
        print ("Do you want to...")
        print ("1. Time your solving")
        print ("2. See your solvings")
        dothis = input(":: ")
        if dothis == "1":
            timeit()
        elif dothis == "2":
            sorted_times = sorted(times)
            sorted_times.reverse()
            for curr_time in sorted_times:
                print("%d - %f" % ((sorted_times.index(curr_time)+1), curr_time))
            break
        else:
            print ("WTF? Please enter a valid number...")

main()
1
ответ дан 27 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: