0

Python を学習していますが、グローバル変数/リストに問題があります。私はハノイ プログラムの基本的なマニュアル タワーを書いています。現在のプログラムは次のとおりです。

pilar1 = [5,4,3,2,1,0]
pilar2 = [0,0,0,0,0,0]
pilar3 = [0,0,0,0,0,0]

def tower_of_hanoi():

    global pillar1
    global pillar2
    global pillar3

    print_info()

def print_info():

    global pillar1
    global pillar2
    global pillar3

    for i in range(4,-1,-1):
        print(pillar1[i], " ", pillar2[i], " ", pillar3[i])

いくつかのバリエーションを試しましたが、毎回「NameError: グローバル名 'pillar1' が定義されていません」というエラーが表示されます。

この設定でグローバル リストを処理する最良の方法は何ですか? 可能であれば、1 つのソース ファイルのみを使用することをお勧めします。ありがとう!

4

2 に答える 2

13

pilar1ではなく、として「宣言」したためです。pillar1

于 2013-01-18T15:51:45.063 に答える
6

発生する問題はpilar、 と同じではありませんpillarglobalそれを修正すると、宣言は不要になります。

pilar1 = [5,4,3,2,1,0]
pilar2 = [0,0,0,0,0,0]
pilar3 = [0,0,0,0,0,0]

def tower_of_hanoi():    
    print_info()

def print_info():    
    for i in range(4,-1,-1):
        print(pillar1[i], " ", pillar2[i], " ", pillar3[i])

global を使用する必要があるのは、関数定義などの非グローバル スコープでグローバル変数を割り当てる場合のみです。

# global variable, can be used anywhere within the file since it's
# declared in the global scope
my_int = 5

def init_list():
    # global variable, can be used anywhere within the file after
    # init_list gets called, since it's declared with "global" keyword
    global my_list
    my_list = [1, 2, 3]

def my_function():
    # local variable, can be used only within my_function's scope
    my_str = "hello"

    # init's global "my_list" variable here, which can then be used anywhere
    init_list()
    my_list.append(5)

my_function()
print(my_list)

ただし、グローバルをあまり使用しないでください。代わりに、関数パラメーターを使用して値を渡します。

于 2013-01-18T15:55:29.620 に答える