gpt4 book ai didi

python - 功能在 "return(False)"后不会停止

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:55 26 4
gpt4 key购买 nike

我正在尝试编写一个应该比较列表结构的函数(值是无关紧要的)。问题是我有两个不相等的列表,但该函数仍然返回 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" 但它并没有停止,也没有给出 返回(假)。我错过了什么吗?

最佳答案

问题在于,当您的函数递归调用自身时:

            ListeIsomorf(i,j)

它忽略返回值。

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

将上面的更改为:

            if not ListeIsomorf(i,j):
return(False)

解决问题。

关于python - 功能在 "return(False)"后不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com