Дается неверное значение переменной

Итак, у меня проблема с некоторыми переменными, которые поступают из итерации словаря:

for rank in ranked_stats:
    if rank['queueType'] == "RANKED_FLEX_SR":
        flex_rank_name = "Ranked Flex"
        flex_tier = rank["tier"]
        flex_rank = rank['rank']
        totalrank_flex = flex_tier + " " + flex_rank
        winrate_flex = rank['wins']/(rank['wins']+rank['losses'])
        winrate_flex *= 100
        winrate_flex = "{:.2f}%".format(winrate_flex)
        wins_flex = rank['wins']
        losses_flex = rank['losses']

    else:
        flex_rank_name = "None"
        flex_tier = "None"
        flex_rank = "None"
        totalrank_flex = "None"
        winrate_flex = "None"
        wins_flex= "None"
        losses_flex = "None"
            
        
for ranksolo in ranked_stats:  
    if ranksolo['queueType'] == "RANKED_SOLO_5x5":
        solo_rank_name = "Ranked Solo/Duo"
        solo_tier = ranksolo['tier']
        solo_rank = ranksolo['rank']
        totalrank_solo = solo_tier + " " + solo_rank
        winrate_solo = ranksolo['wins']/(ranksolo['wins']+ranksolo['losses'])
        winrate_solo *= 100
        winrate_solo = "{:.2f}%".format(winrate_solo)
        wins_solo = ranksolo['wins']
        losses_solo = ranksolo['losses']
     else:
        solo_rank_name = "None"
        solo_tier = "None"
        solo_rank = "None"
        totalrank_solo = "None"
        winrate_solo = "None"
        wins_solo= "None"
        losses_solo = "None"

Вот циклы для этого словаря:

[{"leagueId": "0b36ed94-33bc-43e3-aa39-3bff2350f76e", "queueType": "RANKED_SOLO_5x5", "tier": "BRONZE", "rank": "II", "summonerId": "___hidden__", "summonerName": "lantern is lava", "leaguePoints": 57, "wins": 8, "losses": 5, "veteran": false, "inactive": false, "freshBlood": false, "hotStreak": false}, {"leagueId": "52002724-73b2-49bc-ad7b-ae58c64f2623", "queueType": "RANKED_FLEX_SR", "tier": "BRONZE", "rank": "II", "summonerId": "__hidden__", "summonerName": "lantern is lava", "leaguePoints": 1, "wins": 5, "losses": 5, "veteran": false, "inactive": false, "freshBlood": false, "hotStreak": false}]

Проблема заключается в том, что все переменные в секции else второго цикла for имеют значение "None", чего быть не должно.... Хотя цикл Flex работает совершенно нормально.

Я уже пытался изменить:

for ranksolo in ranked_stats:  
    if ranksolo['queueType'] == "RANKED_SOLO_5x5":

to

for rank_solo in ranked_stats:  
    if rank_solo['queueType'] == "RANKED_SOLO_5x5":
                 ...

Вы полностью сбрасываете переменные solo_rank_name, solo_tier и т.д. при каждом прохождении цикла.

На последней итерации цикла queueType равен "RANKED_FLEX_SR", поэтому выполняется ветвь else и все переменные устанавливаются в "None", как и предписывает код.

Что вы ожидали, что произойдет?

Замените два утверждения if на одно if elif else и это должно исправить проблему, если делать это по отдельности, то предыдущее будет перезаписано, потому что оно не соответствует текущему совпадению.

Я смог исправить этот участок кода следующим образом:

solo_rank_name = "None"
solo_tier = "None"
solo_rank = "None"
totalrank_solo = "None"
winrate_solo = "None"
wins_solo= "None"
losses_solo = "None"
flex_rank_name = "None"
flex_tier = "None"
flex_rank = "None"
totalrank_flex = "None"
winrate_flex = "None"
wins_flex= "None"
losses_flex = "None"
        
        
    
    
    for rank in ranked_stats:
        if rank['queueType'] == "RANKED_FLEX_SR":
            flex_rank_name = "Ranked Flex"
            flex_tier = rank["tier"]
            flex_rank = rank['rank']
            totalrank_flex = flex_tier + " " + flex_rank
            winrate_flex = rank['wins']/(rank['wins']+rank['losses'])
            winrate_flex *= 100
            winrate_flex = "{:.2f}%".format(winrate_flex)
            wins_flex = rank['wins']
            losses_flex = rank['losses']

        elif rank['queueType'] == "RANKED_SOLO_5x5":
            solo_rank_name = "Ranked Solo/Duo"
            solo_tier = rank['tier']
            solo_rank = rank['rank']
            totalrank_solo = solo_tier + " " + solo_rank
            winrate_solo = rank['wins']/(rank['wins']+rank['losses'])
            winrate_solo *= 100
            winrate_solo = "{:.2f}%".format(winrate_solo)
            wins_solo = rank['wins']
            losses_solo = rank['losses']

Я немного заблуждался и просто оценил переменные заранее и поставил цикл после него, так что он переопределяет значения, если условие выполняется. Спасибо за идею с перезаписью!

Вернуться на верх