チーム編成アプリを作成してみよう

python

今回はPythonで自動的にチーム分けをし、そのチームのリーダーを決める処理を作成してみよう。

この記事の対象者

この記事はPythonの基礎文法を一通り学び終えた人を対象にしている。

作りたい処理

いま以下のように12名のメンバーがいる。

'大迫','古橋','久保','堂安','南野','伊東','田中','遠藤','富安','吉田','長友','酒井'

このメンバーを2つのチーム、チームAとチームBにわけ、なおかつそのチームリーダーをランダムに作成する処理を作成したい。

実行例

---チームA---
reader:田中
田中
伊東
富安
堂安
遠藤
古橋
---チームB---
reader:久保
久保
大迫
吉田
南野
長友
酒井

Let’s challenge

これはとてもベーシックなお題だ。ぜひ自分でコーディングしてみてほしい

解答例

その1

import random
members=['大迫','古橋','久保','堂安','南野','伊東','田中','遠藤','富安','吉田','長友','酒井']
random.shuffle(members)
    
teamAmembers=members[:len(members)//2]
teamBmembers=members[len(members)//2:]

teamAreader=teamA[0]
teamBreader=teamB[0]

def printTeam(teamName,teamMembers,teamReader):
    print(f'---{teamName}---')
    print(f'reader:{teamReader}')
    for name in teamMembers:
        print(name)

printTeam('チームA',teamAmembers,teamAreader)
printTeam('チームB',teamBmembers,teamBreader)

その2

teamsというリストの中にDictでチームを定義していく方法もありそうだ。
情報がまとまっている分こちらの方が応用が効く作りだろう

import random
members=['久保','堂安','田中','富安','吉田','南野','遠藤','大迫','長友','伊東']
random.shuffle(members)

teamA=members[:len(members)//2]
teamB=members[len(members)//2:]

teams=[
    {'teamName':'チームA',
    'teamMembers':teamA,
    'teamReader':teamA[0]
    },
    {'teamName':'チームB',
    'teamMembers':teamB,
    'teamReader':teamB[0]
    }
]

for team in teams:
    print(f"---{team['teamName']}---")
    print(f"reader:{team['teamReader']}")
    for name in team['teamMembers']:
        print(name)
        

応用問題

腕に覚えのある人は以下の問題にもチャレンジしてみよう。最初に何チームにわけるか?と質問してから始める問題だ。難易度はグッと上がってくる

実行例

その1

いくつチームを作りますか(1-12)?4
---チームA---
reader:南野
南野
伊東
久保
---チームB---
reader:田中
田中
堂安
遠藤
---チームC---
reader:吉田
吉田
富安
古橋
---チームD---
reader:酒井
酒井
大迫
長友

その2(端数あり)

いくつチームを作りますか(1-12)?5
---チームA---
reader:吉田
吉田
大迫
遠藤
---チームB---
reader:田中
田中
酒井
南野
---チームC---
reader:久保
久保
伊東
---チームD---
reader:古橋
古橋
堂安
---チームE---
reader:長友
長友
富安

仕様

○チーム数は1~メンバーの総数が入るものとする(それ以外の入力は考慮しなくよい)
○端数が出た際には先頭のチームから割り振られる(実行例2参照)
○チーム名は’チームA’,’チームB’…とチームの後ろにアルファベットが連番で振られる

Let’s challenge

これができればPythonの基礎はOKと考えてよいだろう。是非自力で作成してみてほしい。

解答例

import random
import string
members=['大迫','古橋','久保','堂安','南野','伊東','田中','遠藤','富安','吉田','長友','酒井']
random.shuffle(members)
teamCount=int(input(f'いくつチームを作りますか(1-{len(members)})?'))
teamNames=string.ascii_uppercase #ABCDE....Z

data=[{'teamName':'チーム'+str(teamNames[i]),'teamMembers':[],'teamReader':None} for i in range(teamCount)]
for i in range(len(members)):
    member=members[i]
    data[i % len(data)]['teamMembers'].append(member)
    if i < teamCount:
        data[i % len(data)]['teamReader']=member

for team in data:
    print(f"---{team['teamName']}---")
    print(f"reader:{team['teamReader']}")
    for name in team['teamMembers']:
        print(name)
python
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました