メンバー組分けツールを作りました

普段、チームのメンバーで二人組を作ってペアプログラミングをしているのですが、たまに組み合わせをシャッフルしないとパターンが固定されてしまうので、マンネリを感じたときに使うツールとして作りました。

使用言語はPythonです。


二人組作成ツール

メンバーが何人いようが、とにかく二人組に分けます。
ペア作業の組をランダムな組み合わせで作成することができます。

import random

members = ["Aさん", "Bさん", "Cさん", "Dさん", "Eさん", "Fさん", "Gさん"]
num_of_members = len(members)
pair_number = 1

random.shuffle(members)

#ペア分けする。
for i in range(0, num_of_members - 1, 2):
    print(f"{pair_number}組目のペアは、{members[i]},{members[i + 1]}です。")
    pair_number += 1

#メンバーが奇数名のとき、余った人の参加ペアを決める。
check = divmod(num_of_members, 2)
if check[1] != 0:
    assign_to = random.randrange(1, check[0] + 1)
    print(f"{members[num_of_members - 1]}は、{assign_to}組目のペアに加わってください。")

メンバーが奇数名のときは、いずれかのペアに余った人が追加されて、一組だけ三人組になります。

#実行結果
1組目のペアは、Eさん,Dさんです。
2組目のペアは、Bさん,Gさんです。
3組目のペアは、Cさん,Aさんです。
Fさんは、2組目のペアに加わってください。


チーム分けツール(人数均等ver)

ここからはおまけです。
メンバーを4つのチームに分けます。

まずは、均一な人数に分けるバージョンです。
割り切れない人数の場合、どのチームの人数が多い・少ないかはランダムですが、人数差は1人だけになります。

import random

members = ["Aさん", "Bさん", "Cさん", "Dさん", "Eさん", "Fさん", "Gさん", "Hさん", "Iさん"]
num_of_members = len(members)
a_team = []
b_team = []
c_team = []
d_team = []
teams = [a_team, b_team, c_team, d_team]
num_of_teams = len(teams)

random.shuffle(members)
random.shuffle(teams)

#チームに振り分ける。均等ver
to_team = 0
for i in range(0, num_of_members):
    teams[to_team].append(members[i])
    to_team += 1
    if to_team == num_of_teams:
        to_team = 0

a_members = ""
for i in range(0, len(a_team)):
    a_members = a_members + "、" + a_team[i]

b_members = ""
for i in range(0, len(b_team)):
    b_members = b_members + "、" + b_team[i]

c_members = ""
for i in range(0, len(c_team)):
    c_members = c_members + "、" + c_team[i]

d_members = ""
for i in range(0, len(d_team)):
    d_members = d_members + "、" + d_team[i]

print(f"Aチームのメンバーは{a_members}です。")
print(f"Bチームのメンバーは{b_members}です。")
print(f"Cチームのメンバーは{c_members}です。")
print(f"Dチームのメンバーは{d_members}です。")

メンバーの配列だけでなく、チームの配列もシャッフルすることで、よりランダムにできたのではないかと思っています。

#実行結果
Aチームのメンバーは、Iさん、Dさんです。
Bチームのメンバーは、Gさん、Bさんです。
Cチームのメンバーは、Aさん、Cさんです。
Dチームのメンバーは、Eさん、Hさん、Fさんです。


チーム分けツール(完全ランダムver)

実用性があるかは怪しいですが、各チームの人数を均等にしない、完全ランダム版です。人数ゼロのチームができたりします。
参加者を陣営に分けるRPG的なゲームに使えるかもしれません。

import random

members = ["Aさん", "Bさん", "Cさん", "Dさん", "Eさん", "Fさん", "Gさん", "Hさん", "Iさん"]
num_of_members = len(members)
a_team = []
b_team = []
c_team = []
d_team = []
teams = [a_team, b_team, c_team, d_team]
num_of_teams = len(teams)

random.shuffle(members)
random.shuffle(teams)

#チームに振り分ける。完全ランダムver
for i in range(0, num_of_members):
    to_team = random.randrange(0, num_of_teams)
    teams[to_team].append(members[i])

a_members = ""
for i in range(0, len(a_team)):
    a_members = a_members + "、" + a_team[i]

b_members = ""
for i in range(0, len(b_team)):
    b_members = b_members + "、" + b_team[i]

c_members = ""
for i in range(0, len(c_team)):
    c_members = c_members + "、" + c_team[i]

d_members = ""
for i in range(0, len(d_team)):
    d_members = d_members + "、" + d_team[i]

print(f"Aチームのメンバーは{a_members}です。")
print(f"Bチームのメンバーは{b_members}です。")
print(f"Cチームのメンバーは{c_members}です。")
print(f"Dチームのメンバーは{d_members}です。")
#実行結果
Aチームのメンバーは、Dさん、Bさん、Hさんです。
Bチームのメンバーはです。
Cチームのメンバーは、Eさん、Cさんです。
Dチームのメンバーは、Iさん、Aさん、Fさん、Gさんです。

チームにメンバーがいないときの表示には、もう少し工夫が必要そうです。


チーム分けツール(人数不均等だけどゼロにはならないver)

最後に、人数は固定しないものの、さすがにゼロにはしたくない、という場合を想定したバージョンです。

ループの回数がチームの数に達するまでの間、メンバー追加先のチームをランダム選択せず、順番に追加していけば、各チームに最低1人は入るようにすることができます。

import random

members = ["Aさん", "Bさん", "Cさん", "Dさん", "Eさん", "Fさん", "Gさん", "Hさん", "Iさん", "Jさん", "Kさん", "Lさん", "Mさん", "Nさん"]
num_of_members = len(members)
a_team = []
b_team = []
c_team = []
d_team = []
teams = [a_team, b_team, c_team, d_team]
num_of_teams = len(teams)

random.shuffle(members)
random.shuffle(teams)

#チームに振り分ける。最低1人は入るver
to_team = 0
for i in range(0, num_of_members):
    if i < num_of_teams:
        teams[to_team].append(members[i])
        to_team += 1
    else:
        to_team = random.randrange(0, num_of_teams)
        teams[to_team].append(members[i])

a_members = ""
for i in range(0, len(a_team)):
    a_members = a_members + "、" + a_team[i]

b_members = ""
for i in range(0, len(b_team)):
    b_members = b_members + "、" + b_team[i]

c_members = ""
for i in range(0, len(c_team)):
    c_members = c_members + "、" + c_team[i]

d_members = ""
for i in range(0, len(d_team)):
    d_members = d_members + "、" + d_team[i]

print(f"Aチームのメンバーは{a_members}です。")
print(f"Bチームのメンバーは{b_members}です。")
print(f"Cチームのメンバーは{c_members}です。")
print(f"Dチームのメンバーは{d_members}です。")
#実行結果
Aチームのメンバーは、Jさん、Nさんです。
Bチームのメンバーは、Dさん、Bさんです。
Cチームのメンバーは、Fさん、Mさん、Hさん、Eさん、Kさん、Iさん、Gさん、Cさんです。
Dチームのメンバーは、Aさん、Lさんです。

けっこう偏りました。Cチームが有利そうです。

この記事が気に入ったらサポートをしてみませんか?