gpt4 book ai didi

python - 无法为 "Minesweeper"正确递增数组元素

转载 作者:行者123 更新时间:2023-11-28 22:56:36 26 4
gpt4 key购买 nike

我开始学习Python,我只是从一个简单的例子开始。问题是计算表格中每个位置附近的地雷数。考虑下面的输入文件:

4 4 
*...
....
.*..
....
3 5
**...
.....
.*...
0 0

输出应该是这样的

Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100

我的代码是:

#!/usr/bin/python

import pprint

fin = open("1.2.in")
fout = open("1.2.out")

while True:
i, j = [int(x) for x in fin.readline().split()]
if(i == 0):
break
arr = []
for k in range(0,i):
line = fin.readline();
arr.append(list(line))


pprint.pprint(arr)
resarr = [[0]*j]*i

for row in range(0,i):
for col in range(0,j):
for rowIndex in range(-1,2):
for colIndex in range(-1,2):


# print row,rowIndex, col,colIndex
if (row + rowIndex < i) and (row + rowIndex >= 0) and ( col + colIndex < j) and (col+colIndex >=0) and (rowIndex != 0 or colIndex != 0):
#pprint.pprint(resarr[row][col])
#if arr[row+rowIndex][col+colIndex] == "*":

#print row,rowIndex, col,colIndex, " ", arr[row+rowIndex][col+colIndex]
#print resarr[row][col]
resarr[row][col] += 1
#pprint.pprint(resarr)
# print col+colIndex
print i,j
pprint.pprint(resarr)

我不知道出了什么问题,但是当我想增加 resarr 时,total 列增加了。

最佳答案

你的问题是

resarr = [[0]*j]*i

这意味着:获取 i[0]*j 定义的 same 列表的引用,并创建一个列表。

你想要的是:

resarr = [[0]*j for _ in range(i)]

这会创建一个新列表 ([0, 0, ...]) i 次。

看这个:

>>> a = [0] * 4
>>> a
[0, 0, 0, 0]
>>> b = [a] * 4
>>> b
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> id(b[0]) # get the "address" of b[0]
42848200
>>> id(b[1]) # b[1] is the same object!
42848200
>>> b[0][0] = 1
>>> b
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]

关于python - 无法为 "Minesweeper"正确递增数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15367602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com