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

如何实现中心含两行相同星号的ASCII双菱形?

实现上下各N行的对称双菱形(中心两行星号数量相同)

问题描述

输入数字代表菱形上半部分(含最长中心行)的行数,例如输入9时上半部分需包含9行,但当前代码的下半部分仅生成8行。需要调整代码,让下半部分也生成9行,使中心位置存在两行星号数量完全相同的行,尝试插入该行未成功,求实现方法。

现有代码

rows = int(input("Please enter the amount of rows in half of the diamond:"))

#Upper triangles 1 and 2
for i in range(rows):
#spaces for triangle 1
for s in range(rows - i) :
    print(" ", end="")
#stars
for stars in range((i * 2) - 1):
    print("*", end="")
    
 #space to separate triangle 1 and 2
   for s in range(rows-i+1) :
      print(" ", end="")

   #spaces for triangle 2
    for s in range (i,rows) :
       print(end=" ")
      #stars
      for stars in range((i * 2) - 1):
        print("*", end="")
        print()

#new for loop under middle line: stars, how many spaces? 

#Lower triangles 3 and 4
  for i in range(rows,0,-1):
   #spaces for triangle 3
   for s in range(rows - i) :
     print(" ", end="")
    
#stars
for stars in range((i * 2) - 1):
    print("*", end="")

 #space to separate triangle 3 and 4
   for s in range(rows-i+1) :
     print(" ", end="")

#spaces for triangle 4
for s in range(rows - i) :
    print(" ", end="")
#stars
for stars in range((i * 2) - 1):
    print("*", end="")
 print()


if rows<=0:
    print("Invalid.")

解决方案及修正代码

原代码核心问题是循环范围错误和缩进混乱,导致上下行数不对称、逻辑无法正确执行。以下是修正后的代码:

rows = int(input("请输入菱形半部分的行数:"))

if rows <= 0:
    print("输入无效,请输入正整数。")
else:
    # 上半部分(含第一行中心行):共rows行
    for i in range(1, rows + 1):
        # 左侧三角形空格
        for s in range(rows - i):
            print(" ", end="")
        # 左侧三角形星号
        for stars in range(i * 2 - 1):
            print("*", end="")
        # 双三角分隔空格
        for s in range(rows - i + 1):
            print(" ", end="")
        # 右侧三角形空格
        for s in range(rows - i):
            print(" ", end="")
        # 右侧三角形星号
        for stars in range(i * 2 - 1):
            print("*", end="")
        print()

    # 下半部分(含第二行中心行):共rows行
    for i in range(rows, 0, -1):
        # 左侧三角形空格
        for s in range(rows - i):
            print(" ", end="")
        # 左侧三角形星号
        for stars in range(i * 2 - 1):
            print("*", end="")
        # 双三角分隔空格
        for s in range(rows - i + 1):
            print(" ", end="")
        # 右侧三角形空格
        for s in range(rows - i):
            print(" ", end="")
        # 右侧三角形星号
        for stars in range(i * 2 - 1):
            print("*", end="")
        print()

关键修改说明

  1. 调整循环范围:
    • 上半部分循环改为range(1, rows+1),生成1到rows的整数,共rows行,最后一行是星号最多的中心行。
    • 下半部分循环保持range(rows, 0, -1),生成rows到1的整数,共rows行,第一行与上半最后一行星号数量一致,实现中心两行对称。
  2. 修复缩进错误:修正原代码内层循环的缩进层级,确保所有逻辑归属于对应外层循环。
  3. 优化输入验证:将无效输入判断提前,避免无效输入执行后续循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:20:28