首页 > 解决方案 > 为什么第二个循环中的 i 比用户给定的输入少 1?

问题描述

出于某种原因,循环中的第二个 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)

标签: pythonpython-3.x

解决方案


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

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,正如另一个答案所暗示的那样。


推荐阅读