Python打印菱形:输入偶数行数输出奇数行数的简易修复咨询
修复偶数行输入时菱形打印行数不符的问题
问题根源在于多数基础菱形打印代码是针对奇数行数设计的:上半部分包含中间行,下半部分比上半少一行,总行数为奇数。当输入偶数行数时,代码仍沿用奇数逻辑,导致输出行数变为奇数。以下是无需大幅修改代码的修复方案:
假设你的原代码(奇数行正常,偶数行输出奇数行)
rows = int(input("Enter number of rows: ")) # 原错误:统一按奇数行计算上下部分 half = (rows + 1) // 2 # 上半部分(含中间行) for i in range(half): print(' ' * (half - i - 1) + '*' * (2 * i + 1)) # 下半部分(不含中间行) for i in range(half - 2, -1, -1): print(' ' * (half - i - 1) + '*' * (2 * i + 1))
修复方案(仅修改3处,无需重构)
根据输入行数的奇偶,分别计算上下部分的循环次数:
rows = int(input("Enter number of rows: ")) # 1. 重新计算上半部分行数:偶数行取rows//2,奇数行取(rows+1)//2 upper = rows // 2 if rows % 2 == 0 else (rows + 1) // 2 # 2. 确定下半部分循环起始值:偶数行从upper-1开始,奇数行从upper-2开始 start_idx = upper - 1 if rows % 2 == 0 else upper - 2 # 上半部分循环逻辑不变 for i in range(upper): print(' ' * (upper - i - 1) + '*' * (2 * i + 1)) # 3. 修改下半部分循环的起始索引 for i in range(start_idx, -1, -1): print(' ' * (upper - i - 1) + '*' * (2 * i + 1))
效果验证
- 输入4(偶数):输出4行菱形
* *** *** * - 输入5(奇数):输出5行标准菱形
* *** ***** *** *
简洁版修复(针对上下对称循环的原代码)
如果你的原代码是上下都循环n次导致总行数异常,比如:
n = int(input()) for i in range(n): print(' '*(n-i-1) + '*'*(2*i+1)) for i in range(n-1, -1, -1): print(' '*(n-i-1) + '*'*(2*i+1))
只需调整循环的基准值和起始索引:
n = int(input()) half = n // 2 if n % 2 == 0 else (n + 1) // 2 for i in range(half): print(' '*(half - i -1) + '*'*(2*i+1)) # 偶数行时下半循环从half-1开始,奇数行从half-2开始 for i in range(half - (1 if n%2 else 0), -1, -1): print(' '*(half - i -1) + '*'*(2*i+1))
内容的提问来源于stack exchange,提问作者Sultan Al samman
相关产品推荐
相关产品推荐

