Estruturas Condicionais
A tomada de decissão em Python utiliza a palavra-chave if para avaliar expressões booleanas. A sintaxe exige dois pontos após a condição e indentação obrigatória para o bloco de código.
valor = 15
if valor > 20:
print("Acima do limite")
else:
print("Dentro do limite")
Para múltiplas verificações, emprega-se elif (abreviação de else if):
pontuacao = 85
if pontuacao >= 90:
conceito = "A"
elif pontuacao >= 80:
conceito = "B"
elif pontuacao >= 70:
conceito = "C"
else:
conceito = "D"
Estruturas aninhadas permitme verificações hierárquicas:
usuario = input("Usuário: ")
senha = input("Senha: ")
if usuario == "admin":
if senha == "segredo123":
print("Acesso concedido")
else:
print("Senha incorreta")
else:
print("Usuário não encontrado")
Laços de Repetição com while
O while executa um bloco enquanto sua condição permanecer verdadeira. Cuidado com loops infinitos quando a condição nunca se torna falsa.
indice = 0
while indice < 5:
print(f"Iteração: {indice}")
indice += 1
O comando break interrompe imediatamente o ciclo, enquanto continue pula para a próxima iteração:
contador = 0
while True: # Loop aparentemente infinito
contador += 1
if contador == 3:
continue # Pula a iteração 3
if contador > 5:
break # Encerra no 6
print(contador)
Exemplo prático: validação de entrada numérica com tentativas limitadas.
tentativas = 3
while tentativas > 0:
entrada = input("Digite um número entre 1 e 10: ")
if entrada.isdecimal() and 1 <= int(entrada) <= 10:
print("Entrada válida!")
break
tentativas -= 1
print(f"Tentativas restantes: {tentativas}")
Formatação de Strings
Três métodos principais para interpolra valores em textos:
Método format()
modelo = "Produto: {0} | Preço: R${1:.2f} | Estoque: {0}"
resultado = modelo.format("Notebook", 4500.00)
Com nomes de parâmetros para maior clareza:
relatorio = "Funcionário: {nome} | Departamento: {setor} | Anos: {tempo}"
relatorio.format(nome="Carla", setor="TI", tempo=5)
Interpolação com f-strings (Python 3.6+)
produto = "Monitor"
quantidade = 12
preco_unit = 899.90
mensagem = f"Item: {produto} | Qtd: {quantidade} | Total: R${quantidade * preco_unit:.2f}"
Operador % (estilo C)
dados = "Nome: %s | Idade: %d | Salário: R$%.2f" % ("Ana", 28, 5200.50)
Operadores Especiais
Operadores de Atribuição Composta
| Operador | Equivalente | Exemplo |
|---|---|---|
| += | x = x + y | saldo += deposito |
| -= | x = x - y | estoque -= venda |
| *= | x = x * y | total *= 1.1 |
| //= | x = x // y | parcelas //= 3 |
Operadores de Membro
Verificam presença em sequências:
frase = "Python é uma linguagem poderosa"
print("Python" in frase) # True
print("Java" not in frase) # True
numeros = [10, 20, 30, 40]
print(25 in numeros) # False
Avaliação de Curto-Circuito (and/or)
Quando operandos não são booleanos, and retorna o primeiro valor falso ou o último verdadeiro; or retorna o primeiro valor verdadeiro ou o último falso.
configuracao = usuario_ativo or "visitante" # Retorna usuario_ativo se existir, senão "visitante"
limite = maximo_conexoes and 100 # Retorna maximo_conexoes se for truthy, senão 100
Fundamentos Computacionais
Sistemas Numéricos
Conversão entre bases numéricas:
decimal = 255
binario = bin(decimal) # '0b11111111'
octal = oct(decimal) # '0o377'
hexadecimal = hex(decimal) # '0xff'
# Conversão inversa
original = int('0b11111111', base=2) # 255
Unidades de Armazenamento
| Unidade | Relação | Exemplo Prático |
|---|---|---|
| bit (b) | 0 ou 1 | Estado de um transistor |
| byte (B) | 8 bits | Representa um caractere ASCII |
| kilobyte (KB) | 1024 B | Pequeno arquivo de texto |
| megabyte (MB) | 1024 KB | Imagem de alta resolução |
| gigabyte (GB) | 1024 MB | Filme em HD |
Esquemas de Codificação
ASCII: 128 caracteres (7 bits), cobre inglês básico.
Unicode: Padrão universal com mais de 140.000 caracteres. Implementações:
- UCS-2: 2 bytes por caractere (limitado a 65.536 caracteres)
- UCS-4: 4 bytes por caractere (cobre todos os caracteres)
UTF-8: Codificação variável que otimiza espaço:
- Caracteres ASCII: 1 byte
- Letras latinas acentuadas: 2 bytes
- Caracteres asiáticos: 3 bytes
- Símbolos raros: 4 bytes
texto = "Café ☕"
dados_bytes = texto.encode('utf-8') # Converte string para bytes
texto_recuperado = dados_bytes.decode('utf-8') # Converte bytes para string
Tipos de Dados Fundamentais
Strings (str)
Sequências imutáveis de caracteres com métodos especializados:
email = " contato@empresa.COM "
# Normalização
email_limpo = email.strip().lower() # "contato@empresa.com"
# Validação
eh_numerico = "2024".isdecimal() # True
comeca_com = email_limpo.startswith("contato") # True
# Substituição
censurado = "O gato comeu o rato".replace("gato", "***")
# Divisão e junção
palavras = "Python;Java;Go;Rust".split(";")
novo_texto = " | ".join(palavras) # "Python | Java | Go | Rust"
Listas (list)
Coleções ordenadas e mutáveis:
notas = [7.5, 8.0, 6.5, 9.0]
# Operações in-place
notas.append(8.5) # Adiciona no final
notas.insert(0, 5.0) # Insere na posição 0
notas.sort(reverse=True) # Ordena decrescente
ultima = notas.pop() # Remove e retorna último elemento
Tuplas (tuple)
Coleções ordenadas e imutáveis, ideais para dados fixos:
coordenadas = (-23.5505, -46.6333) # São Paulo
rgb_vermelho = (255, 0, 0)
# Desempacotamento
latitude, longitude = coordenadas
Dicionários (dict)
Mapeamentos chave-valor com acesso O(1):
funcionario = {
"matricula": "F-2024-001",
"nome": "Roberto Silva",
"departamento": "Engenharia",
"ativo": True
}
# Acesso e modificação
funcionario["cargo"] = "Senior Developer"
del funcionario["ativo"]
# Iteração segura
for campo, informacao in funcionario.items():
print(f"{campo}: {informacao}")
Padrões Comuns de Código
Leitura de dados com validação robusta:
def obter_inteiro_positivo(mensagem):
while True:
entrada = input(mensagem).strip()
if entrada.isdecimal() and int(entrada) > 0:
return int(entrada)
print("Valor inválido. Tente novamente.")
idade = obter_inteiro_positivo("Informe sua idade: ")
Menu interativo com estrutura aninhada:
while True:
print("\n1. Consultar saldo")
print("2. Realizar transferência")
print("3. Sair")
opcao = input("Escolha: ").strip()
if opcao == "3":
print("Encerrando...")
break
elif opcao == "1":
print(f"Saldo atual: R$1.500,00")
elif opcao == "2":
destino = input("Conta destino: ")
valor = obter_inteiro_positivo("Valor: ")
print(f"Transferindo R${valor} para {destino}...")
else:
print("Opção inválida")