Python使用while循环实现菱形图案:修正半菱形代码问题
修正后的Python菱形打印代码(仅用while循环)
你的代码上半部分逻辑正确,但下半部分的星号数量计算和变量处理有误,导致无法正确输出下半菱形。以下是修正后的完整代码:
n = int(input()) h = 1 k = 1 rows_upper = (n + 1) // 2 # 打印上半部分(包括中间行) while h <= rows_upper: b = 1 # 打印前置空格 while b <= rows_upper - h: print(' ', end='') b += 1 j = 1 # 打印星号 while j <= k: print('*', end='') j += 1 k += 2 print() h += 1 # 打印下半部分 rows_lower = n // 2 # 从中间行的前一行星号数开始递减 k = k - 4 h = 1 while h <= rows_lower: b = 1 # 打印前置空格 while b <= h: print(' ', end='') b += 1 j = 1 # 打印星号 while j <= k: print('*', end='') j += 1 k -= 2 print() h += 1
关键修正点:
- 用整数除法
//替代浮点数除法,避免因浮点数导致的循环判断误差 - 单独计算上半部分和下半部分的行数,逻辑更清晰
- 下半部分的星号数从
k-4开始(上半部分最后一次循环后k多增加了2,需要回退两次),每次递减2,保证星号数量正确 - 下半部分的空格数从1开始递增,与上半部分的空格数递减逻辑对应
测试输入5时,输出如下:
* *** ***** *** *
内容的提问来源于stack exchange,提问作者Nabeeha Siddiqui
相关产品推荐
相关产品推荐

