1
resposta

Resolução do exercício

import os
import platform

class Musica:
    """Classe que representa uma música."""

    def __init__(self, nome, artista, duracao) -> None:
        self.nome = nome
        self.artista = artista
        self.duracao = duracao

    def __str__(self) -> str:
        return f"Nome: {self.nome} | Artista: {self.artista} | Duração: {self.duracao}s"


def limpar_tela():
    """Limpa a tela do terminal."""
    if platform.system() == "Windows":
        os.system("cls")
    else:
        os.system("clear")


def main():
    """Função principal do programa."""
    lista_musicas = []

    while True:
        try:
            num_musicas = int(input("Digite quantas músicas você quer inserir: "))
            break
        except ValueError:
            print("Dado inválido! Digite um número inteiro.\n")

    # Coleta os dados de cada música
    for i in range(num_musicas):
        print(f"\n--- Música {i+1} ---")
        nome = input("Nome da música: ")
        artista = input("Nome do artista: ")

        while True:
            try:
                duracao = int(input("Duração em segundos: "))
                break
            except ValueError:
                print("Duração inválida! Digite um número inteiro.")

        # Cria um objeto Musica e adiciona na lista
        musica = Musica(nome, artista, duracao)
        lista_musicas.append(musica)

    # Exibe todas as músicas cadastradas
    print("\n" + "=" * 50)
    print("MÚSICAS CADASTRADAS".center(50))
    print("=" * 50)
    for musica in lista_musicas:
        print(musica)


if __name__ == "__main__":
    main()
1 resposta

Puxa, Eduardo,

Você fez uma implementação bem bacana e além do que foi pedido no exercício!

Você implementou bem o construtor da classe para inicializar os atributos dela já na instancialização.

Os blocos try/except foram bem empregados para garantir o tipo da informação esperada (inteiros). Considere colocar um range válido com valor máximo (como de 1 a 10) para evitar inteiros negativos ou valor máximo muito alto.

Você trouxe uma evolução no teste do OS para verificar qual função executar para a limpeza da tela, garantido portabilidade do código entre os OS. Todavia, a função nunca é executada, tornando-a desnecessária. ;o)

Isso é um requinte: numa próxima versão, considere implementar uma função para receber os inputs() que são inteiros, bastando passar as mensagens de texto como parâmetros da função, já que ambos fazem a mesma coisa.

Parabéns pelo esmero!