python - 为什么第二个循环中的 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)
解决方案
这实际上是一个非常有趣的问题。让我们逐步了解这里发生的事情。
i = input()
假设您的用户输入3
. 现在,正如预期的那样i
。3
for i in range (int(i)):
首先,range(int(i))
被称为。当使用一个参数调用Pythonrange
时,会创建一个从0
(包括)到该参数(不包括)的范围。由于i
是3
,这将创建一个包含值0
、1
和的范围2
。
现在,您开始迭代,使用迭代变量i
。i
首先设置为0
,然后运行代码块,1
,运行代码块,然后2
,最后运行代码块。
但是,有一个窍门。由于 Python 的作用域规则,您的迭代变量i
实际上是与全局变量相同i
的变量。因此,在迭代期间,您将全局 i
值更新为0
, then 1
, then 2
。所以当我们开始下一个循环时:
for i in range (int(i)):
range(int(i))
is range(2)
,它创建了一个包含元素的范围,0
而1
不是你想要的。
要解决此问题,请将迭代变量更改为其他变量——也许j
,正如另一个答案所暗示的那样。
推荐阅读
- php - Laravel 中带有 ID 和 Slug 的 URL 的路径函数
- python - 在python中改变海龟的颜色
- email - 域名转移后邮件崩溃
- python - 如何将 torchvision.datasets.ImageFolder 加载到 google colab ram
- ruby-on-rails - 如何在 Rails ActiveRecord 中返回生成的列?
- python - Python + 破折号 + 引导
- python - 抓取编码错误的 html
- vue.js - 在 HTML 中循环对象时,我需要帮助在 Vuejs2 中调用 watcher
- r - 将 csv 导入 R,提取多边形并使用 googlePolylines 包对其进行解码
- excel - VBA 自动化不适用于新的 IE 选项卡