如何实现中心含两行相同星号的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()
关键修改说明
- 调整循环范围:
- 上半部分循环改为
range(1, rows+1),生成1到rows的整数,共rows行,最后一行是星号最多的中心行。 - 下半部分循环保持
range(rows, 0, -1),生成rows到1的整数,共rows行,第一行与上半最后一行星号数量一致,实现中心两行对称。
- 上半部分循环改为
- 修复缩进错误:修正原代码内层循环的缩进层级,确保所有逻辑归属于对应外层循环。
- 优化输入验证:将无效输入判断提前,避免无效输入执行后续循环。
内容的提问来源于stack exchange,提问作者coder J
相关产品推荐
相关产品推荐

