扫雷揭示元素蟒蛇

  • 本文关键字:元素 扫雷 python
  • 更新时间 :
  • 英文 :


我正在尝试为我正在制作的扫雷游戏制作一个函数。此函数的目的是在给定 x 和 y(它所在的位置(的情况下显示元素。这可能不是完成它的最优雅的方法,但我正在为每个图块制作一个 ['-'] 列表(这称为 newField,网格是一个正方形(。"-"代表一个隐藏的块(你不知道它是否是炸弹或周围有多少炸弹(。然后,我从 newField 更改一个元素,使其等于 listField 中的相应块(这是一个列表列表(。其中的每个列表代表一行(。接下来,我尝试在每 10 个值之后将 '' 添加到 newField 中,因为我的目标是让它成为一个字符串,并且在每一行之后,一个新行开始('' 创建一个新行(。但是,这给了我错误:

AttributeError: 'NoneType' object has no attribute 'insert' on line 18 in main.py. 

我想对此提供一些建议。谢谢!

注意:wl 变量表示宽度/长度。

listField = 
[['1', '1', '0', '0', '0', '0', '0', '0', '1', 'X'], 
['X', '2', '2', '2', '2', '2', '2', '1', '1', '1'], 
['1', '2', 'X', 'X', '2', 'X', 'X', '2', '2', '2'], 
['1', '2', '3', '2', '2', '2', '3', '4', 'X', 'X'], 
['1', 'X', '1', '0', '0', '1', '3', 'X', 'X', '3'], 
['1', '2', '2', '1', '0', '1', 'X', 'X', '4', '2'], 
['2', '3', 'X', '1', '0', '1', '2', '2', '2', 'X'], 
['X', 'X', '2', '1', '1', '1', '1', '0', '1', '1'], 
['4', '5', '4', '3', '3', 'X', '2', '1', '0', '0'], 
['X', 'X', 'X', 'X', 'X', '3', 'X', '1', '0', '0']]

wl = 10
def revealElement(wl, x, y):
yReal = y-1
xReal = x-1
newField = ['-' for i in range(wl*wl)]
newField[yReal*wl + xReal] = listField[yReal][xReal]
for i in range(wl-1):
a = wl+1
b = i+1
newField = newField.insert(a*b, 'n')
return newField

print revealElement(wl, 10, 6)

insert方法就地修改列表,并且不返回它。

此外,如果你让你的循环倒退,你会得到更好的结果:

def revealElement(wl, x, y):
yReal = y-1
xReal = x-1
newField = ['-' for i in range(wl*wl)]
newField[yReal*wl + xReal] = listField[yReal][xReal]
for i in range(wl-1, -1, -1): # go backwards
newField.insert(wl*i, 'n')
return "".join(newField) # make it a string

Andrej Kesely 说的是正确的......

你也可以用这个替换你的 for 循环逻辑:

for i in range(1, wl):
newField.insert(wl*i, 'n')

理解@Andrej Kesely 所说的插入返回的内容非常重要None

从 insert(( 返回值

insert(( 方法仅将元素插入到列表中。它不返回任何内容;返回"无"。

因此,您只需要执行以下操作:

newField.insert(wl*i, 'n')

此外,您可以像这样初始化向量:

newField = ['-'] * wl * wl

最后,如果您真的想在最后添加 ,也许您可以继续使用列表列表。

例如,要打印该列表,您可以执行以下操作:

def print_board:
for row in newField :
print(row + 'n')

这将适用于您拥有的每个扫雷板。您可以添加的其他功能是将列表列表转换为单个列表,相反,根据您的大小变量wl

正如 @Andrej Kesely 在注释中提到的,您的代码无法运行,因为插入函数不返回任何内容。

您可以通过运行如下内容来检查这一点:

a = list()
print(type(a.insert(1,'a')) # This prints class "NoneType"

newField = newField.insert(a*b, 'n')更改为newField.insert(a*b, 'n')可以解决您的问题!

最新更新