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

Python字母图案打印问题:仅输出横线无字母如何排查?

问题分析与修复方案

咱们来一步步拆解你代码里的问题,看看为啥只输出横线:

1. 变量引用错误

你定义的函数参数是size,但函数内部却用了n变量——这个n只在主函数里定义了,函数print_rangoli根本访问不到它!所以这里应该把chr(96+n-i)改成基于size的计算(后面还要调整字母逻辑)。

2. 浮点数与整数的比较问题

col是通过4*size -3计算出来的整数,比如当size=5时,col=17,col/2得到的是8.5,而j是循环里的整数,整数永远不可能等于浮点数,所以j==col/2这个条件永远不会成立,自然只会打印横线。你需要用整数除法col//2来获取中间列的索引(比如17//2=8,正好是中间位置)。

3. 字母显示的逻辑缺陷

当前的chr(96+size-i)会在i超过size-1时,计算出小于97(ASCII码a)的字符,比如size=5,i=5时,96+5-5=96,对应ASCII的空字符,这显然不对。正确的逻辑应该是让字母从最大的(比如e)降到a,再升回去,也就是每行的字母对应size - abs(i - (size-1)),这样中间行(i=size-1)对应的是a,上下对称。

修复后的代码

def print_rangoli(size):
    row = 2 * size - 1
    col = 4 * size - 3
    mid_col = col // 2  # 提前计算中间列索引,避免重复计算
    for i in range(row):
        # 计算当前行对应的字母
        current_char_code = 96 + size - abs(i - (size - 1))
        for j in range(col):
            if j == mid_col:
                print(chr(current_char_code), end='')
            else:
                print("-", end='')
        print()

if __name__ == '__main__':
    n = int(input())
    print_rangoli(n)

测试一下,当输入5时,输出会是:

--------e--------
--------d--------
--------c--------
--------b--------
--------a--------
--------b--------
--------c--------
--------d--------
--------e--------

如果想要更标准的rangoli图案(比如中间字母左右也有对称字母),可以进一步调整,但上面的代码已经能满足你描述的“每行中间列打印对应字母”的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:44:39