输入
[['1','2','3'],['a','b','c'],['6','7','8'],['e','f','g']]
输出应该是:
1, 2, 3 a, b, c 6, 7, 8 e, f, g
Code:
def print_row(los):
print ', '.join(los)
def print_table(los):
lose = []
if los == []:
return
else:
return print_row(los[0]) + print_table(los[1:])
目前:
print_table([['1','2','3'],['a','b','c'],['6','7','8'],['e','f','g']])
给予:
1, 2, 3 a, b, c 6, 7, 8 e, f, g TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
我该如何解决这个问题?
请您参考如下方法:
您的函数返回 None(一个空的 return 语句)。而是返回一个空字符串:
if los == []:
return ''
您还有一个从未使用过的 lose 定义,您可以使用 not los 测试空列表。最后但同样重要的是,由于 return 提前退出函数,因此 else: 语句是可选的。
接下来,print_row() 也返回 None,因为您没有从它返回任何。简单地丢弃它的返回值:
def print_table(los):
if not los:
return ''
print_row(los[0])
return print_table(los[1:])
请注意,您永远不会使用 print_table 的返回值,因此您最好不要返回任何内容;简单地测试是否有任何要打印:
def print_table(los):
if los:
print_row(los[0])
print_table(los[1:])
现在您可以直接内联 print_row 函数(这只是一个单行代码):
def print_table(los):
if los:
print ', '.join(los[0])
print_table(los[1:])
这仍然是递归的; Python 在递归方面不是那么强大,但它可以很好地进行循环:
def print_table(los):
for sublist in los:
print ', '.join(sublist)
也可以简化为换行符:
def print_table(los):
print '\n'.join(', '.join(sublist) for sublist in los)
