Python打印指定对称数字图案输出不符合预期问题求助
问题描述
需要打印如下对称数字图案,要求相邻数字间仅一个空格,每行末尾无空格:
1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1
以下是原实现代码,但运行后每行末尾存在空格,不符合要求:
for i in range(1, 6): # Print numbers in increasing order for j in range(1, i + 1): print(j, end=' ') # Print numbers in decreasing order for j in range(i - 1, 0, -1): print(j, end=' ') # Move to the next line print()
运行输出(每行末尾带空格):
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1
修正方案
方法1:构造完整数字列表后用空格连接
先生成每行的完整数字序列,再通过join方法直接拼接成符合要求的字符串,一次性打印:
for i in range(1, 6): # 拼接递增和递减部分的数字列表 num_list = list(range(1, i+1)) + list(range(i-1, 0, -1)) # 将数字转为字符串后用空格连接 print(' '.join(map(str, num_list)))
方法2:字符串拼接后统一输出
分别生成递增和递减部分的字符串,再根据情况拼接,避免多余空格:
for i in range(1, 6): # 生成递增序列的字符串 increasing_str = ' '.join(map(str, range(1, i+1))) # 生成递减序列的字符串 decreasing_str = ' '.join(map(str, range(i-1, 0, -1))) # 仅当递减序列非空时,在两部分之间加空格 full_line = f"{increasing_str} {decreasing_str}" if decreasing_str else increasing_str print(full_line)
方法3:控制print的end参数
通过判断当前元素是否为序列末尾,决定是否添加空格,精准控制输出:
for i in range(1, 6): # 打印递增部分 for j in range(1, i + 1): print(j, end=' ' if j != i else '') # 打印递减部分 for j in range(i - 1, 0, -1): print(f' {j}', end='') # 换行 print()
内容的提问来源于stack exchange,提问作者Parv Naithani
相关产品推荐
相关产品推荐

