我在试图让这段代码在所有情况下运行时都遇到了麻烦:
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,但它没有返回。
发布于 2015-07-06 19:31:16
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更好的是,在range()上使用range()循环
for i in range(n):
for j in range(n):
if not p[i][j] == p[j][i]:
return False
return Truehttps://stackoverflow.com/questions/31254010
复制相似问题