我有这两个测试用例:
calc1 = [['print', 5]] # 5
calc2 = [['print', 2], ['print', 4], ['print', 8]] # 2 4 8
我可以用这个函数正确地打印它们:
def exec_program(p):
if len(p) == 1:
print(p[0][1])
else:
for i in p:
print(i[1])
print(exec_program(calc2))
>>> 2
>>> 4
>>> 8
但是我如何递归地解决这个问题呢?calc中的项数可以是1或多个。感谢所有的帮助
编辑:我现在的尝试。寻找解决方案
def exec_program(p):
if len(p) == 1:
print(p[0][1])
else:
print(exec_program[1:] - 1)
def do_print(calc):
if not calc:
return
if calc[0] == 'print':
print(calc[1])
else:
for subcalc in calc:
do_print(subcalc)
对于任何深度的嵌套列表都有效。
你会想要在输入上添加一些错误检查,最好使用一些更严格的数据结构,如NamedTuple
。
您可以在打印完一个元素后从下一个元素开始分割列表,例如:
calc2 = [['print', 2], ['print', 4], ['print', 8]]
def print_me(calc2):
if not calc2:
return #once calc2 is empty, we stop the recursion.
print(calc2[0][1])
return print_me(calc2[1::])
print_me(calc2)