使用Python递归打印Triforce ASCII艺术时空格渲染错误求解
问题定位
你的代码存在3处核心错误,导致输出和预期不符:
triangle函数逻辑完全错误:return '* '*n语句之后的递归代码永远无法执行,属于无效代码。同时当前实现生成的是*加空格连续拼接的字符串,不符合Triforce的图案规则——三角形每行仅两端为*,中间位置应为空格,且字符串末尾多余的空格会导致缩进计算错误。- 底部双三角形打印逻辑错误:使用
print(triangle(a), triangle(b))语法时,print函数会默认在两个参数之间插入1个空格,导致两个三角形的间距不符合预期。 - 顶部三角形初始缩进计算偏差:原代码传入的初始base值偏大,导致顶部图案整体右移,无法和底部图案对齐。
修正方案
我们保留递归实现的逻辑,重写triangle函数,同时调整打印逻辑和缩进参数:
def space_f(space): if space == 0: return print(" ", end = "") space_f(space - 1) def triangle(n): if n == 1: return '*' # 递归生成:两端为*,中间填充对应长度的空格 return '*' + ' '*(2*n -3) + '*' def top_triangle(n, current_line, base_indent): if current_line > n: return space_f(base_indent) print(triangle(current_line)) top_triangle(n, current_line + 1, base_indent - 1) def bottom_triangles(n, current_line): if current_line > n: return space_f(n - current_line) left = triangle(current_line) right = triangle(current_line) # 计算两个三角形中间的空格数 middle_space = 2*(n - current_line) + 1 print(left + ' '*middle_space + right) bottom_triangles(n, current_line + 1) def print_triforce(n): if n == 0: print(" ") return # 顶部三角形初始缩进为n top_triangle(n, 1, n) bottom_triangles(n, 1)
调用print_triforce(2)即可得到预期输出:
* * * * * * * * *
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

