---
# System prepended metadata

title: Revisão Julho - Lógica de Programação e Orientação a Objetos

---

---
title: Revisão Julho - Lógica de Programação e Orientação a Objetos
---

![](https://letscode-academy.com/assets/logo_lc_png.png)

----------

<center> <font size="+3"><b> Revisão</b></font></center>

<center> <font size="+2"><b> Lógica de Programação e Orientação a Objetos</b></font></center> 

----------

### Exercício 1 - Música

Crie uma classe chamada `Music` para modelar dados de uma música. Um objeto dessa classe deve possuir:

* Título (`str`)
* Autor (`str`)
* Gênero (`str`)
* Duração em segundos (`int`)
* Visualizações (`int`)

Uma música pode ser tocada através do método `play`, o qual além de acrescentar uma visualização ao respectivo atributo da música, deve mostrar na tela uma mensagem com um player, mostrando: 

* tempo faltando em minutos e segundos;
* tempo passado em minutos e segundos;
* uma sequência de hashtags `#` e hífens `-` que devem ser proporcionais ao tempo reproduzido da música. 
 
Como exemplo:

`00:30 #####-------------- 01:30`

Observe que já passou 1/4 da música (30 s) de um total de 2 min (120 s), portanto, 1/4 dos símbolos é composto por `#` e o restante por `-`.

:::spoiler Dica
Para atualizar o valor de uma mensagem mostrada, sem criar uma nova linha, pode-se usar o print da seguinte forma:
 
```python
import time

for x in range(10):
    print(f'{x}\r', end = '')
    time.sleep(1)
print()
```

O `print` com `\r` no final da string a ser mostrada faz com que o cursor volte para o início do texto. Dessa forma, na próxima vez que algo for mostrado na tela, sobrescreverá o que estava escrito antes.
:::

----------

### Exercício 2 - Playlist

Crie uma classe chamada `Playlist` que deverá conter um atributo para guardar todas as músicas da playlist. Cada música da playlist deve ser uma instância da classe `Music` e os seus atributos devem ser todos privados. Como métodos, devemos ter ao menos:

- `add`, que adicionará uma música nova à playlist;
- `search`, que dado o nome ou parte do nome d euma música, tocará uma música na playlist;
- `remove`, que removerá uma música da playlist buscando pelo nome;
- `play`, que tocará todas as músicas da playlist, podendo ser na ordem que as músicas estão na playlist, em ordem de views, ou em ordem aleatória;
- `move`, que dado nome ou parte do nome de uma música e um número, irá colocar a música na sequência indicada, empurrando todas as outras para baixo.

:::warning
Sempre que realizar uma alteração sensível ou com possibilidade de ambígua na playlist (`move` e `remove`), uma mensagem de confirmação deve ser exibida.
:::