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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:45:18