1
resposta

Problema na impressão

Boa tarde, toda vez que eu rodo o código ele imprime o seguinte:

Nome: Atlanta - Ano: 2018 - Temporadas: 2 - Likes: 3 Nome: Vingadores - Guerra Infinita - Ano: 2018 - Temporadas: 160 - Likes: 4

Não entendo pq está retornando somente temporada e não temporada e duração

class programa:
    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._like = 0

    @property
    def like(self):
        return self._like

    def dar_like(self):
        self._like += 1

    @property
    def nome(self):
        return self._nome

    @nome.setter
    def nome(self, nome):
        self._nome = nome

class filme(programa):
    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.duracao = duracao

class serie(programa):
    def __init__(self, nome, ano, temporadas):
        super().__init__(nome, ano)
        self.temporadas = temporadas

vingadores = filme('vingadores - guerra infinita', 2018, 160)
vingadores.dar_like()
vingadores.dar_like()
vingadores.dar_like()
vingadores.dar_like()
#print(f'Nome: {vingadores.nome} - Ano:{vingadores.ano} - Duração:{vingadores.duracao} - Likes: {vingadores.like}')

atlanta = serie('atlanta', 2018, 2)
atlanta.dar_like()
atlanta.dar_like()
atlanta.dar_like()
#print(f'Nome: {atlanta.nome} - Ano: {atlanta.ano} - Temporadas: {atlanta.temporadas} - Likes: {atlanta.like}')

filmes_series = [atlanta, vingadores]

for programa in filmes_series:
    detalhes = programa.temporadas if hasattr (programa, "temporadas") else programa.duracao
    print(f'Nome: {programa.nome} - Ano: {programa.ano} - Temporadas: {detalhes} - Likes: {programa.like}')
1 resposta

Bom dia, Yago, tudo bem?

Só está aparecendo temporada devido ao print dentro do último for.

for programa in filmes_series:
    detalhes = programa.temporadas if hasattr (programa, "temporadas") else programa.duracao
    print(f'Nome: {programa.nome} - Ano: {programa.ano} - Temporadas: {detalhes} - Likes: {programa.like}')

O que o seu código está fazendo é o seguinte: ele vai checar se existe o atributo temporadas dentro de cada um de seus programas e jogar para a variável detalhes. Se não existir, será jogado para esta variável o atributo duracao. Note que não existe uma classe com duracao e temporadas como atributos ao mesmo tempo, então não tem como printar ambos ao mesmo tempo. Ou printa-se duracao ou printa-se temporadas. Note também que seu print fixa o tipo da variável detalhe como "Temporadas: ", mesmo se o que ele estiver printando na verdade é a duracao do filme, resultando na linha de saída que você apresentou: Nome: Vingadores - Guerra Infinita - Ano: 2018 - Temporadas: 160 - Likes: 4. O valor 160 deveria ser duração, não temporadas.

Para solucionar isso, pode-se alterar o for da seguinte forma:

for programa in filmes_series:
    detalhes = programa.temporadas if hasattr (programa, "temporadas") else programa.duracao
    tipo_detalhes = "Temporadas" if hasattr(programa, "temporadas") else "Duracao"
    print(f'Nome: {programa.nome} - Ano: {programa.ano} - {tipo_detalhes}: {detalhes} - Likes: {programa.like}')

Desta forma, ele printará o tipo correto do detalhe do programa.

Espero ter ajudado! Um abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software