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

Python基础循环代码疑问:两种实现方式的差异解析

两段Python循环代码的输出差异解析

问题背景

任务要求从标准输入读取整数n,打印所有小于n的非负整数的平方值(即0², 1², ..., (n-1)²)。以下两段代码执行结果不同,我们来拆解背后的逻辑。

初始代码(倒序输出)

n = int(input())

for i in range(n):
    print(n * n)
    n = n - 1

执行逻辑(以输入n=3为例)

  1. 初始输入n=3,range(n)在循环启动前就生成了序列[0,1,2],因此循环会执行3次。
  2. 第一次循环:i=0,此时外部变量n仍为3,打印3*3=9,随后n被修改为2。
  3. 第二次循环:i=1,外部变量n为2,打印2*2=4,随后n被修改为1。
  4. 第三次循环:i=2,外部变量n为1,打印1*1=1,随后n被修改为0。
  5. 最终输出:9、4、1(倒序)。

核心问题:这段代码完全没用到循环变量i,反而不断修改外部的n,打印的是递减中的n的平方,而非0到n-1的平方。

修正后代码(正序输出)

n = int(input())

for n in range(n):
    print(n * n)
    n = n - 1

执行逻辑(以输入n=3为例)

  1. 初始输入n=3,range(n)同样在循环启动前生成序列[0,1,2],循环执行3次。
  2. 第一次循环:循环变量n被赋值为序列的第一个元素0,打印0*0=0,随后将n修改为-1,但这个修改不会影响下一次迭代。
  3. 第二次循环:循环变量n会被强制赋值为序列的下一个元素1,打印1*1=1,随后修改为0,同样不影响后续迭代。
  4. 第三次循环:循环变量n被赋值为序列的第三个元素2,打印2*2=4,随后修改为1。
  5. 最终输出:0、1、4(符合预期)。

关键逻辑:Python的for循环会预先生成迭代序列,每次迭代时循环变量会被序列的下一个值覆盖,因此内部修改循环变量n不会改变迭代的顺序。这段代码本质上是用n作为循环变量,直接取range序列中的值计算平方,虽然内部有n = n -1的操作,但完全不影响循环的迭代流程。

更优写法

为了避免变量覆盖导致的混淆,更清晰的写法是直接使用独立的循环变量:

n = int(input())
for i in range(n):
    print(i * i)

这段代码直接遍历0到n-1的整数,打印每个数的平方,逻辑清晰且不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:26