Futsal (error) - Python

Asked

Viewed 28 times

0

Good people, I’m making a futsal code and I’m having certain obstacles with it. Currently, I am studying Python and for the first time applying POO, so I need you to give me a light on how to proceed here, since I tried some ways and it was not, at least links to help rs.

python

class Pessoa():
    def __init__(self, nome, sobrenome, posicao):
        self.nome = str(nome)
        self.sobrenome = str(sobrenome)
        self.posicao = str(posicao)

class Cartola():
    def __init__(self, RB, DD, DP, A, F, G, I, PP, PE, FC, GC, CA, CV, FS):
        self.RB = float(RB * 1.5)
        self.DD = float(DD * 3)
        self.DP = float(DP * 7)
        self.A = float(A * 5)
        self.F = float(F * 1.5)
        self.G = float(G * 8)
        self.I = float(I * -0.5)
        self.PP = float(PP * -4)
        self.PE = float(PE * -0.3)
        self.FC = float(FC * -0.5)
        self.GC = float(GC * -5)
        self.CA = float(CA * -2)
        self.CV = float(CV * -5)
        self.FS = float(FS * 0.5)

class Goleiro(Cartola):
    def __init__(self):
        super().__init__(DD, DP, PE, FC, CA, CV, FS)

    def getPontosGol(self):
        pontos = self.RB + self.DD + self.DP + self.PE + self.FC + self.CA + self.CV + self.FS
        return pontos

class Jogador(Cartola):
    def __init__(self, posicao, RB, A, F, G, I, PP, PE, FC, GC, CA, CV, FS):
        super().__init__(RB, A, F, G, I, PP, PE, FC, GC, CA, CV, FS)

    def getPontosJog(self):
        pontos = self.RB + self.A + self.F + self.G + self.I + self.PP + self.PE + self.FC + self.GC + self.CA + self.CV + self.FS
        return pontos

lista_team = []
listaTimeUm = []
listaTimeDois = []

def cadastroGoleiro():
    name_team = input('Digite o nome do seu time: \n')
    lista_team.append(name_team)
    
    # Cadastro Goleiro
    print('--- Cadastrando o Goleiro ! ---\n')
    nomeCompletoGoleiro = input('Insira o nome completo do Goleiro: ')
    separado = nomeCompletoGoleiro.split(' ')

    defesaDificil = input('Digite a quantidade de defesas difíceis: ')
    defesaPenalti = input('Digite a quantidade de defesas de pênalti: ')
    passeErrado = input('Digite a quantidade de passes errados: ')
    faltaCometida = input('Digite a quantidade de faltas cometidas: ')
    cartaoAmarelo = input('Digite a quantidade de cartões amarelos: ')
    cartaoVermelho = input('Digite a quantidade de cartões vermelhos: ')
    faltaSofrida = input('Digite a quantidade de faltas sofridas: ')

    pessoal = Pessoa(separado[0], separado[1], 'Goleiro')
    goleiro = Goleiro(defesaDificil, defesaPenalti, passeErrado, faltaCometida, cartaoAmarelo, cartaoVermelho, faltaSofrida)

    listaTimeUm.append(goleiro.getPontosGol().pontos)
        
cont = 0
pontosTotalJog = 0
nomeCompletoJogador = []
posicao = []
jogador = []
pessoa = []

def cadastroJogador():

    while cont != 4:
        print('--- Cadastrando o Jogador ! ---')

        full_name = input('Insira o nome completo do jogador: ')
        nomeCompletoJogador[cont].append(full_name)

        position = input('Insira a posição do jogador: ')
        posicao[cont].append(position)

        # Perguntas do jogador !
        roubadaBola = input('Digite a quantidade de roubadas de bola: ')
        assistencia = input('Digite a quantidade de assistências: ')
        finalizacao = input('Digite a quantidade de finalizações: ')
        gol = input('Digite a quantidade de gols: ')
        impedimento = input('Digite a quantidade impedimentos: ')
        penaltiPerdido = input('Digite a quantidade de pênaltis perdidos: ')
        passeErrado = input('Digite a quantidade de passes errados: ')
        faltaCometida = input('Digite a quantidade de faltas cometidas: ')
        golContra = input('Digite a quantidade de gols contras: ')
        cartaoAmarelo = input('Digite a quantidade de cartões amarelos: ')
        cartaoVermelho = input('Digite a quantidade de cartões vermelhos: ')
        faltaSofrida = input('Digite a quantidade de faltas sofridas: ')

        pessoa[cont] = Pessoa(separado[0], separado[1], posicao[cont])
        jogador[cont] = Jogador(posicao[cont], roubadaBola, assistencia, finalizacao, gol, impedimento, penaltiPerdido, passeErrado, faltaCometida, golContra, cartaoAmarelo, cartaoVermelho, faltaSofrida)
    
        listaTimeUm.append(jogador[cont].getPontosJog().pontos)

        cont += 1

cadastroGoleiro()
cadastroJogador()

This code is generating this error:

Traceback (most recent call last):
 File "C:\Python37\Scripts\futsal.py", line 105, in <module>
   cadastroGoleiro()
  File "C:\Python37\Scripts\futsal.py", line 62, in cadastroGoleiro
    goleiro = Goleiro(defesaDificil, defesaPenalti, passeErrado, 
faltaCometida, cartaoAmarelo, cartaoVermelho, faltaSofrida)
TypeError: __init__() takes 1 positional argument but 8 were given
  • The module I’m looking for to know what kind of error it is, but it seems to be something regarding calling the function at the end, but I didn’t understand what.
  • The 62 line was about me having instantiated in the Goalkeeper class my goalkeeper object with the answers I received from the questions I asked in the inputs, but I did not understand why he wants me to manage only and 1 argument being that I need 8. I am missing in the use of super() in function init of the Goalkeeper class?

PS: I haven’t even been able to perform the Player function yet due to such error.

1 answer

0

I don’t understand why he wants me to generate only and 1 argument being that I need 8

That’s the idea, but your code is saying that the __init__ of Goleiro takes only 1 argument, so passing 8 arguments results in an error.

Notice he’s like this

class Goleiro(Cartola):
    # recebe apenas self, implicitamente
    def __init__(self):
        super().__init__(DD, DP, PE, FC, CA, CV, FS)

When the idea was to be like this

class Goleiro(Cartola):
    def __init__(self, DD, DP, PE, FC, CA, CV, FS):
        super().__init__(DD, DP, PE, FC, CA, CV, FS)

In note, Cartola expects much more arguments than what the Goleiro receives. Even if the Goleiro do not use these attributes A, F, G, I, PP..., you should still boot them if you will inherit from Cartola

class Goleiro(Cartola):
    def __init__(self, DD, DP, PE, FC, CA, CV, FS):
        super().__init__(0, DD, DP, 0, 0, 0, 0, 0, PE, FC, 0, CA, CV, FS)

Browser other questions tagged

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