How to add an array within a class?

Asked

Viewed 807 times

-1

My teacher passed a paper that says the following:

Create a Student class, which has as attribute a name and Cpf. 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 Pathfinder. This class has as attribute a list of all formed teams. It must have the method create Team, which receives a list of students from a team and tells if the team can be formed or not. If there is no student of the team to be formed in another team with the same project, then the team is created and added to the list. Otherwise is informed that the team cannot be created.

I have my code as follows. Link here.

My question is:

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

I’m trying to solve this question that’s giving me a headache.

1 answer

2


Here’s the thing. There are some errors and practices that are not very good in your code. I’ll try to show you in your own code what I’m talking about. But before that, I’d like to explain something to you about arrays. A python array can be formed from any set of elements of any type (integers, floats, strings, objects, etc.), so if you want to add an object of the Student class 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 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
  • Poxa! Took away many other doubts of mine. With this I can unroll. You commented on the other two classes, that’s what took away a lot of my doubts. I had just copied and pasted, nor had I tried to implement anything. I haven’t finished this work yet. But it will work out! Thanks for the help.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.