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
相关产品推荐
相关产品推荐

