2016-11-18 52 views
0

我需要换一个字母与另一个Python编写的。我正在使用一个程序来实现这一点。我的代码是:交换在2D列表中的字母在Python

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

一个错误信息弹出说我想已经被分配之前访问本地变量。该列表称为“板”,如果我拿出在此过程中,第二行...

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

如果*板*是函数外部定义的变量,你应该与最初的DEF语句,它传递给函数: '高清mapwithtreasure(板):' – Jalo

+0

对不起,我知道我还没有给你太多去。现在就开始工作了。感谢您的帮助! – user3608028

回答

1

你必须通过你的问题的长相至少有两个问题。您正在修改船上的一个值,该值并不存在于该功能中。要么通过参数给它使用全局变量(或者使它成为一个类并使用类变量板)。

的第二个问题是,您不能使用在列表替换(),因为你嵌套结构,所以你需要嵌套列表理解:

>>> 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不认为它是一个局部变量,而是查找该名称的全局变量和使用。