1
resposta

Mão na massa: refatorando uma função

class Musica:
       musicas = []
    def __init__(self, nome, artista, duracao):
        self.nome = nome
        self.artista = artista
        self.duracao = duracao
        Musica.musicas.append(self)

    def __str__(self):
        return f'{self.nome} | {self.artista} | {self.duracao}'

def listar_musica():
        for mnusica in musicas:
musica1 = Musica('In da Club', '50Cent', 3:14)
musica2 = Musica('Ventos dos Areais', 'Soweto', 4:06)
musica3 = Musica('Descobridor dos Sete Mares', 'Tim Maia', 4:26)

Musica.listarMusica()
1 resposta

Bom dia, Luciano! Como vai?

O código que você apresentou não está sendo executado corretamente. Tanto por erros de indentação, quanto por erros de sintaxe e lógica.

Um deles, por exemplo, é atribuir 3:14 a uma variável inteira. Isso não é possível por causa do uso dos dois pontos. Uma alternativa seria definir a duração como uma string ou usar a classe timedelta para representar os minutos e segundos.

A correção completa ficaria assim:

from datetime import timedelta

class Musica:
  musicas = []
  
  def __init__(self, nome, artista, duracao):
      self.nome = nome
      self.artista = artista
      self.duracao = duracao
      Musica.musicas.append(self)

  def __str__(self):
      return f'{self.nome} | {self.artista} | {self.duracao}'

  def listar_musica():   # Indentação corrigida
      for musica in Musica.musicas:   # Trecho corrigido
        print(f'{musica.nome} | {musica.artista} | {musica.duracao}')

musica1 = Musica('In da Club', '50Cent', timedelta(minutes=3, seconds=14))   # Uso do timedelta
musica2 = Musica('Ventos dos Areais', 'Soweto', timedelta(minutes=4, seconds=6))
musica3 = Musica('Descobridor dos Sete Mares', 'Tim Maia', timedelta(minutes=4, seconds=26))

Musica.listar_musica()   # Nome da função corrigida

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!