为了账号安全,请及时绑定邮箱和手机立即绑定

为什么第二个循环中的 i 比用户给定的输入少 1?

为什么第二个循环中的 i 比用户给定的输入少 1?

Go
蓝山帝景 2022-01-18 13:38:08
出于某种原因,循环中的第二个 i 比用户给定的输入小 1。我不知道我在哪里改变了它的价值我试图解决的一种方法是改变对于范围内的 i (int(i))到对于范围内的 i (int(i)+1)确实解决了问题,但不知道为什么需要它i = input()AliceShapeSequence = []BobShapeSequence = []for i in range (int(i)):        AliceShape = input()        AliceShapeSequence.append(AliceShape)    for i in range (int(i)):        BobShape = input()        BobShapeSequence.append(BobShape)    print(AliceShapeSequence)print(BobShapeSequence)除了两个列表都有 3 个值,但 AliceShapeSequence 有 3 个,BobShapeSequence 有 2 个(取决于我在这个例子中使用的输入 3)
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

这实际上是一个非常有趣的问题。让我们逐步了解这里发生的事情。

i = input()

假设您的用户输入3. 现在,正如预期的那样i3

for i in range (int(i)):

首先,range(int(i))被称为。当使用一个参数调用Pythonrange时,会创建一个从0(包括)到该参数(不包括)的范围。由于i3,这将创建一个包含值01和的范围2

现在,您开始迭代,使用迭代变量ii首先设置为0,然后运行代码块,1,运行代码块,然后2,最后运行代码块。

但是,有一个窍门。由于 Python 的作用域规则,您的迭代变量i实际上是与全局变量相同i的变量。因此,在迭代期间,您将全局 i值更新为0, then 1, then 2。所以当我们开始下一个循环时:

for i in range (int(i)):

range(int(i))is range(2),它创建了一个包含元素的范围,01不是你想要的。

要解决此问题,请将迭代变量更改为其他变量——也许j,正如另一个答案所暗示的那样。


查看完整回答
反对 回复 2022-01-18
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

for 循环中的 i 每次运行时都会更新。

range(5) // gives you 0-4

i 在循环的最后一个循环中设置为 4。使用不同的变量名。


查看完整回答
反对 回复 2022-01-18
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

该变量i是全局的,该模块中定义的任何 python 函数或类都可以访问该变量:


你的键值和你的输入变量是一样的scope。


因此,您输入3并且循环开始计数,0在循环i计数到2第一个循环之后,因此循环将从以下开始2:


i = input()

AliceShapeSequence = []

BobShapeSequence = []


for x in range (int(i)):

        AliceShape = input()

        AliceShapeSequence.append(AliceShape)


for x in range (int(i)):

        BobShape = input()

        BobShapeSequence.append(BobShape)


print(AliceShapeSequence)

print(BobShapeSequence)

只需将向上计数键更改为其他变量名就可以了。


为了便于理解,只需运行:


i = 3

AliceShapeSequence = []

BobShapeSequence = []


for i in range (int(i)):

        AliceShape = i

        AliceShapeSequence.append(AliceShape)

        print("first loop: i = {0} after {1} loop cycle".format(i, i+1))


for i in range (int(i)):

        BobShape = i

        BobShapeSequence.append(BobShape)

        print("second loop: i = {0} after {1} loop cycle".format(i, i+1))



print(AliceShapeSequence)

print(BobShapeSequence)


查看完整回答
反对 回复 2022-01-18
  • 3 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号