无需使用format实现数字右对齐:多行输出对齐异常的排查与修复
Python数字矩阵打印对齐错乱问题:原因与修复
问题描述
编写Python程序实现以下需求:
- 接收一个满足
-6 < n < 2的整数n - 将n到n+41的数字以6行7列格式打印,每行包含连续7个数字(第一行n到n+6,第二行n+7到n+13,以此类推)
运行当前代码后,出现单个数字对齐错乱的问题,示例输出如下:
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 32 33 34 35 36
37 38 39 40 41 42 43
当前代码:
n = int(input("Enter a number between -6 and 2:")) if n > 2: print("Invalid input! The value of 'n' should be between -6 and 2.") elif n <-6: print("Invalid input! The value of 'n' should be between -6 and 2.") else: for i in range(n,n+42,7): for j in range(i,i + 6): if -1<j<10: print(" " + str(j), end = " ") else: print(j, sep = " ",end= " ") print((i+6))
问题原因
- 最后一个数字未应用对齐规则:内层循环仅处理每行前6个数字,最后一个数字通过单独的
print(i+6)输出,没有添加前缀空格,导致格式和前面的数字不一致。 - 对齐逻辑不严谨:手动判断数字范围添加空格的方式,无法覆盖负数(比如n=-5时的负数数字),还容易因为单独处理元素出现格式漏洞。
- 循环范围设计冗余:将一行7个数字拆分为6个循环处理+1个单独打印,增加了出错概率。
修复方案
使用字符串格式化统一控制每个数字的显示宽度,同时调整循环范围一次性处理每行的7个数字,简化逻辑:
修正后的代码:
n = int(input("Enter a number between -6 and 2:")) # 合并输入校验条件,简化代码 if not (-6 < n < 2): print("Invalid input! The value of 'n' should be between -6 and 2.") else: # 外层循环控制每行起始数字,步长7 for i in range(n, n + 42, 7): # 内层循环遍历当前行的7个数字 for j in range(i, i + 7): # 使用格式化字符串,让每个数字占2个字符宽度,自动对齐 print(f"{j:2d}", end=" ") # 每行结束后换行 print()
修正后的输出(以n=2为例)
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
内容的提问来源于stack exchange,提问作者Shelby Labuschagne
相关产品推荐
相关产品推荐

