while True: m,n=map(int,input().split()) mat=[] for i in range(n): a=list(input().split()) mat.append(a) cnt=0 for row in mat: for i in row: l=row.index(i) r=mat.index(row) for k in range(max(0,r-1),min(r+2,len(mat))): for o in range(max(0,l-1),min(l+2,m+1)): if mat[k][o]=="*": cnt+=1 mat[k][o]=cnt print(mat)有什么问题
时间: 2024-04-27 11:22:49 浏览: 150
qishiyouli.rar_I Do_delphi while do
这段代码有一些问题:
1. 在第9行,`mat[k][o]=cnt`应该放在第12行的for循环之后,否则会把cnt值赋给mat的错误位置。
2. 在第12行,应该使用`cnt=0`将计数器清零,否则cnt会一直累加。
3. 在第7行,将输入的字符串转换为列表时,应该使用`map(int, input().split())`而不是`list(input().split())`,否则会导致后面的代码中数字被当作字符串处理。
4. 在第7行,应该使用`range(n)`而不是`range(m)`,因为输入中的第一个数字是矩阵的行数,而不是列数。
5. 在第13行,`min(l+2,m+1)`应该改为`min(l+2,m)`,否则会导致IndexError异常。
6. 在第13行,`max(0,l-1)`应该改为`max(0,l)`,否则会导致IndexError异常。
7. 在第13行,`range(max(0,r-1),min(r+2,len(mat)))`应该改为`range(max(0,r-1),min(r+2,n))`,否则会导致IndexError异常。
8. 最后,应该将第7行和第8行放在while循环之外,否则每次循环都会要求输入矩阵的大小和内容。
阅读全文