嵌套for循环的意外结果 - Python

时间:2017-05-16 20:22:50

标签: python for-loop if-statement nested-loops

我正在尝试使用条件语句运行嵌套的for循环。在运行它时,我希望它能打印我在条件语句中定义的语句。但它没有打印任何东西。 (它不会无限期地运行)。 Pokemons_gyms是一个字符串列表。玩家是一本字典。我尝试添加else: continue但它不起作用。我被卡住了因为我没有在运行代码时出现任何错误......

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 个答案:

答案 0 :(得分:4)

players[players_id]['gyms_visited']会返回一个列表,因此gym == players[players_id]['gyms_visited']始终评估为False

您应该使用in检查会员资格:

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

答案 1 :(得分:3)

这里的问题是gym将是strplayers[players_id]['gyms_visited']是字符串的列表。因此,它们永远不会平等。

也许你想检查

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

答案 2 :(得分: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

请注意,对于大型列表,这可能会相当慢,因此如果您要让玩家拥有大量访问过的pokemon_gyms,您可能需要考虑使用set

答案 3 :(得分:0)

YUP! 所有这一切,都是' =='因为类型(健身房)不同于类型(玩家[players_id] [' gyms_visited'])导致所有结果都是假的。

我更换了' =='通过' in'它运作得很好。

谢谢你们!