今回は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)
コメント