You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中reversed(range)打印星号为何与普通range输出一致?

为什么reversed(range)没实现右对齐星号输出

现象复现

目标左对齐星号图案:

*
**
***
****

两段运行结果完全一致的测试代码:

  • 内层循环用reversed(range(5))的版本:
for i in range(5):
    for j in reversed(range(5)):
        if j < i:
            print('*', end='')
    print()
  • 内层循环直接用range(5)的版本:
for i in range(5):
    for j in range(5):
        if j < i:
            print('*', end='')
    print()

预期中reversed版本应该输出的右对齐图案:

*
   **
  ***
 ****

根本原因

两个代码输出一致、reversed没达到预期,核心是两个逻辑误区:

  1. 没有给非星号位置输出占位空格
    右对齐的本质是每行字符总长度固定,星号前的位置要打印空格占住位置,才能把星号“挤”到右边。现有代码逻辑里,只有满足j < i的时候才打印星号,不满足条件的时候什么字符都不输出——这些不触发打印的遍历步骤不会在终端留下任何痕迹,自然不会产生右对齐需要的左侧缩进。
  2. 判断条件只和数值大小有关,和遍历顺序无关,最终打印的星号总数完全一致
    不管j是按0、1、2、3、4的正序遍历,还是按4、3、2、1、0的倒序遍历,对于固定的i值,满足j < i的整数j的总数永远是i个:
    • i=0时,没有j满足j<0,打印0个星号
    • i=1时,只有j=0满足条件,打印1个星号
    • i=2时,j=0、j=1满足条件,打印2个星号
    • 以此类推,每行打印的星号数量和遍历顺序完全无关,最终输出自然一模一样。

修正方案

在内层循环里,给不满足星号打印条件的位置输出空格占位即可:

for i in range(5):
    for j in reversed(range(5)):
        if j < i:
            print('*', end='')
        else:
            print(' ', end='')
    print()

运行后就能得到预期的右对齐星号图案。

内容的提问来源于stack exchange,提问作者dwightcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:12:23