# Loop  While-For

Os loops são fundamentais na programação que permite a repetição de um bloco de código. Para isso vou explicar de forma breve sobre o [🖱️while](https://www.freecodecamp.org/portuguese/news/tutorial-de-lacos-while-em-python-exemplos-de-sintaxe-while-true-e-lacos-infinitos/) e o [🖱️for](https://www.comoprogramarempython.com.br/docs/como-programar-em-python-for) .

## 🔄While

O loop **while** é utilizado quando você quer repetir um bloco de código enquanto uma condição específica for <mark>verdadeira</mark>, ou quando é indeterminado (não tem um *fim* específico). A **estrutura básica** é:

```python
while condição:
    #código a ser repetido enquanto a condição for verdadeira 
    #Atualização da condição (para evitar loops infinitos)
```

Há diferentes formas de criar um loop, por exemplo, imagina criar um loop da frase &gt; "<mark>E ai?</mark>"

Exemplo prático:

```python
contador = 0
while contador < 5:
    print("E ai?")
    contador += 1
#irá repetir 5 vezes 'E ai?'
```

O while basicamente vai avaliar o parâmetro e se este for `True` (verdadeiro) ele continua funcionando, veja que o contador a cada loop incrementa em 1 (`contador+=1`) quando o while faz a comparação do contador sendo igual a 5, a condição vira `False` e este para de funcionar.

## 🔂For

O loop `for` é utilizado quando você precisa iterar sobre uma sequência (como uma lista, tupla, string, etc.). A **estrutura básica** é a seguinte:

```python
for variavel in sequencia:
    #código a ser repetido para cada elemento na sequencia
```

Ao contrário do `while` o for geralmente é usado quando se tem uma quantidade de vezes para repetir **específica**.

```python
for i in [0,1,2]:
    print("E ai?")
#irá repetir 3 'E ai?'
```

```python
for i in range(500):
    print("E ai?")
#repete 500 vezes 
```

O `range()` é uma função por padrão do python, no anterior código dentro do "for" tem `[0,1,2]` imagina escrever até o 500 🥵, ainda bem que existe o "range()".

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Quando não usa o iterador (i), usa ' _ ', significa que pode ser qualquer nome mas não tem relevância</div>
</div>

```python
for _ in range(500):
    print("E ai?")
#tem o mesmo efeito que o anterior código
```

```python
print("E ai?\n" * 5, end="")
#parece um loop mas não é
```

## 🛠️While e For

Construindo um `input` para gerar a quantidade que for pedida. Por exemplo:

```python
while True:
    #esse loop vai aceitar só número positivos
    n =  int(input("Quantidade: "))
    if n > 0:
        # uma vez optido o valor o programa para 
        break
for _ in range(n):
    print("E ai?")
```

E se adicionarmos tudo isso dentro de [😎 funções,](https://hashnode.com/post/clrmleteb000409iccjn3e01g) como foi aprendido anteriormente.

```python
def main():
    #o primeiro que foi criado 
    vezes = get_number()
    repete(vezes)

def get_number():
    #essa fun vai pegar um valor
    while True:
        n = int(input("Quantidade: "))
        if n > 0:
            break
    return n    #retornar um valor para aperfeiçoar o tratamento

def repete(n):
    for _ in range(n):
        print("E ai?")

main()  #lembre sempre de chamar a função principal
```
