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.
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:
- Bancos de Dados com MySQL Básico: https://bit.ly/35QdWE4
- Lógica de Programação com Português Estruturado: https://bit.ly/3QKPn22
- Programação em Python do Zero: https://bit.ly/python-boson
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
ola amigo, grato pelo codigo, voce tem alguma dica de como poder atribuir esses pesos a determinados numeros?