Programa em Python que sorteia e divide alunos em grupos em uma turma

Programa em Python que sorteia e divide alunos em grupos em uma turma

Um problema que ocorre às vezes nos cursos que ministro, tanto em cursos técnicos quanto em cursos livres e de nível superior, é a formação de grupos pelos alunos para a realização de trabalhos e execução de projetos.

Essa situação ocorreu em um curso de programação recentemente. Os alunos precisavam se dividir em grupos, com até 5 membros por grupo, para trabalharem em um projeto de desenvolvimento de software com acesso a bancos de dados.

Como é o costume na instituição onde atuo, deixamos os alunos se auto-organizarem, de modo a praticarem assim a autonomia e trabalho em equipe.

Não deu certo.

Após mais de uma hora de conversas, mini-reuniões e muita discussão, eles não conseguiam entrar em acordo sobre quem ficaria em qual grupo, e a atividade estava quase se transformando em briga na sala de aula.

Sendo assim, tive de intervir. Resolvi que o melhor a fazer seria eu mesmo realizar a divisão dos grupos.

Mas como fazer isso de forma igualitária? Como atribuir alunos aos grupos aleatoriamente, sem nenhum viés de seleção?

Simples: deixando um programa escolher de forma automática os grupos e seus integrantes. Sendo assim, escrevi um pequeno script em Python para realizar essa tarefa para nós. E neste artigo reproduzo o programa, com uma explicação sucinta sobre seu funcionamento na sequência.

Divisão de alunos em grupos

O que faz o programa

Temos aqui um programa em Python que sorteia números de uma lista que contém a quantidade de alunos que devem ser distribuídos nos grupos (identificados pelo número de chamada, que começa em 1).

O programa deve retornar grupos com no máximo x integrantes em cada, sem repetição – cada número sorteado é retirado da lista inicial.

A quantidade máxima de alunos em cada grupos também é informada pelo usuário. Podem haver grupos com menos alunos, caso a quantidade total de alunos não seja múltipla da quantidade de alunos por grupo.

Vamos ao código da aplicação.

Código

import random

# Perguntar ao usuário quantos alunos serão divididos em grupos
quantidade_numeros = int(input("Quantidade de alunos no total:"))

# Lista de números de 1 até a quantidade fornecida pelo usuário
numeros = list(range(1, quantidade_numeros + 1))

# Função para sortear e remover um número da lista
def sortear_numero(lista):
    numero_sorteado = random.choice(lista)
    lista.remove(numero_sorteado)
    return numero_sorteado

# Perguntar ao usuário quantos alunos no máximo por grupo
num_numeros_max_por_grupo = int(input("Quantos alunos no máximo por grupo? "))

# Inicializar a lista de grupos
grupos = []

# Gerar grupos com base na quantidade de alunos e na quantidade máxima por grupo
while numeros:
    tamanho_grupo = min(num_numeros_max_por_grupo, len(numeros))
    grupo = [sortear_numero(numeros) for _ in range(tamanho_grupo)]
    grupos.append(grupo)

# Exibir os grupos
print('\nGrupos formados:')
for i, grupo in enumerate(grupos):
    print(f'Grupo {i + 1}: {grupo}')

Teste do script

Exemplo de saída para uma turma com 23 alunos, divididos em grupos com no máximo cinco alunos por grupo:

Quantidade de alunos no total:
23
Quantos alunos no máximo por grupo? 
5

Grupos formados:
Grupo 1: [7, 2, 9, 14, 22]
Grupo 2: [5, 8, 13, 3, 11]
Grupo 3: [15, 16, 20, 12, 17]
Grupo 4: [21, 4, 10, 1, 18]
Grupo 5: [23, 6, 19]

Explicação

  • Iniciamos o programa importando o módulo random para geração de números aleatórios.
  • Na sequência, o programa pergunta ao usuário quantos números de identificação de alunos ele deseja usar, e armazena o valor informado na variável quantidade_numeros
  • Depois, é criada uma lista de nome “números” contendo os valores sequenciais de 1 até a quantidade fornecida pelo usuário
  • Então, é definida uma função de nome ‘sortear_numero‘ para sortear e remover um número da lista
  • É perguntado ao usuário também quantos alunos, no máximo, devem estar em cada grupo, e o valor informado é armazenado na variável num_numeros_max_por_grupo.
  • Logo após, uma lista vazia de nome ‘grupos‘ é inicializada.
  • Os grupos são então gerados com base na quantidade de alunos e na quantidade máxima por grupo informadas. Para isso é empregado um laço while que continuará até que todos os alunos sejam alocados em grupos.
    A cada iteração, ele cria um grupo com no máximo o número de alunos especificado pelo usuário.
    A função sortear_numero é usada para escolher aleatoriamente os alunos para o grupo, e esses alunos são removidos da lista principal. Os grupos são armazenados na lista grupos.
  • Finalmente, o programa usa um laço for para exibir os grupos formados na tela, mostrando a que grupo cada aluno pertence.

Conclusão

O programa funcionou como esperado, e os alunos foram divididos em grupos de forma satisfatória (com alguns reclamando que queriam ficar no grupo do amigo, mas paciência!)

Há espaço para melhorias neste programa? Sem dúvidas. Por exemplo, poderiam ser atribuídos ‘pesos’ aos alunos, para indicar aqueles que possuem maior conhecimento dos que tem maior dificuldade de aprendizado, e assim ao atribuir os alunos ao grupos, evitar de colocar os melhores alunos em um mesmo grupo, deixando os alunos com maior dificuldade juntos.

Essa é uma modificação que farei futuramente no script – ou você mesmo pode tentar realizar, e se quiser, postar o código nos comentários aqui abaixo para compartilhar com o público em geral.

Colabore com a Bóson Treinamentos

Ajude o canal adquirindo meus cursos na Udemy:

Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: https://www.amazon.com.br/shop/bosontreinamentos

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

1 Comentário em Programa em Python que sorteia e divide alunos em grupos em uma turma

  1. valmor santos // 10/03/2024 em 18:26 // Responder

    ola amigo, grato pelo codigo, voce tem alguma dica de como poder atribuir esses pesos a determinados numeros?

Escreva um comentário

Seu e-mail não será divulgado


*