[英]While loop adding dictionary items
我正在嘗試使用 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)
它似乎沒有循環或添加,我對此很陌生,提前致謝。
spent
初始化為 0。
因此, spent > 0
的條件不成立,因此循環不執行。
問題出在您的 while 條件中。 您將花費設置為 0,然后說當它大於 0 時,它應該添加每部電影的花費金額。
您應該做的是在 x 小於 max 鍵時設置要添加的條件。 您可以通過調用max(movies.keys())
。
這個解決方案應該不難實現。 我不會提供代碼解決方案,因為感覺就像解決您的作業一樣,但是按照我的建議更改條件,它應該可以工作。
此外,正如評論中所建議的那樣,您的movies
列表比字典更好。
我們希望盡可能避免 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.