我试图使用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)
它似乎没有循环或添加,对此我是陌生的,谢谢。
答案 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))