2017-05-16 45 views
0

我試圖運行嵌套for循環與條件語句。運行它時,我期望它打印我定義的語句,如果我的條件語句。但它不打印任何東西。 (並且它不會無限期地運行)。 Pokemons_gyms是一個字符串列表。玩家是一本字典。我嘗試加入else: continue,但它不起作用。我堅持,因爲我沒有得到任何錯誤運行的代碼......嵌套for循環的意外結果 - Python

pokemon_gyms = ['reddit.com', 'amazon.com', 'twitter.com', 
      'linkedin.com', 'ebay.com','netflix.com', 
      'udacity.com','stackoverflow.com','github.com', 
      'quora.com'] 

players= { 
    1: { 
     'gyms_visited': ['amazon.com', 'ebay.com'] 
     } 
    2:{ 
     'gyms_visited' : ['stackoverflow.com','github.com'] 
     } 
} 

for gym in pokemon_gyms:  
    for players_id in players: 
     if gym == players[players_id]['gyms_visited']: 
      print(str(players[players_id]['player_name']) +" has visited "+ str(gym)) 

回答

4

players[players_id]['gyms_visited']返回一個列表,以便gym == players[players_id]['gyms_visited']始終計算爲False

您應該檢查使用in成員:

if gym in players[players_id]['gyms_visited']: 
    ... 
+0

「是」和「評估爲」,分別;不「返回」。這裏沒有回報。 –

+1

@BoundaryImposition - 也許。在足夠低的水平上,我們正在討論'__getitem__'將要返回什麼,所以這裏有一個返回值,它只是不那麼明確。 – mgilson

+0

@mgilson:他很好的機動。儘管「X」是通過從某個函數返回產生的,但是說「X返回Y」是不正確的。 –

3

的這裏的問題是,gym將是一個strplayers[players_id]['gyms_visited']是一個字符串列表。因此,他們永遠不會平等。

也許你要檢查

if gym in players[players_id]['gyms_visited']: 
0

您的問題是在該行if gym == players[players_id]['gyms_visited']:==檢查是否相等,以便看看gym是否等於字典中players[players_id]['gyms_visited']的列表。

如果你想檢查列表中的任何一個項目是等於字符串可以使用in關鍵字

for gym in pokemon_gyms: 
    for players_id in players: 
     if gym in players[player_id]['gyms_visited']: 
      # Do things here 

注意,對於大名單這可能相當緩慢,所以你可能要考慮使用一個set而不是如果你要有很多訪問pokemon_gyms的球員。

0

YUP! 所有的設置,它是'==',導致所有結果爲False,因爲類型(健身房)不同於類型(玩家[players_id] ['gyms_visited'])。

我用'in'取代了'==',它工作完美。

謝謝你們!

+0

=是賦值運算符 ==是相等運算符 – Frrank