Дается неверное значение переменной
Итак, у меня проблема с некоторыми переменными, которые поступают из итерации словаря:
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']
Я немного заблуждался и просто оценил переменные заранее и поставил цикл после него, так что он переопределяет значения, если условие выполняется. Спасибо за идею с перезаписью!