2016-11-12 15 views
0

私はlegends APIを使用しているボットを持っています。私はちょうど特定のマッチからいくつかの統計を取得したい。コードは動作していましたが、それは長く繰り返しました。私はそれをきれいにしたいと思っていました。現在、コードの主な機能は動作していますが、ボットに入れる前にいくつかのテストを行っています。今はこれがコードです、私はそれを説明します。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を持つことは、他のいくつかの統計情報を検索します。 2つのチームがあります。 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だけではない場合、これはより柔軟です –

関連する問題