python - 递归函数能够打印,但不返回正确的值
问题描述
我正在尝试编写用于构建父节点和子节点以及搜索数据的代码。这些是规则:
- 用户必须有不同的数据。
- 像树结构一样,用户 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()
,它工作得很好。但是,递归调用的返回不起作用。返回显示为无。
当我运行我的代码时,输出应该是真/真,但我得到的是真/假。
解决方案
在递归函数中,所有代码路径都需要一个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
推荐阅读
- selenium-webdriver - 为什么 Capybara 找不到带有 selenium_chrome_headless 的元素,但可以找到带有 selenium_chrome 的元素?
- r - 如何将给定的样本分成 2 个子样本;正面和负面的?
- flutter - 颤振我想在每个项目上放置复选框
- python - 从时间序列数据计算转移矩阵的有效方法是什么?
- swift - 如何在 isComplate 端的“真实”价值中总结货币价值?
- google-apps-script - 如何使用 Google Apps 脚本计算百分比
- vba - 自动化 Word 宏代码以用连字符替换“^=”等运算符字符串?
- netlogo - 如何在每设定数量的滴答声中杀死和再生海龟
- python - 用 json.loads(r.text) 过滤掉 json
- ruby-on-rails - 如何在 ruby on rails 上绘制 2D 矢量场?