如何实现指定字符串对称图案?解决末行字符重复问题
解决Python对称图案末行字符重复问题
需求是接收用户输入的字符串,生成指定的对称图案,但当前尝试的代码存在问题:最后一行会出现字符重复(比如输入包含R的字符串时,末行的R会打印两次),不符合图案要求。
尝试的问题代码如下:
S=input("Enter a String! ") for i in range(len(S)): print(" "*i,end="") print(S[i],end="") print(" "*2*(len(S)-(i+1)),end="") print(S[i])
问题原因
这段代码的逻辑是每一行都固定打印两次当前字符S[i],但对称图案的最后一行(对应字符串的最后一个字符)只需要显示单个字符,不需要重复。当循环到最后一个索引i = len(S)-1时,中间空格的长度为2*(len(S)-(i+1)) = 0,所以会直接连续打印两次S[i],导致重复。
修正方案
通过判断当前是否为最后一行,调整打印内容:非最后一行时打印字符+中间空格+字符,最后一行只打印单个字符。
修正后的代码:
S = input("Enter a String! ") str_length = len(S) for i in range(str_length): # 打印前置缩进空格 print(" " * i, end="") # 打印当前字符 print(S[i], end="") # 非最后一行时,打印中间空格和对称字符 if i != str_length - 1: print(" " * 2 * (str_length - i - 1), end="") print(S[i]) else: # 最后一行仅打印单个字符 print()
代码说明
- 前置空格:每一行的缩进空格数等于当前索引
i,实现图案的左对齐递进效果。 - 字符打印:非最后一行时,在打印当前字符后,添加对应长度的中间空格,再打印一次当前字符,形成对称结构;最后一行直接打印单个字符,避免重复。
内容的提问来源于stack exchange,提问作者Piyush Baweja
相关产品推荐
相关产品推荐

