簡體   English   中英

While 循環添加字典項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM