似乎我的变量在我的for中不会增加

时间:2016-02-20 18:39:30

标签: python

这里的python真正的初学者D:

所以,我有一个清单:

product_list = ['2.99', '3', 1, '0.99', '10', 0, '7.49', '1', 1]

我想做'之间的数字总和。 '并且同时将这些数字对相乘,有点像这样:

total = total + 2.99*3
total = total + 0.99*10
total = total + 7.49*1

为此,我使用了for:

for i in range(len(product_list)):
    total = total + float(product_list[i]) * float(product_list[i+1])
    print(total)
    i+=2

我尝试增加i以跳过不在'之间放置的列表号码。 '

这给我以下结果:

8.97
11.97
12.96
22.86
22.86
22.86

虽然它应该只给我这个结果:

8.97
18.87
26.36

所以我有点迷失在那里......对我来说,看起来我的i根本就没有递增,这可以解释一切,但我似乎无法让它增加..任何想法?

4 个答案:

答案 0 :(得分:1)

在循环结束时更改i无效,因为它会立即分配范围内的下一个值...
看起来你试图在3s中迭代列表,所以你可以向range添加一个步骤3,例如:

total = 0
for i in range(0, len(product_list), 3):
    total = total + float(product_list[i]) * float(product_list[i+1])
    print(total)

输出:

8.97
18.87
26.36

假设您可以保证3的倍数,那么您可以使用zip:

执行此操作
total = 0
i = iter(product_list)
for x,y,_ in zip(i, i, i):
    total += float(x)*float(y)
    print(total)

会提供相同的结果。

答案 1 :(得分:0)

在您正在构建的循环中,仅在一次迭代中递增i的值。当前迭代结束时,i值将重置为range()函数中的值。 (所以你只能在结束之前使用当前迭代中的递增值。)鉴于你在迭代结束之前递增it,它什么都不做。

您可以使用列表解析来完成您要执行的操作

例如:

range(len(product_list))[::2]

或内置范围功能;

range(0, len(product_list), 2)

这些基本上做的是他们为列表创建步骤值。所以他们产生了这个;

[1, 3, 5, 7] # etc...

答案 2 :(得分:0)

for i in range(x)表示你在列表[1,2 .. x]上进行迭代,所以当你在循环中更改i时,它只会针对当前迭代而不是下一个迭代进行更改。

您可以使用for i in range(0, len(product_list), 3),其中3d参数为步骤。

答案 3 :(得分:0)

当您使用for ..时,每次都会重置变量的值。 含义:

for i in range(3):
    print(i)
    i *= 2  # Any edit to i will behave the same

将打印以下内容:

0
1
2

因为i的值与前一个循环无关。

这与使用for(int i = 0; i < 3; i++的C(或类似语言)中的循环不同,i的值增加1,这意味着它依赖于前一个。

如果解释不够清楚,请发表评论。