首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查对称性的代码失败了一些测试用例。

检查对称性的代码失败了一些测试用例。
EN

Stack Overflow用户
提问于 2015-07-06 19:25:52
回答 1查看 51关注 0票数 0

我在试图让这段代码在所有情况下运行时都遇到了麻烦:

代码语言:javascript
复制
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,但它没有返回。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-06 19:31:16

break语句仅结束内部while循环。

由于您已经发现了一个不对称,所以只需使用return:

代码语言:javascript
复制
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

代码语言:javascript
复制
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()循环

代码语言:javascript
复制
for i in range(n):
    for j in range(n):
        if not p[i][j] == p[j][i]:
            return False
return True
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31254010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档