Ich programmiere ein kleines Programm für die Zeit und zeige auf geordnete Weise die Lösungen meiner Rubik-Würfel. Aber Python (3) macht mir immer wieder Sorgen, dass Zeiten vor der globalen Deklaration verwendet werden. Aber was seltsam ist, dass IT IS gleich am Anfang als times = []
deklariert wurde (ja, es ist eine Liste) und dann noch einmal als times = [some, weird, list]
über die Funktion (über die er sich beschwert) und sie mit "globalisiert" global times
. Hier ist mein Code, damit Sie ihn nach Belieben analysieren können:
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()
Jede Hilfe wäre sehr dankbar, da ich neu in der Welt von Python bin :)
Die globale Deklaration ist, wenn Sie deklarieren, dass times
global
ist.
def timeit():
global times # <- global declaration
# ...
Wenn eine Variable als global
deklariert ist, kann sie nicht vor der Deklaration verwendet werden.
In diesem Fall brauchen Sie die Deklaration meines Erachtens überhaupt nicht, da Sie times
nicht zuweisen, sondern nur ändern.
Aus der Python-Dokumentation:
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
Das Verschieben von global times
an den Anfang der Funktion sollte also in Ordnung sein.
Sie sollten jedoch versuchen, in dieser Situation keine Globals zu verwenden. Erwägen Sie die Verwendung einer Klasse.
Aus den Python Docs
In einer globalen Anweisung aufgeführte Namen dürfen nicht in demselben Codeblock verwendet werden, der der globalen Anweisung textuell vorausgeht.
Dieses Programm sollte funktionieren, funktioniert aber möglicherweise nicht genau so, wie Sie es beabsichtigt haben. Bitte beachten Sie die Änderungen.
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()
Für das Hauptprogramm können Sie es oben deklarieren. Es erfolgt keine Warnung. Aber wie gesagt, die globale Erwähnung ist hier nicht sinnvoll. Jede Variable im Hauptprogramm befindet sich im globalen Raum. In Funktionen müssen Sie mit diesem Schlüsselwort deklarieren, dass Sie den globalen Speicherplatz dafür verwenden möchten.