私は小さなプログラムをコーディングして、ルービックキューブの解法を順序正しく表示します。しかし、Python(3)は、グローバル宣言の前に使用される時間について私を悩ませ続けます。しかし、奇妙なのは、IT ISが宣言され、 times = []
(はい、それはリストです)そして、もう一度、関数(彼が文句を言うところです)としてtimes = [some, weird, list]
として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 :)の世界で新しいので、どんな助けでも非常にありがたいです
グローバル宣言は、times
がglobal
であることを宣言するときです
def timeit():
global times # <- global declaration
# ...
変数がglobal
として宣言されている場合、宣言の前に使用することはできません。
この場合、times
に割り当てず、変更するだけなので、宣言はまったく必要ないと思います。
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
関数の先頭に移動する必要があります。
ただし、この状況ではグローバルを使用しないようにする必要があります。クラスの使用を検討してください。
Python Docs から
グローバルステートメントにリストされている名前は、そのグローバルステートメントの前にある同じコードブロックでは使用できません。
このプログラムは機能するはずですが、意図したとおりに機能しない可能性があります。変更点に注意してください。
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()
メインプログラムの場合は、上部で宣言できます。警告はありません。しかし、言われたように、グローバルな言及はここでは役に立ちません。メインプログラムに置かれた各変数は、グローバル空間にあります。関数では、このキーワードを使用してグローバルスペースを使用することを宣言する必要があります。