为何代码无法输出正确的金字塔三角形?请排查错误原因
金字塔三角形打印代码错误排查
原代码
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)
实际输出
* *** ***** ******* *********
预期输出
* *** ***** ******* *********
错误分析与原因
未定义变量
x:代码中使用了x但未赋值,属于语法错误。能运行说明你可能在代码外提前定义了x,但此处逻辑上应该用当前循环的行号i计算星号数量(每行星号数应为2*i-1)。核心逻辑错误:原代码试图通过
i == num的判断来打印星号行,否则仅打印单个空格,完全偏离了金字塔的构建逻辑。正确逻辑应为每一行先打印对应数量的前缀空格,再打印对应数量的星号,而非循环中只做“打印空格”或“打印星号”二选一的操作。缩进错误:
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
相关产品推荐
相关产品推荐

