嵌套菱形图案生成Python代码错误排查与修正请求
解决嵌套菱形输出问题
你的问题核心是每个菱形单独输出,没有在同一画布上叠加,导致它们变成了独立的图形,而非嵌套效果。要实现嵌套,得先创建一个统一的"画布",把所有菱形的星号都画在这个画布上,最后一次性输出。
修正后的代码
def draw_nested_diamonds(sizes): # 计算最大菱形的高度,确定画布尺寸 max_size = max(sizes) height = 2 * max_size - 1 width = 2 * max_size - 1 # 初始化画布,所有位置先设为空格 canvas = [[' ' for _ in range(width)] for _ in range(height)] center = max_size - 1 # 画布中心坐标 for size in sizes: # 遍历菱形的每一行 for i in range(2 * size - 1): # 计算当前行的星号起始和结束位置 if i < size: stars_start = center - i stars_end = center + i else: stars_start = center - (2 * size - 2 - i) stars_end = center + (2 * size - 2 - i) # 在画布上标记星号 for j in range(stars_start, stars_end + 1): canvas[i][j] = '*' # 打印画布 for row in canvas: print(''.join(row)) # 接收用户输入 n = int(input("请输入菱形数量: ")) sizes = [int(input(f"请输入第{i+1}个菱形的边长: ")) for i in range(n)] draw_nested_diamonds(sizes)
代码说明
- 画布初始化:根据最大菱形的尺寸创建二维列表,初始全为空格,这是所有菱形的绘制载体。
- 中心定位:所有菱形都以画布中心为对称点绘制,保证嵌套的对齐效果。
- 逐菱形绘制:对每个菱形,计算每一行需要画星号的区间,把对应位置的空格替换成星号——后画的小菱形会覆盖大菱形的中间部分,自然形成嵌套效果。
- 统一输出:所有菱形绘制完成后,逐行打印画布内容,得到完整的嵌套图案。
当输入边长6、3、1时,输出就是你预期的多层嵌套菱形,而不是三个独立的图形。
内容的提问来源于stack exchange,提问作者Vincent Iyegbuye
相关产品推荐
相关产品推荐

