python - 如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件
问题描述
我很困惑如何在 Python3 中创建没有任何循环的递归函数来打印 JSON 文件。
所以我有大学的家庭作业,主题是关于函数的递归,讲师告诉我只使用递归而不是循环。
我在 Category.json 中的 json 文件是:
[{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'},
{'catId': 1, 'id': 11, 'name': 'Buku Taman'},
{'catId': 2, 'id': 12, 'name': 'Persiapan Tes CPNS'},
{'catId': 2, 'id': 13, 'name': 'Persiapan Tes TOELF & IELTS'},
{'catId': 2, 'id': 14, 'name': 'Persiapan TPA & Psikotest'},
{'catId': 3, 'id': 15, 'name': 'Buku Aktivitas'},
{'catId': 3, 'id': 16, 'name': 'Buku Cerita Anak'},
{'catId': 3, 'id': 17, 'name': 'Buku Dongeng'},
{'catId': 3, 'id': 18, 'name': 'Buku Dunia Pengetahuan'},
{'catId': 3, 'id': 19, 'name': 'Buku Fabel'}]
我的python代码是:
import json
def showData(file):
file_json = open(file)
data = json.loads(file_json.read())
return data
print(showData("Category.json"))
我没有完成我的代码,因为我仍然对如何在没有循环的情况下进行递归感到困惑。
你有什么主意吗?
解决方案
我不明白你为什么recursion
只需要使用来打印 JSON 文件而不是iterations(for, while).
这就是您使用Recursion打印数据的方式。
d = [{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}]
# Recursive Code
def print_json(j):
# Base condition
if len(j) == 0:
return
# Print the first item of j
print(j[0])
# Call the same function on j[1:]
# Skipping the first item of j in every call
print_json(j[1:])
print_json(d)
{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'}
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'}
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'}
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'}
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'}
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'}
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'}
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'}
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'}
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}
您知道递归在内部使用称为递归堆栈的东西吗?
这是递归代码的一些额外空间开销。
推荐阅读
- flutter - 为什么在构造函数的情况下等待不起作用?
- javafx - 提供程序 org.controlsfx.glyphfont.FontAwesome 无法实例化
- macos - 在 mac 终端上以 root 身份注销
- firebase - 如何在flutter中设置模型对象的值并在FutureBuilder ListView中使用?
- google-cloud-endpoints - Google 端点忽略带有下划线键的标头
- javascript - 在压缩图像和上传时,我的代码有什么问题?
- c# - 使用 PhotonView.isMine 方法时无法检测到错误
- c++ - C ++如何防止在编译时调用多个方法?
- apache - 虚拟主机设置显示默认的 apache2 页面
- php - 一种基于唯一 ID 限制数据的方法