Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Ajuda nesse codigo

Estou fazendo um exercicio de criar um programa de cadastramento de musicas, porem quando executo o programa não printa o nome da musica que acabei de escrever. o programa não dá erro porem tambem não mostra o nome da musica. Alguem me ajuda por favor.

class Musica:
   musicas = []
   def __init__(self, nome, artista, genero, duracao ):
       self.nome = nome
       self.artista = artista 
       self.genero = genero
       self.duraçao = duracao
       Musica.musicas.append(self)
       
   def __str__(self):
       return self.nome

   def cadastramento():
       nome = input('Qual nome da musica que deseja cadastrar: ')
       artista = input('Qual o artista dessa música: ')
       genero = input('Qual o genero da música: ')
       duracao = input('Qual a duração da música: ')
      



   def listar_musicas():
       for musica in Musica.musicas:
           print(musica.nome)



   cadastramento()
Musica.listar_musicas()
2 respostas
solução!

Olá, Manuela.

Tudo bem?

Analisando o código, o problema principal é que a função cadastramento não está retornando ou armazenando a música que você está cadastrando. Além disso, a função cadastramento precisa ser um método da classe Musica.

Aqui está uma versão ajustada do seu código:

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

    @staticmethod
    def cadastramento():
        nome = input('Qual nome da musica que deseja cadastrar: ')
        artista = input('Qual o artista dessa música: ')
        genero = input('Qual o genero da música: ')
        duracao = input('Qual a duração da música: ')
        Musica(nome, artista, genero, duracao)  # Aqui criamos uma nova instância de Musica

    @staticmethod
    def listar_musicas():
        for musica in Musica.musicas:
            print(musica.nome)

# Cadastrando uma nova música
Musica.cadastramento()

# Listando as músicas cadastradas
Musica.listar_musicas()

Alterações realizadas:

  1. Transformei a função cadastramento em um método estático (@staticmethod) para que possa ser chamado diretamente da classe.
  2. Dentro do método cadastramento, criei uma nova instância da classe Musica com os dados inseridos pelo usuário.
  3. Corrigi o nome do atributo duracao (estava com um "ç" na definição do __init__).

Com essas mudanças, ao chamar Musica.cadastramento(), uma nova música será criada e adicionada à lista musicas. Em seguida, Musica.listar_musicas() irá imprimir o nome das músicas cadastradas.

Espero ter ajudado e bons estudos!

Muito obrigada me ajudou muito.