Почему функция возвращает None, если значения return заданы?
Пишу алгоритм на графе - поиск в глубину. Суть определить является ли один класс предком другого класса. Класс A является предком класса B, если A = B; A - прямой предок B существует такой класс C, что C - прямой предок B и A - предок C
Почему функция возвращает None, если значения return заданы?
def find_predky(self,predok,potomok):
if potomok not in self.dict_class:
return "No"
if predok in self.dict_class[potomok]:
return "Yes"
if predok==potomok:
return "Yes"
for mas_prdk in self.dict_class[potomok]:
for prdk in mas_prdk:
return self.find_predky(predok, prdk)
Это полный код:
input = open("input2.txt", "r").readline
strInput=''
class request:
def __init__(self):
self.mas_request=[]
def add_reqwest(self, str_input):
self.mas_request.append(str_input.split())
return True
class inheritance:
def __init__(self):
self.dict_class=dict()
self.visited=set()
def add_class(self,str_input):
potomoc_predoc=str_input.split(':')
potomoc=potomoc_predoc[0].replace(' ', '').replace('\n','')
if len(potomoc_predoc)>1:
predky=[predok.replace(' ', '') for predok in potomoc_predoc[1].split()]
else:
predky=[]
if potomoc not in self.dict_class:
self.dict_class[potomoc]=predky
else:
for x in predky:
self.dict_class[potomoc].append(x)
def find_predky(self,predok,potomok):
if potomok not in self.dict_class:
return "No"
if predok in self.dict_class[potomok]:
return "Yes"
if predok==potomok:
return "Yes"
for mas_prdk in self.dict_class[potomok]:
for prdk in mas_prdk:
return self.find_predky(predok, prdk)
count_class=int(input())
inher=inheritance()
for i in range(count_class):
inher.add_class(input())
count_request=int(input())
rqwst=request()
for i in range(count_request):
rqwst.add_reqwest(input())
for rq in rqwst.mas_request:
print(inher.find_predky(rq[0],rq[1]))
На вход в строке:
input = open("input2.txt", "r").readline
Подаю файл со следующим содержимым (переносы строк здесь не учитываются):
Классы потомки и предки
- 12
- G : F
- A
- B : A
- C : A
- D : B C
- E : D
- F : D
- X
- Y : X A
- Z : X
- V : Z Y
- W : V
Запросы
- 8
- A G
- A Z
- A W
- X W
- X QWE
- A X
- X X
- 1 1
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
Вероятнее всего у вас в self.dict_class[potomok] лежит пустой массив и поэтому цикл for не выполняется
Вот пример, хоть return присутствует выводить None
def f(list_):
for el in list_:
return el
print(f([]))