我在尝试让所有代码运行这段代码时遇到了麻烦:
def symmetric(p):
""" returns true if list is symmetric"""
if p==[]:return True
n=len(p)
m=len(p[0])
if m !=n:
return False
i=0
j=0
t=False
while i < n:
while j < n:
if not p[i][j]==p[j][i]:
return False
j=j+1
i=i+1
return True
当我运行它时,它会在某些情况下通过。 我似乎无法看到我做错了什么。
我希望[['algebra', 'combinatorics', 'graphs'], ['combinatorics', 'topology', 'sets'], ['graphs', 'topology', 'sets']]
返回False
,但不会。{/ p>
答案 0 :(得分:2)
break
语句只会结束内部 while
循环。
由于您已经发现不对称,只需使用return:
i, j = 0
while i < n:
while j < n:
if not p[i][j] == p[j][i]:
return False
j += 1
i += 1
return True
但是,您不是要将每一行与同一索引处的每一列进行比较;因为你永远不会将j
重置为0,在第一个while j < n
循环后你将j == n
并且你跳过所有剩余的循环。
在内设置j = 0
第一个while
:
i = 0
while i < n:
j = 0
while j < n:
if not p[i][j] == p[j][i]:
return False
j += 1
i += 1
return True
更好的是,在for
上使用range()
循环:
for i in range(n):
for j in range(n):
if not p[i][j] == p[j][i]:
return False
return True