2016-11-18 4 views
0

私はPythonで別のものと文字を入れ替える必要があります。私はこれを達成するための手順を使用しています。私のコードは:Pythonの2Dリスト内の文字を交換する

def mapwithtreasure(): 
    board[plyr_x][plyr_y] ='o' 
    board = [w.replace('o', 'X') for w in board] 
    print(board) 
    return board 

ローカル変数が割り当てられる前にアクセスしようとしているというエラーメッセージが表示されます。リストは、「ボード」と呼ばれ、私は、この手順の2行目...

board = [w.replace('o', 'X') for w in board] 

を取る場合...手順は、私が持っている変数にアクセスしようとミリアンペアというメッセージをアップ低迷なく実行されます同じ名前の変数名:boardを参照していても、割り当てられていません。

は、私はまた、この方法で試してみました:

def mapwithtreasure(): 
    board[plyr_x][plyr_y] ='o' 
    for n, i in enumerate(board): 
     if i=='o': 
      board[n]='X' 
    print(board) 
    return board 

をしかし、この方法では、必要な交換をするようには見えませんか?

アイデア?

+0

エラーメッセージをしてください貼り付けます。 – Petar

+1

* board *が関数の外で定義された変数の場合は、最初のdef文を使って関数に渡す必要があります。 'def mapwithtreasure(board):' – Jalo

+0

残念ですが、 。それは今働いている。助けてくれてありがとう! – user3608028

答えて

1

あなたの質問には少なくとも2つの問題があります。ボード上の値を修正していますが、その値はまだその関数には存在しません。パラメータを介してその関数に渡すか、グローバル変数を使用するか(あるいはそれをクラスにし、クラス変数ボードを使用する)。

第二の問題は、あなたが(置き換える使用できないことです)のリストに、ネストされたリストの内包が必要ですので、あなたは、構造を入れ子になってきたように:

>>> board = [['o', 'o', 'o'], ['o', 'o', 'o'], ['o', 'o', 'o']] 
>>> board = [[w.replace('o','X') for w in x] for x in board] 
>>> board 
[['X', 'X', 'X'], ['X', 'X', 'X'], ['X', 'X', 'X']] 
+0

ありがとう!これは素晴らしい作品です。 – user3608028

0

クイックフィックス:機能の最初の行にglobal boardを追加します。

関数内で値boardを割り当てるため、Pythonはローカル変数とみなし、作成前に変更しようとすると混乱します。 global boardを追加することによって、Pythonがローカル変数であると仮定しないように指示しますが、代わりにその名前のグローバル変数を探して使用します。

関連する問題