Assigning equal amount of tasks among people

Context

So I had this edge-case scenario where I was to assign tasks among the four of us for a video project. We had initially decided to take the tasks numerically, but then I thought, "let's make this randomized". The tasks were equally dividable, and my team members gave in, ergo I created this little script to do the work.

Finding the right thing to do the job

Obviously, TypeScript is the first option to do this, but the interface for random numbers isn't the most pleasing one for this situation. There's also shell scripts (fish is my pick), but I never dealt with random numbers in the command line. So then its Python which will be used to do the job.

random.shuffle()

Checking this question on StackOverflow, there was a function in the random module of Python to shuffle the lists in place. Phew. I thought I was going to write a bunch of more stuff for shuffling the lists and stuff 😅

So the plan was clear, use this function and build code around it and get the job done.

The script

import random

# Obviously these are not the real names and tasks.
people = ["Jack", "Jamie"]
tasks = [
	"Going for the messages",
	"Water the plants",
	"Check the mailbox",
	"Wash the clothes",
	"Clean the plates",
	"Cook lunch",
]

task_per_person = len(tasks) / len(people)

# This shouldn't continue if the tasks cannot be divided equally. If this
# is the case, then one has to remove some number of tasks to make the
# number correct, or else make a custom solution.
if task_per_person % 1 != 0:
	raise Exception("Tasks cannot be equally divided")

c = 0
for i in range(int(task_per_person)):
	# Shuffling the tasks list is totally optional
	random.shuffle(tasks)
	shuffled = people
	random.shuffle(shuffled)
	for person in shuffled:
		print(f"{tasks[c]} : {person}")
		c += 1

On what would it won't work?

This won't work when the tasks are not equally assignable. For instance. 8 tasks among 4 people is possible, but 7 tasks among 3 isn't. I'll probably write code for this too in the future.


The names in the snippet are a reference to an Ed Sheeran's song. Check if you can find out ;)


My website supports webmentions using webmention.io via the Indieweb.