While循环添加字典项

时间:2018-09-22 04:39:15

标签: python

我试图使用while循环为每个键添加字典的[2]项。 [2]项是所花的钱。

movies = {
   1:('The Shawshank Redemption' , 'Bob', 25, 5),
   2:('The Godfather', 'Kelly', 25, 4),
   3:('The Dark Knight', 'Tyler', 25, 3),
   4:('12 Angry Men', 'Bob', 25, 4),
   5:('The Shawshank Redemption' , 'Bill', 35, 4),
   6:('The Godfather', 'Sally', 35, 5),
   7:('The Dark Knight', 'Suzy', 19, 5),
   8:('12 Angry Men', 'Frank', 19, 3),
   9:('The Shawshank Redemption' , 'Sally', 35, 5),
   10:('The Godfather', 'Leslie', 40, 2),
   11:('The Green Knight', 'Tom', 35, 2),
   12:('14 Angry Men', 'Kaitlyn', 25, 4)}

下面是我的代码:

spent = 0
x = 1
while spent > 0:
   spent += movies[x][2]
   x += 1
else:
   print ('The total money spent is:', spent)

它似乎没有循环或添加,对此我是陌生的,谢谢。

3 个答案:

答案 0 :(得分:0)

spent的数字为0。

因此,条件spent > 0不成立,因此循环不执行。

答案 1 :(得分:0)

问题出在您的while状态。您将花费设置为0,然后说当它大于0时,它应该加上每部电影的花费。

您应该做的是设置x小于最大键时要添加的条件。只需致电findByTimestampBetween即可获得。

该解决方案应该很容易实现。我不会提供代码解决方案,因为它感觉像是解决了您的家庭作业,但是请按照我的建议更改条件,它应该可以工作。

另外,如评论所建议,为您的max(movies.keys())列出的列表要比命令更好。

答案 2 :(得分:0)

我们希望尽可能地避免while循环,在这种情况下,您可以使用for循环并遍历所有项目并求和与您的方法相同的值,只是更改循环类型

spent = 0
for i in movies:
    spent += movies[i][2]
chrx@chrx:~/python/stack$ python3.7 sum.py 
343

出于娱乐目的,使用了reduce(不是必需的)

from functools import reduce
spent = reduce((lambda x, y: x + y), (movies[i][2] for i in movies))