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

打印空心菱形:为何Python函数生成的菱形缺失中间部分?

为何Python空心菱形函数缺失中间部分?

原函数代码

def hollow_diamond(n):
    # Upper half of the diamond
    for i in range(n):
        
        if i == 0 or i == n - 1:
            print(" " * ((n-i)+1) + "*" )
        elif i == 1:
            print(" " * ((n-i)+1) + "***" + " " )
        elif i == (n+1):
            print("**" + " " * ((2*i+1) - 2) + "**" )
        else:
            print(" " * (n-i) + "**" + " " * ((2*i+1) - 2) + "**" )
               
    # Lower half of the diamond
    for i in range(n - 2, -1, -1):
      
        if i == 0 or i == n - 1:
            print(" " * ((n-i)+1) + "*" * (2*i+1))
        elif i == 1:
            print(" " * ((n-i)+1) + "***" + " " )
        else:
            print(" " * (n-i) + "**" + " " * ((2*i+1) - 2) + "**" + " ")

实际运行结果

hollow_diamond(7)
print()  # Print a newline for better readability
hollow_diamond(3)

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

    *
   *** 
  *
   *** 
    *

预期输出

>>> hollow_diamond(7)
      *
     ***
    ** **
   **   **
  **     **
 **       **
**         **
 **       **
  **     **
   **   **
    ** **
     ***
      *

>>> hollow_diamond(3)
  *
 ***
** **
 ***
  *

问题分析

导致菱形中间部分缺失、格式混乱的核心原因如下:

  1. 上半部分中间行逻辑错误
    上半部分循环for i in range(n)覆盖了从0到n-1的所有值,但代码错误地将i == n-1(也就是菱形最宽的中间行)和i==0归为同一分支,直接输出单星号,完全跳过了中间空心行的生成逻辑。比如n=7时,i=6本应生成** **,却被错误输出成了 *,这是中间部分缺失的直接原因。

  2. 无效条件分支
    代码中elif i == (n+1)的分支永远不会触发,因为i的取值范围是0到n-1,n+1远大于i的最大值,这个分支属于冗余代码,没有任何作用。

  3. 不必要的特殊分支(i=1)
    单独为i=1写分支完全多余,不仅破坏了逻辑一致性,还多输出了一个空格,导致该行格式错位(比如n=7时i=1的输出多了末尾空格)。

  4. 空格数计算逻辑混乱
    不同分支的空格数计算规则不一致:有的用(n-i)+1,有的用n-i,导致各行的缩进不对齐,进一步加剧了格式混乱。

  5. 下半部分循环的无效条件
    下半部分循环是range(n-2, -1, -1),i的最大值是n-2,所以i == n-1的条件永远无法满足,属于无效判断;同时i=0分支的空格数计算错误,导致底部单星号的缩进不对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:40:08