How to add a vector within a class?

-1

My teacher passed a job that says the following:

Create a Student class, which has a name and cpf as an attribute. Create another class called Team, which has as attribute a list of participants of type Student and other attribute called project. Create a third class called Team Manager. That class has as attribute a list of all the formed teams. It should have the createEquipe method, which receives a list of students from a team and tells you if the team can be formed or not. If there is no student of the team to be trained in another team with the same project, then the team is created and added to the list. Otherwise it is informed that the team can not be created.

I have my code as follows. Link here .

My question is:

As I added the vector within the Student class, or how I add the Student class within the vector.

I'm trying to resolve this issue that's giving me a headache.

    
asked by anonymous 14.09.2017 / 21:51

1 answer

1

It is as follows. There are some errors and practices that are not very good in your code. I'll try to show in your own code what I'm talking about. But before that, I'd like to explain something about arrays. A python array can be made up of any set of elements of any type (integers, floats, strings, objects, etc.), so if you want to add a Student class object to an array, just do array = array + object. Let's go to the code so I can show you some things. My comments are preceded by ###.

#coding: utf-8

#== CLASSE ALUNO ==#

#Adicionar quantidade de alunos usando vetor

quantidadeAlunos = input ("Informe a quantidade de alunos participantes: ")  ### Não precisa dessa variável para o problema

numAlunos = quantidadeAlunos ### Não precisa dessa variável
nomes = [] ### Não precisa dessa lista (ou array)
cpfs = [] ### Não precisa dessa lista

#Classe aluno
class Aluno():
    #Atributos
    nome = input ("Insira seu nome: ") ### Fazer um input dentro de uma classe me parece deselegante. Eu não faria isso. Até porque a questão não pede. Depois eu te mostro uma maneira melhor para você conseguir testar se está funcionando.
    cpf = input ("Insira seu cpf: ") ### Mesma coisa que o de cima

    #Métodos
    def __init__(self, nome = nome, cpf = cpf): ### Aqui vc pode colocar def __init__(self, nome, cpf):   caso vc tire os inputs de cima
        self.nome = nome
        self.cpf = cpf[:3] + "." + cpf[3:6] + "." + cpf[6:9] + "-" + cpf[9:]

    #def printAluno(self):
    #   print ("Nome: %s - CPF: %s" % (self.nome, self.cpf))

p = Aluno() ### Aqui, para instanciar um objeto Aluno, vc deverá passar como argumento os atributos nome e cpf, dessa forma: p = Aluno("joãozinho", "16734624789")   caso você tire os inputs também.
p.printAluno()

#== CLASSE EQUIPE ==#

class Equipe():
    nome = input ("Insira seu nome: ") ### Mesmo argumento da classe anterior
    cpf = input ("Insira seu cpf: ") ### Mesmo argumento

    def __init__(self, nome = nome, cpf = cpf): ### Aqui é o pulo do gato. Você deve receber uma lista (de alunos) e um projeto, então fica assim: def __init__(self, lista_de_alunos, projeto):
        self.nome = nome ### Aqui consequentemente fica: self.lista_de_alunos = lista_de_alunos
        self.cpf = cpf ### E a mesma coisa aqui para projeto: self.projeto = projeto

    def printAluno(self): ### Isso pode ser uma sobrecarga do operador print. Não é pedido no problema. Você pode fazer para conseguir printar o seu objeto no final, mas não vou entrar nesse detalhe. No código que eu fizer em baixo você vai ver um __str__(self), que é justamente o que esse cara faria.
        print ("Nome: %s - CPF: %s" % (self.nome, self.cpf))

### Aqui, para testes podemos criar uma lista de alunos assim: lista = [Aluno("Joao","123"),Aluno("Maria","145")]
### E podemos também criar um projeto assim: projeto = "lavar louça"
p = Aluno() ### Aqui você pode instanciar um objeto da classe Equipe dessa forma: equipe1 = Equipe(lista, projeto)
p.printAluno()

### Daqui para baixo deixo com você. Se você entender realmente o que fiz em cima, pode fazer o de baixo sozinho.
#== CLASSE GERENCIADOR DE EQUIPES ==#

class GerenciadorEquipes():
    nome = input ("Insira seu nome: ")
    cpf = input ("Insira seu cpf: ")

    def __init__(self, nome = nome, cpf = cpf):
        self.nome = nome
        self.cpf = cpf

    def printAluno(self):
        print ("Nome: %s - CPF: %s" % (self.nome, self.cpf))

p = Aluno()
p.printAluno()

I'll put the part of the code that I commented rewrite correctly down here.

#coding: utf-8

#== CLASSE ALUNO ==#
class Aluno():
    def __init__(self, nome, cpf):
        self.nome = nome # Atributo nome (ok)
        self.cpf = cpf[:3] + "." + cpf[3:6] + "." + cpf[6:9] + "-" + cpf[9:] # Atributo cpf (ok)

    def __str__(self):
        return "Nome: " + str(self.nome) + " - CPF: " + str(self.cpf)

# TESTE DA CLASSE ALUNO #
aluno_exemplo = Aluno("Joao","12345678901")
print aluno_exemplo


#== CLASSE EQUIPE ==#
class Equipe():
    def __init__(self, lista_de_alunos, projeto):
        self.lista_de_alunos = lista_de_alunos # Atributo lista de participantes (ok)
        self.projeto = projeto # Atributo projeto (ok)

    def __str__(self):
        return "Nome: " + str(self.lista_de_alunos) + " - Projeto: " + str(self.projeto)

# TESTE DA CLASSE EQUIPE #
equipe_exemplo = Equipe([aluno_exemplo, Aluno("Maria","12345257901")], "Projeto Abacaxi") # Apenas com dois alunos para facilitar a vida :D
print equipe_exemplo
    
15.09.2017 / 17:26