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

Python空心蝴蝶星型图案代码异常:输出不符预期求排查

空心蝴蝶星型图案Python代码错误排查

用户编写了生成空心蝴蝶星型图案的Python代码,但未得到预期结果,代码及运行输出如下:

原代码

# 注:原代码第一行的`type`为冗余语法,已移除
n=int(input('enter number of rows the double of which you want in your butterfly:'))
a=input('enter the symbol you want to make your butter-fly with:')
for i in range(n):
    for j in range(i+1):
        if j==0 or i==n-1 or j==i:
            print(a,end=" ")
        else:
            print(' ',end=" ")
    for j in range(i+1):
        print("",end="")
    for j in range(i,n-1):
        print(" ", end='')
    for j in range(i,n):
        print("",end="")
    for j in range(i,n):
        print(" ",end="")
    for j in range(i + 1):
        if i==n-1 or j==n-1 or i+j==n-1:
            print(a, end=" ")
        else:
            print(' ', end=" ")
    print()
for i in range(n):
    for j in range(i,n):
        if i==0 or j==i or j==n-1:
            print(a,end=" ")
        else:
            print(' ', end=" ")
    for j in range(i, n):
        print("", end="")
    for j in range(i + 1 - 1):
        print(" ", end="")
    for j in range(i + 1):
        print("", end="")
    for j in range(i+1):
        print(" ",end="")
    for j in range(i,n):
        if i==0 or j==n-1 or i==j:
            print(a, end=" ")
        else:
            print(' ', end=" ")
    print()

原输出

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

错误分析

  • 条件判断逻辑错误:右侧翅膀的判断条件j==n-1完全不成立,因为右侧翅膀的循环范围是range(i+1),j的最大值为i,当i < n-1时j不可能等于n-1,导致前几行右侧翅膀显示缺失。
  • 空格控制冗余混乱:多个空循环(print("",end=""))完全无效,中间空格的计算逻辑杂乱,导致左右翅膀的间距不一致。
  • 上下半部分重复输出:原代码中第5、6行输出完全重复,原因是下半部分的循环起始逻辑错误,没有从倒数第二行开始反向遍历。

修正后的代码

n = int(input('输入蝴蝶的半行数(最终总行数为2*n):'))
symbol = input('输入图案使用的符号:')

# 打印上半部分
for i in range(n):
    # 左侧翅膀
    for j in range(i + 1):
        if j == 0 or j == i or i == n - 1:
            print(symbol, end=' ')
        else:
            print(' ', end=' ')
    # 中间空格:每行减少2个,保证对称
    middle_spaces = 2 * (n - 1 - i)
    print(' ' * middle_spaces, end='')
    # 右侧翅膀:和左侧翅膀逻辑一致,保证对称
    for j in range(i + 1):
        if j == 0 or j == i or i == n - 1:
            print(symbol, end=' ')
        else:
            print(' ', end=' ')
    print()

# 打印下半部分:从倒数第二行反向遍历到第一行
for i in range(n-2, -1, -1):
    # 左侧翅膀
    for j in range(i + 1):
        if j == 0 or j == i or i == n - 1:
            print(symbol, end=' ')
        else:
            print(' ', end=' ')
    # 中间空格
    middle_spaces = 2 * (n - 1 - i)
    print(' ' * middle_spaces, end='')
    # 右侧翅膀
    for j in range(i + 1):
        if j == 0 or j == i or i == n - 1:
            print(symbol, end=' ')
        else:
            print(' ', end=' ')
    print()

修正后输出示例(n=5,symbol='*')

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:13:21