#python #python-3.x #algorithm
#python #python-3.x #алгоритм
Вопрос:
Я пытаюсь создать код для построения родительских и дочерних узлов и поиска данных. Это правила:
- У пользователей должны быть разные данные.
- Подобно древовидной структуре, пользователь 1 становится родительским узлом.
- Родительский узел может выполнять поиск данных из дочернего узла.
- Дочерний узел может искать только свои собственные данные или данные более низкого узла.
И это мой код:
# row_data format : user id / parent id / number of data / data 1 ~ data n
row_data = ["1 0 3 1 2 3", "2 1 2 4 5", "3 1 2 6 7", "4 2 1 8", "5 0 2 9 10", "6 3 1 11", "7 6 1 12", "8 7 1 13",
"9 8 2 14 15"]
# query "2 5": Does user 2 able to access Data 5?
queries = ["2 5", "1 8"]
user_data = []
def search(uID, data):
for dict in user_data:
if data in dict["Data"]:
if dict["USER_ID"] == uID:
return True
else:
return parent_check(uID, dict["PARENT_ID"]) # [This is problem] Why isn't it return back?
def parent_check(uID, pID):
for dict in user_data:
if pID == dict["USER_ID"]:
if uID == dict["USER_ID"]:
return True # [This is problem] Why doesn't work "return"?
return False
if __name__ == '__main__':
for input in row_data:
input = input.split()
input_data = {"USER_ID": input[0], "PARENT_ID": input[1], "NUMBER_OF_DATA": input[2], "Data": input[3:]}
user_data.append(input_data)
for query in queries:
uID, data = query.split()
print(search(uID, data))
Я попытался решить эту проблему, используя словарный тип данных.
Мой код не показывает ошибку, но и не показывает желаемый результат. Когда я пытаюсь печатать, используя print("search complete")
в return true
области parent_check()
, она работает отлично. Однако возврат из рекурсивного вызова не работает. Возврат отображается как none.
Когда я запускаю свой код, вывод должен быть true / true, но вместо этого я получаю true / false .
Ответ №1:
В рекурсивной функции для всех путей кода требуется return
оператор. Попробуйте это:
def parent_check(uID, pID):
for dict in user_data:
if pID == dict["USER_ID"]:
if uID == dict["USER_ID"]:
return True
else:
return parent_check(uID, dict["PARENT_ID"])
return False
Код, добавленный мной:
else:
return parent_check(uID, dict["PARENT_ID"])
Вывод:
True
True