Я кодирую небольшую программу ко времени и шоу, заказанным способом, моими решениями Кубика Рубика. Но 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:)
Глобальная декларация заключается в том, что когда вы объявляете, что раз
Global
def timeit():
global times # <- global declaration
# ...
, если переменная объявлена Global
, он не может использоваться до декларации.
В этом случае я не думаю, что вам вообще нужна декларация, потому что вы не назначаете раз
, просто изменяя его.
имена, перечисленные в глобальном операторе, не должны использоваться в том же блоке кода, предшествующего этому глобальному утверждению.
Из документации по 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
Таким образом, перемещение глобального времени
в верхнюю часть функции должно быть нормальным.
Но в этой ситуации следует постараться не использовать глобулы. Подумайте об использовании класса.
Эта программа должна работать, но не может работать точно так, как вы намереваетесь. Пожалуйста, обратите внимание на изменения.
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()