Je suis en train de coder un petit programme pour chronométrer et montrer, de manière ordonnée, les solutions de mon cube Rubik. Mais Python (3) continue de me préoccuper des temps utilisés avant la déclaration globale. Mais ce qui est étrange, c’est que IT IS a déclaré, dès le début, le times = []
(oui, c’est une liste) et encore une fois, sur la fonction (c’est là où il se plaint) comme times = [some, weird, list]
et le "globaliser" avec global times
. Voici mon code, vous pouvez donc l’analyser comme vous le souhaitez:
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()
Toute aide serait très appréciée car je suis nouvelle dans le monde de Python :)
La déclaration globale est lorsque vous déclarez que times
est global
def timeit():
global times # <- global declaration
# ...
Si une variable est déclarée global
, elle ne peut pas être utilisée avant la déclaration.
Dans ce cas, je ne pense pas que vous ayez besoin de la déclaration, car vous n'affectez pas à times
, vous la modifiez.
De la documentation 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
Donc, déplacer global times
en haut de la fonction devrait suffire.
Mais, vous devriez essayer de ne pas utiliser les globals dans cette situation. Pensez à utiliser une classe.
Depuis le Python Docs
Les noms répertoriés dans une instruction globale ne doivent pas être utilisés dans le même bloc de code précédant textuellement cette instruction globale.
Ce programme devrait fonctionner mais pourrait ne pas fonctionner exactement comme vous le souhaitiez. Veuillez prendre note des modifications.
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()
Pour le programme principal, vous pouvez le déclarer en haut. Il n'y aura pas d'avertissement. Mais, comme dit, la mention globale n’est pas utile ici. Chaque variable insérée dans le programme principal est dans l’espace global. Dans les fonctions, vous devez déclarer que vous souhaitez utiliser l'espace global avec ce mot clé.