# 2. Estruturas Condicionais e Repeticao

## Introdução

As estruturas de controle no Python dependem fundamentalmente da **indentação**. Onde outras linguagens usam chaves `{}` ou palavras-chave como `fi` ou `done`, o Python usa espaços em branco (recomendado 4 espaços).

## Estruturas Condicionais (if, elif, else)

Diferente do Bash que usa `if [ condition ]`, Python usa uma sintaxe mais limpa.

```python
status_code = 200

if status_code == 200:
    print("Sucesso!")
elif status_code == 404:
    print("Não encontrado.")
else:
    print("Outro erro.")
```

### Operadores Lógicos e de Comparação

* **Comparação:** `==`, `!=`, `<`, `>`, `<=`, `>=`.
* **Lógicos:** `and`, `or`, `not`.
* **Identidade e Pertencimento:** `is`, `is not`, `in`, `not in`.

## Estruturas de Repetição (Loops)

### Loop `for`

O `for` do Python é, na verdade, um *foreach*. Ele itera sobre itens de qualquer sequência (lista, string, range).

```python
# Iterando sobre uma lista de portas
ports = [21, 22, 80, 443]
for port in ports:
    print(f"Escaneando porta: {port}")

# Usando range(inicio, fim, passo)
for i in range(1, 10, 2):
    print(i) # 1, 3, 5, 7, 9
```

### Loop `while`

Executa o bloco enquanto a condição for verdadeira. Útil para processos contínuos (ex: escuta de sockets).

```python
tentativas = 0
while tentativas < 3:
    print("Tentando conexão...")
    tentativas += 1
```

## Controle de Fluxo: Break, Continue e Pass

* **`break`:** Interrompe o loop imediatamente.
* **`continue`:** Pula para a próxima iteração do loop.
* **`pass`:** Não faz nada. Usado como um "placeholder" para código que será escrito futuramente.

```python
for i in range(10):
    if i == 5:
        break # Para no 5
    if i % 2 == 0:
        continue # Pula números pares
    print(i)
```

## List Comprehension (Recurso Avançado)

Uma forma concisa de criar listas. Muito comum em scripts de automação.

```python
# Criar uma lista de portas abertas filtrando de uma lista bruta
raw_ports = [22, 80, 443, 8080]
open_ports = [p for p in raw_ports if p != 8080]
```

## Boas Práticas

1. **Mantenha a Indentação Consistente:** Misturar tabulações e espaços causará erros (`IndentationError`).
2. **Evite `if` aninhados demais:** Use `elif` ou funções auxiliares para manter o código legível.
3. **Use `enumerate()`:** Se precisar do índice e do valor ao iterar:

   ```python
   for i, port in enumerate(ports):
       print(f"Porta {i}: {port}")
   ```

{% hint style="info" %}
No contexto de Pentest, loops infinitos (`while True`) são comuns em ferramentas de escuta de rede e brute force, mas sempre implemente uma forma segura de interromper o processo (ex: Captura de `KeyboardInterrupt`).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/programacao-e-linguagens/python/2.-estruturas-condicionais-e-repeticao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
