Python递归实现星号三角形遇TypeError错误求助
解决递归实现星号三角形的TypeError问题
我来帮你排查这个问题~你遇到的TypeError: must be str, not NoneType是因为递归的终止条件返回了None,导致字符串拼接失败。
错误原因分析
当n == 0时,你的draw_triangle函数只写了return但没有返回有效字符串,Python中这种情况默认返回None。而在else分支里,你把当前行的字符串和draw_triangle(n-1)的返回值拼接,当递归到n=0时,就变成了字符串 + None,这自然会触发类型不匹配的错误。
修复后的代码
只需要把终止条件的返回值改成空字符串"",就能解决这个问题:
def main(): num = int(input("Enter an integer: ")) triangle = draw_triangle(num) print(triangle) def draw_triangle(n): if n == 0: return "" # 返回空字符串而非None else: return ("*" * n + '\n') + draw_triangle(n - 1) main()
运行这段代码,输入3的话会输出从上到下递减的三角形:
*** ** *
拓展:实现递增的正三角形
如果你想要的是从上到下从1个星号到n个的正三角形,只需要调整递归拼接的顺序,先递归再拼接当前行:
def draw_triangle(n): if n == 0: return "" else: return draw_triangle(n - 1) + ("*" * n + '\n')
输入3时输出:
* ** ***
内容的提问来源于stack exchange,提问作者Connor Burleson
相关产品推荐
相关产品推荐

