
本文讲解如何通过手动添加空格的方式,将整数序列以6行7列的网格形式右对齐输出,重点解决单数字与双数字混排时因宽度不一致导致的列错位问题,并提供可直接运行的修正代码与关键逻辑说明。
本文讲解如何通过手动添加空格的方式,将整数序列以6行7列的网格形式右对齐输出,重点解决单数字与双数字混排时因宽度不一致导致的列错位问题,并提供可直接运行的修正代码与关键逻辑说明。
在打印数字网格时,若希望所有数字“右对齐”并保持列宽统一(例如每列固定占2个字符),关键在于:每个数字输出前,需根据其位数补足前置空格,使最终显示宽度一致。原代码存在两个核心问题:
- 内层循环只迭代6次(range(i, i+6)),但题目明确要求每行7个数字(n 到 n+41 共42个数,42 ÷ 7 = 6行),因此应遍历 i 到 i+6(含)共7个数,即 range(i, i+7);
- 最后一列未统一处理:原代码在内层循环后单独 print(i+6),导致该数字未参与空格逻辑,且破坏了每行7数的结构;正确做法是让所有7个数字都在内层循环中统一格式化输出,最后用 print('') 换行。
此外,原条件 -1 所有绝对值小于10的一位数(含负一位数如 -9 到 9)均需前置一个空格,使其总宽度为2;而两位及以上数字(如 10, -10)本身已占2+字符,无需额外补空格——但注意:-10 实际占3字符,会导致列宽不均。因此更鲁棒的做法是按最大可能宽度(如3)统一处理。
不过,题目限定 n ∈ (-6, 2),故最小值为 -5,最大末值为 n+41 统一按2字符宽度右对齐即可。此时只需对 j = 0 的非负个位数补空格;但负数(如 -5)已是2字符,无需处理。然而,-1、-2 等也是2字符,而 0–9 是1字符 → 所以只需对 0
以下是修正后的完整代码:
n = int(input("Enter a number between -6 and 2: "))
if n > 2 or n <p>✅ <strong>关键改进说明:</strong> </p>
- 使用 range(i, i+7) 确保每行7个数字;
- 将格式化结果暂存于 row 列表,避免 end=" " 带来的尾部空格冗余;
- 0
- print(" ".join(row)) 替代嵌套 print(..., end=" "),逻辑更清晰、不易出错。
? 注意事项:
- 此方案不依赖 str.format() 或 f-string,完全通过字符串拼接实现右对齐;
- 若未来需支持更宽数值(如三位数),建议改用 str(j).rjust(3) 或统一计算最大宽度后动态补空格;
- 输入校验中 elif n
通过以上调整,输出将严格对齐,例如输入 n = 2 时,首行变为:
2 3 4 5 6 7 8(每个数字独占2字符位置,间隔1空格),后续各行自然对齐。










