2016-11-12 262 views
0

我有一個使用傳奇API聯盟的機器人。我只想從特定的比賽中檢索一些統計數據。我有代碼工作,但它是漫長而重複的,我想清理它。現在代碼的主要功能正在運行,但在我將其放入bot中之前,我正在做一些測試。現在這是代碼,我會解釋它。在for循環中只打印一次

for i in range(0, 9): 
    num += 1 
    i = r_match['participants'][num] 
    e_name = i['summonerName'] 
    e_id = i['summonerId'] 
    team_id = i['teamId'] 

    r_team = requests.get("https://lan.api.pvp.net/api/lol/lan/v2.5/league/by-summoner/{}/" 
          "entry?api_key=".format(e_id)).json() 

    x = r_team["{}".format(e_id)][0] 
    e_tier = x['tier'] 
    e_div = x['entries'][0]['division'] 

    if team_id == 100: 
     print("Blue team") 
     print(e_name, e_tier, e_div) 

    elif team_id == 200: 
     print("Red team") 
     print(e_name, e_tier, e_div) 

所以這部分代碼得到本場比賽的參加者的名字,它得到他們的ID並使用該ID找到一些其他屬性。有兩支隊伍。在Json回覆中,每個球隊都有一個Id。 100和200,你可以在這裏看到:

if team_id == 100: 
    print("Blue team") 
    print(e_name, e_tier, e_div) 

elif team_id == 200: 
    print("Red team") 
    print(e_name, e_tier, e_div) 

我想要做的就是打印「藍隊」,只是一次當條件滿足「紅隊」。這樣我就可以在機器人正在工作的聊天中打印乾淨的內容,但每次運行代碼時,都會爲每位參與者打印「藍色團隊」或「紅色團隊」,假設:

Blue Team 
player 1 
Blue Team 
player 2... 

依此類推,直到總共打出10名球員。我想要做的是:

Blue Team 
player1 
player2 
player3 
player4 
player5 

Red Team 
player6 
player7 
player8 
player9 
player10 

就是這樣。感謝您的幫助:)

回答

0
ids_seen = set() 

for i in range(0, 9): 
    num += 1 
    i = r_match['participants'][num] 
    e_name = i['summonerName'] 
    e_id = i['summonerId'] 
    team_id = i['teamId'] 

    r_team = requests.get("https://lan.api.pvp.net/api/lol/lan/v2.5/league/by-summoner/{}/" 
          "entry?api_key=".format(e_id)).json() 

    x = r_team["{}".format(e_id)][0] 
    e_tier = x['tier'] 
    e_div = x['entries'][0]['division'] 


    if team_id == 100: 
     if not team_id in ids_seen: 
      print("Blue team") 
     print(e_name, e_tier, e_div) 

    elif team_id == 200: 
     if not team_id in ids_seen: 
      print("Red team") 
     print(e_name, e_tier, e_div) 

    ids_seen.add (team_id) 
0

我會存儲一本字典,然後打印出所有的玩家。

teams = {} 

for _ in range(9): 
    num += 1 
    i = r_match['participants'][num] 
    e_name = i['summonerName'] 
    e_id = i['summonerId'] 
    team_id = i['teamId'] 

    if team_id not in teams: 
     teams[str(team_id)] = list() 

    r_team = requests.get("https://lan.api.pvp.net/api/lol/lan/v2.5/league/by-summoner/{}/" 
          "entry?api_key=".format(e_id)).json() 

    x = r_team["{}".format(e_id)][0] 
    e_tier = x['tier'] 
    e_div = x['entries'][0]['division'] 

    teams[str(team_id)].append((e_name, e_tier, e_div,)) 

# Outside loop  

print("Blue team") 
for data in teams['100']: 
    print(*data) 

print("Red team") 
for data in teams['200']: 
    print(*data) 
+0

那麼,上面的答案做了這份工作,我可能會問。這看起來有點長,所以這樣做的優點是什麼? – Aguxez

+0

我只添加了大約4-6行。這種方式會將所有玩家添加到相應的團隊ID中。如果你的隊伍不僅僅是100和200隊,這更加靈活 –