Name 'times' используется до глобальной декларации. Но IT объявляется!
Я кодирую небольшую программу вовремя и показываю упорядоченным образом мои кубики Rubik. Но Python (3) продолжает беспокоить меня о временах, используемых перед глобальной декларацией. Но что странно, что IT объявлен, прямо на начальном этапе, в качестве 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:)
Ответы
Ответ 1
Глобальная декларация - это когда вы объявляете, что times
есть global
def timeit():
global times # <- global declaration
# ...
Если переменная объявлена global
, ее нельзя использовать перед объявлением.
В этом случае я не думаю, что вам нужна декларация вообще, потому что вы не назначаете times
, просто изменяя ее.
Ответ 2
Из документации 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
Итак, перемещение global times
в начало функции должно быть прекрасным.
Но вы должны стараться не использовать глобальные переменные в этой ситуации. Рассмотрим использование класса.
Ответ 3
Из Документы Python
Имена, перечисленные в глобальном выражении, не должны использоваться в том же блоке кода, что и текст, предшествующий этому глобальному оператору.
Ответ 4
Эта программа должна работать, но может работать не так, как вы планировали. Пожалуйста, обратите внимание на изменения.
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()
Ответ 5
Для основной программы вы можете объявить ее сверху. Это не будет предупреждением. Но, как сказано, глобальное упоминание здесь не является полезным. Каждая переменная, помещенная в основную программу, находится в глобальном пространстве. В функциях вы должны объявить, что хотите использовать глобальное пространство для этого ключевого слова.