良い日です。 私は2048と呼ばれるゲームを構築しようとしています。私はboxという名前の変数を作りました.4を追加すると、後で置き換えられる4つの空の値を含む各リストがリストに追加されました。それらの中に)私は1つの関数(ボックスに変更を行うために)グローバルなボックスを呼び出すと、それは動作します。その後、ボックスの位置を変更する別の関数を呼び出し、それもエラーなく通過しました。このようなリストcomphrehensionを持つ別の変数に:は関数内のグローバル変数を参照できません
box = [[[]]*4 for i in range(4)] # this is box
box1 = [box[i][::-1] for i in range(4)] # tried to do this
第二の機能は、BOX1を必要としませんでしたが、私はすべてのエラーoccurs.Nothingが発生するかどうかを確認するためにそれを呼ばれます。 しかし、次の関数エラーで "NameError:囲みスコープ内の代入の前に参照されるフリー変数ボックス"と同じことが発生したときに発生します。
なぜですか。私は間違っていましたか?ここで コード
import random
global box
box = [[[]]*4 for i in range(4)]
def adding():
digit = random.choice([2,4])
empty = [index for index,i in enumerate(box[0]) if i==[]]
add = random.choice(empty)
try:
for i in range(3):
if box[i][add] == [] and box[i+1][add] != []:
box[i][add] = digit
break
elif box[-1][add] == []:
box[-1][add] = digit
break
except:
print('Error Occured')
def right():
box1=[box[i][::-1] for i in range(4)]
for i in range(4):
take = box[i]
box[i]=[[] for x in take if x ==[]]
for j in [x for x in take if x != []]:
box[i].append(j)
def left():
box1 = [box[i][::-1] for i in range(4)]
right()
box1 = [box[i][::-1] for i in range(4)]
box= box1
誤差も異なるOSに試み機能left()
で発生されます。
私はグローバルな内部関数を宣言しましたが、なぜ誰かがright()では動作しましたが、left()では動作しなかったことを説明しましたか?
関数の外 'はGlobal'を宣言するにはポイントと'グローバルあなたのインデント –
使用を修正あなたの関数内のボックス ' – MMF