函数在“return(False)”后不停止

2024-05-14 09:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个函数来比较列表结构(值是无关紧要的)。问题是我有两个不相等的列表,但是函数仍然返回True,即使它实际上进入了else部分。我不明白为什么我做错了什么。这是我的代码:

def islist(p): #is p a list
    return type(p)==type(list())

def ListeIsomorf(a,b):
    if len(a)==len(b):
        for i,j in zip(a,b):
            if islist(i) and islist(j):
                ListeIsomorf(i,j)
            elif islist(i) or islist(j):
                return(False)
        return(True)    

    else:
        print(a,"length from the list isn't equal",b)
        return(False)

#example lists
ListeE = [[],[],[[]]]
ListeD = [[],[],[[]]]
ListeF = [[[],[],[[]]]]
ListeG = [[],[[]],[[]]]
ListeH = [1,[3]]
ListeI = [1,3]

#tests
print(ListeIsomorf(ListeD,ListeE)) # True
print(ListeIsomorf(ListeD,ListeF)) # False
print(ListeIsomorf(ListeD,ListeG)) # False
print(ListeIsomorf(ListeH,ListeI)) # False

所以问题只发生在第三个print(ListeIsomorf(ListeD,ListeG)) # False。它实际上进入else部分并打印"length from the list isn't equal",但它不会停止,也不会发出return(False)。我错过了什么?在


Tags: 函数falsetrue列表returnifdeftype
1条回答
网友
1楼 · 发布于 2024-05-14 09:16:58

问题是,当函数递归地调用自身时:

            ListeIsomorf(i,j)

它忽略返回值。在

因此,在第二级递归中进行的比较对顶层返回的内容没有影响。在

将上述内容改为:

^{pr2}$

解决问题。在

相关问题 更多 >

    热门问题