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

为何代码无法输出正确的金字塔三角形?请排查错误原因

金字塔三角形打印代码错误排查

原代码

def triangle(rows):
    num = rows
    
    for i in range(1 , rows +1 ):
        if i == num:
          print((x*2 - 1)* "*")
        else :
          print(" ", end= "")
      num -= 1
rows = int(input("How many rows of triangle?\n"))
triangle(rows)

实际输出

*
   ***
   *****
   *******
   *********

预期输出

*
   ***
  *****
 *******
*********

错误分析与原因

  1. 未定义变量x:代码中使用了x但未赋值,属于语法错误。能运行说明你可能在代码外提前定义了x,但此处逻辑上应该用当前循环的行号i计算星号数量(每行星号数应为2*i-1)。

  2. 核心逻辑错误:原代码试图通过i == num的判断来打印星号行,否则仅打印单个空格,完全偏离了金字塔的构建逻辑。正确逻辑应为每一行先打印对应数量的前缀空格,再打印对应数量的星号,而非循环中只做“打印空格”或“打印星号”二选一的操作。

  3. 缩进错误:num -= 1的缩进层级错误,它应与for循环同级,但原代码的缩进错误会导致循环逻辑混乱,无法正确控制num的递减节奏,最终导致前缀空格无法逐行减少,出现星号行对齐错误。

以上问题共同导致实际输出的前缀空格未按预期逐行递减,星号行左侧对齐位置几乎一致,无法形成标准的金字塔尖顶效果。

修正后的代码

def triangle(rows):
    for i in range(1, rows + 1):
        # 打印当前行的前缀空格:总行数 - 当前行号
        print(" " * (rows - i), end="")
        # 打印当前行的星号:2*当前行号 - 1
        print("*" * (2 * i - 1))

rows = int(input("How many rows of triangle?\n"))
triangle(rows)

这段代码会为每一行生成rows - i个前缀空格(逐行递减),再生成2*i-1个星号(逐行递增),完全符合预期的金字塔格式。

内容的提问来源于stack exchange,提问作者Suraj Chand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:35:22