我正在尝试做一些简单的事情,比如改变我迭代的变量(i),但我在Python和C中都有不同的行为。
在Python中,
for i in range(10):
print i,
if i == 2:
i = 4;
我得到0 1 2 3 4 5 6 7 8 9
,但在C:
int i;
for (i = 0; i < 10; i++) {
printf("%d", i);
if (i == 2)
i = 4;
}
我得到01256789
(请注意,数字3和4不会出现,如预期的那样)。
这里发生了什么?
答案 0 :(得分:14)
你没有按照自己的想法行事 例如:
for i in range(10):
无论如何,都会不断将i
设置为范围0-10
中的下一个元素。
如果你想在python中做同等的事情,你会这样做:
i = 0
while i < 10:
print(i)
if i == 2:
i = 4
else: # these line are
i += 1 # the correct way
i += 1 # note that this is wrong if you want 1,2,4,5,6,7,8,9
如果您要将其转换为C
,则必须记住i++
循环中的for
将始终添加到i
。
答案 1 :(得分:8)
函数range()
创建一个列表。
例如,range(10)
将创建以下列表:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
。
当您说for i in range(10)
时,首先会生成所有列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
,然后将i
按顺序分配该列表中的所有值。
如果更改i
的值并不重要,因为在下一次迭代中,它将被分配列表中的下一个元素。
i
的值递增,然后与最大允许值(在本例中为9)进行比较,如果它更大,则循环结束。
答案 2 :(得分:2)
当您致电range(10)
时,您会创建一个可迭代的列表[0,1,2,3,4,5,6,7,8,9]
。
for循环只需在每个回合中从列表中选出一个数字,无论你是否更改了i
的值。
答案 3 :(得分:1)
Python为您提供了range(10)
中的元素,一个接一个。 C反复增加变量。
他们两个都不关心你对循环中的变量做了什么,但由于这两种语言结构做的事情略有不同,在某些情况下结果是不同的。
答案 4 :(得分:0)
这是因为在python中使用range()函数时。你的变量我将通过范围内的值。例如,
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
但是,您编写的C语言只是使用常规条件来更改i的值。没有涉及的功能。
答案 5 :(得分:0)
您无法使用范围功能执行此操作。 你必须通过使用while循环来做到这一点,因为for循环使用范围函数和范围函数变量将通过其内部方法增加,无论你在循环中指定什么,它将仅按范围列表递增。 我在范围内(10): ...打印我 ......如果我== 2: ... i = 4 ......别的: ...... i + = 1 ... 0 1 2 3 4 五 6 7 8 9
这里有一个有趣的例子......
表示范围(10)中的i: ...打印我 ... i = i + 10 ...打印我 ... 这将打印... 0 10 1 11 2 12 3 13 4 14 五 15 6 16 7 17 8 18 9 19