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
相关产品推荐
相关产品推荐

