当我学习python时,我遇到了一个问题,并且无法确定出现了什么问题。请查看下面的python代码。
def is_identity_matrix(matrix):
n = len(matrix)
if n != len(matrix[0]):
return False
i = 0
while i < n:
j = 0
while j < n:
if matrix[i][j] == matrix[i][i]:
if matrix[i][j] != 1:
return False
else:
if matrix[i][j] != 0:
return False
j+=1
i+=1
return True
matrix6 = [[1,0,0,0],
[0,1,0,1],
[0,0,1,0],
[0,0,0,1]]
print is_identity_matrix(matrix6)
这会输出True
而不是False
因为问题是要求我们检查单位矩阵,其中只有中间的对角线应该有1,其余的应该是0.自{{ 1}}不等于1,输出应为false。有人可以帮忙吗?非常感谢你!
答案 0 :(得分:3)
就像hiro主角所说,问题在于:
if matrix[i][j] == matrix[i][i]:
您正在检查单元格的值是否与对角线上的值匹配,我假设您要检查对角线是否在对角线上。
该行应为:
if i == j:
答案 1 :(得分:2)
您应该比较i == j
而不是matrix[i][j] == matrix[i][i]
。
此处的版本使用for
代替while
。
def is_identity_matrix(matrix):
n = len(matrix)
if n != len(matrix[0]):
return False
for i in range(n):
for j in range(n):
if i == j:
if matrix[i][j] != 1:
return False
else:
if matrix[i][j] != 0:
return False
return True
甚至(使用product
中的itertools
)保存了缩进级别,看起来更具可读性:
from itertools import product
def is_identity_matrix(matrix):
n = len(matrix)
if n != len(matrix[0]):
return False
for i, j in product(range(n), range(n)):
if i == j:
if matrix[i][j] != 1:
return False
else:
if matrix[i][j] != 0:
return False
return True
答案 2 :(得分:0)
如果你还没有学习范围(),就像我现在一样, 这是我的解决方案:
var text = "HelloMy name is Bob"
let regex = try! NSRegularExpression(pattern: "[a-z][A-Z]")
text = regex.stringByReplacingMatches(in: text, options: [], range: NSMakeRange(0, text.characters.count-1), withTemplate: "What do I put here?")