You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python 3实现ASCII艺术字母Y遇难题:无法移除多余星号

嘿,我懂你现在的烦恼——想做出标准的Y形ASCII艺术,结果右下角多了两个星号,硬生生变成X了对吧?咱们来搞定这个问题!

首先,核心问题在于Y的结构和X不一样:Y的上半部分是两条斜线向中间汇聚,下半部分只有中间一条竖线,而X是从头到尾两条斜线。所以你需要区分**上半段(两边有星号)下半段(只有中间星号)**的逻辑,别让下半段的右边再出现星号。

假设你要生成高度为5的Y,先看正确的输出应该是这样的:

*       *
 *     *
  *   *
    *
    *

下面给你两种实现方式,按需选择:

1. 动态生成(适配不同高度)

这种方法可以灵活调整Y的高度,逻辑清晰,容易修改:

height = 5
width = 2 * height - 1  # 计算总宽度,保证Y居中
middle_pos = width // 2  # 中间位置的索引

for row in range(height):
    # 初始化每行都是空格
    line = [' '] * width
    
    # 上半段:前(height-2)行,两边放置星号
    if row < height - 2:
        line[row] = '*'
        line[width - 1 - row] = '*'
    # 下半段:剩下的行,只在中间放星号
    else:
        line[middle_pos] = '*'
    
    # 把列表转成字符串打印
    print(''.join(line))

2. 固定高度直接定义(简单直观)

如果只需要高度为5的Y,直接写死每行的内容更简单:

y_art = [
    "*       *",
    " *     *",
    "  *   *",
    "    *",
    "    *"
]

for line in y_art:
    print(line)

为什么你之前的代码会有多余星号?

大概率是你没区分上下段的逻辑,下半段的行也错误地保留了右侧的星号。比如如果你的代码是循环每行都在左右两边加星号,那下半段自然会多出右下角的星号——只要给下半段单独做判断,只保留中间的星号就解决了。

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

火山引擎 最新活动