You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:15:04