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




