38698


リーグ戦の戦績結果を表示するプログラムを作成したいのですが入力値を扱うことができせん。  
コメントアウトしてる部分をうまいこと記述すればできるのかなと思うのですが・・・。  
知恵をお貸しください。  
入力値は  
teams...チーム数  
data...勝利した場所  
4  
1 2  
1 3  
2 4  
3 2  
3 4  
4 1  
として  
期待する出力は以下のものです  
\- ○ ○ ✗  
✗ - ✗ ○  
✗ ○ - ○  
○ ✗ ✗ -

[code]

    data = []
    teams = int(input())
    print(teams)
    for i in range(int(((teams*teams)-teams)/2)):
        data.append(input().split())
    
    print(data)
    
    for i in range(teams):
        for j in range(teams):
            if i==j:
                print(' -', end='')
            #↓ここで頭がこんがらがりました
            elif int(data[i][0]) == j+1 and int(data[i][1]) == i+1 :
                print(' ○', end='')
            else:
                print(' ✗', end='')
        print()
    
[/code]


CC BY-SA 3.0
2017-10-14T10:52:18.600
38697
2017-10-14T15:36:37.513
25679
question
python python3
python3 リーグ戦の試合結果を表示するプログラム


予め `map(int, input().split())` で整数値にしておいて、`[i+1, j+1] in data` で判定しています。

[code]

    data = []
    teams = int(input())
    print(teams)
    for i in range(int(((teams*teams)-teams)/2)):
      data.append(list(map(int, input().split())))
    
    print(data)
    
    for i in range(teams):
      for j in range(teams):
        if i == j:
          print(' -', end='')
        elif [i+1, j+1] in data:
          print(' ○', end='')
        else:
          print(' ✗', end='')
      print()
    
[/code]


CC BY-SA 3.0
2017-10-14T12:01:22.380
38698
2017-10-14T12:01:22.380
38697
answer


以下では入力データがソートされていることを利用しています。（そうでない場合でも`data`をソートすればOKです）番兵は`IndexError`防止のためのものです。

データがソートされているので、`data[k] == (i+1,
j+1)`の時に`○`を印字して`k`をインクリメントし、それ以外は単に`✗`(もしくは`-`)を印字すればよいことがわかります。(この比較のために入力行を整数のペアに変換しています。)

[code]

    data = []
    teams = int(input())
    print(teams)
    for i in range(int(((teams*teams)-teams)/2)):
        data.append(tuple(map(int, input().split())))
    data.append((0,0)) # 番兵
    
    print(data)
    
    k = 0
    for i in range(teams):
        for j in range(teams):
            if i == j:
                print(' -', end='')
            elif data[k] == (i+1,j+1):
                print(' ○', end='')
                k += 1
            else:
                print(' ✗', end='')
        print()
    
[/code]


CC BY-SA 3.0
2017-10-14T14:35:24.780
38703
2017-10-14T15:36:37.513
2017-10-14T15:36:37.513
13199
13199
38697
answer