Resumão de Python — Aulas 03 a 08
Este documento é uma referência rápida de tudo que você aprendeu até aqui. Não substitui as aulas — use-o para revisar antes de provas, consultar sintaxe durante exercícios ou identificar lacunas no seu aprendizado.
O que este resumão cobre
| Aula | Tema | Seção aqui |
|---|---|---|
| 03 | Tipos, variáveis e operadores | §1 e §2 |
| 04 | Estruturas de decisão | §3 |
| 05 | Funções e modularização | §4 |
| 06 | Bibliotecas e depuração | §5 |
| 07 | Estruturas de repetição | §6 |
| 08 | Strings | §7 |
1. Tipos de Dados e Variáveis
1.1 Os quatro tipos primitivos
Python identifica automaticamente o tipo pelo valor atribuído (tipagem dinâmica):
| Tipo | O que armazena | Exemplo de literal |
|---|---|---|
int | Números inteiros (sem casas decimais) | 42, -7, 0 |
float | Números reais (com casas decimais) | 3.14, -0.5, 1.0 |
str | Texto (sequência de caracteres) | "olá", 'Python' |
bool | Valor lógico | True, False |
idade = 21 # int
altura = 1.73 # float
nome = "Diego" # str
ativo = True # bool
print(type(idade)) # <class 'int'>
print(type(altura)) # <class 'float'>
print(type(nome)) # <class 'str'>
print(type(ativo)) # <class 'bool'>
1.2 Conversão entre tipos
Use as funções de conversão quando precisar transformar um tipo em outro — especialmente ao ler entradas do usuário com input(), que sempre retorna str:
| Função | Converte para | Exemplo |
|---|---|---|
int(x) | int | int("42") → 42 |
float(x) | float | float("3.14") → 3.14 |
str(x) | str | str(100) → "100" |
bool(x) | bool | bool(0) → False |
entrada = input("Digite sua idade: ") # entrada é str
idade = int(entrada) # converte para int
print(idade + 1) # agora funciona
input() sempre retorna str. Somar "5" + 3 causa TypeError. Sempre converta antes de operar.
1.3 Boas práticas para nomes de variáveis
- Use
snake_case:nota_final,nome_aluno,total_itens - Nomes descritivos:
media_turmaem vez dem - Evite palavras reservadas do Python:
for,if,print,type,list…
2. Operadores
2.1 Operadores aritméticos
| Operador | Operação | Exemplo | Resultado |
|---|---|---|---|
+ | Soma | 10 + 3 | 13 |
- | Subtração | 10 - 3 | 7 |
* | Multiplicação | 10 * 3 | 30 |
/ | Divisão real | 10 / 3 | 3.333… |
// | Divisão inteira | 10 // 3 | 3 |
% | Resto (módulo) | 10 % 3 | 1 |
** | Potência | 2 ** 10 | 1024 |
a, b = 10, 3
print(a / b) # 3.3333333333333335 ← sempre float
print(a // b) # 3 ← descarta o decimal
print(a % b) # 1 ← resto da divisão inteira
print(a ** b) # 1000
%- Verificar paridade:
n % 2 == 0→ par - Verificar divisibilidade:
n % 5 == 0→ múltiplo de 5 - Rotação de índices em ciclos
2.2 Operadores relacionais
Sempre retornam True ou False:
| Operador | Significado | Exemplo (a=10, b=3) | Resultado |
|---|---|---|---|
== | Igual | a == 10 | True |
!= | Diferente | a != b | True |
> | Maior que | a > b | True |
< | Menor que | a < b | False |
>= | Maior ou igual | b >= 3 | True |
<= | Menor ou igual | a <= 5 | False |
= é atribuição. == é comparação. Escrever if x = 5: é erro de sintaxe.
2.3 Operadores lógicos
Combinam expressões booleanas:
| Operador | Regra | Exemplo | Resultado |
|---|---|---|---|
and | Verdadeiro somente se ambos forem True | True and False | False |
or | Verdadeiro se pelo menos um for True | True or False | True |
not | Inverte o valor lógico | not True | False |
idade = 20
tem_documento = True
pode_entrar = idade >= 18 and tem_documento # True
dia_de_folga = False or True # True
bloqueado = not pode_entrar # False
2.4 Ordem de precedência
Do maior para o menor (operadores na mesma linha têm precedência igual):
Maior prioridade
** (potência)
*, /, //, % (multiplicação / divisão)
+, - (adição / subtração)
==, !=, >, <, >=, <= (relacional)
not (negação lógica)
and (conjunção)
or (disjunção)
Menor prioridade
Use parênteses para tornar a intenção explícita quando houver dúvida:
# Sem parênteses — pode ser confuso
resultado = 2 + 3 * 4 # 14 (multiplicação primeiro)
# Com parênteses — intenção clara
resultado = (2 + 3) * 4 # 20
3. Estruturas de Decisão
3.1 Mapa de uso
| Situação | Estrutura |
|---|---|
Executar algo apenas se uma condição for True | if simples |
| Dois caminhos mutuamente exclusivos | if / else |
| Três ou mais faixas/categorias | if / elif / else |
| Comparar uma variável com valores fixos e conhecidos | match / case |
3.2 Formas do if
# Decisão simples
if idade >= 18:
print("Maior de idade")
# Decisão binária
if nota >= 6.0:
print("Aprovado")
else:
print("Reprovado")
# Múltiplos caminhos — elif é avaliado em ordem; para assim que uma condição for True
if media >= 9:
conceito = "A"
elif media >= 8:
conceito = "B"
elif media >= 7:
conceito = "C"
elif media >= 6:
conceito = "D"
else:
conceito = "F"
elifOs ramos são avaliados de cima para baixo e o primeiro True encerra a busca. Por isso, coloque as faixas mais restritivas (maiores valores) primeiro.
3.3 Condições compostas
# AND: as duas devem ser True
if idade >= 18 and tem_documento:
print("Entrada permitida")
# OR: pelo menos uma True
if dia == "sábado" or dia == "domingo":
print("Fim de semana")
# NOT: inverte
if not esta_bloqueado:
print("Acesso liberado")
3.4 match / case (Python 3.10+)
Use quando você compara uma variável com valores fixos e enumeráveis. O case _: é o caso padrão (equivalente ao else):
opcao = 2
match opcao:
case 1:
print("Cadastrar")
case 2:
print("Listar")
case 3:
print("Sair")
case _:
print("Opção inválida")
Múltiplos valores no mesmo case com |:
match dia:
case "sábado" | "domingo":
print("Fim de semana")
case _:
print("Dia útil")
match/case vs if/elifUse match/case para valores discretos e fixos (menu, código de status, nome de comando). Use if/elif para intervalos e condições complexas (faixas de notas, comparações com and/or).
4. Funções
4.1 Anatomia de uma função
# ① nome ② parâmetros
def calcular_media(n1, n2, n3):
"""③ Docstring: descreve o que a função faz."""
resultado = (n1 + n2 + n3) / 3 # ④ corpo
return resultado # ⑤ retorno
① def — palavra-chave que inicia a definição
② Parâmetros — variáveis locais que recebem os argumentos na chamada
③ Docstring — string de documentação (opcional, mas recomendada)
④ Corpo — bloco indentado com a lógica da função
⑤ return — entrega um valor ao chamador (sem return, a função devolve None)
4.2 Chamada e argumentos
# Definição
def soma(a, b):
return a + b
# Chamadas
resultado = soma(10, 7) # argumentos posicionais
print(resultado) # 17
print(soma(3, soma(4, 5))) # composição: soma(3, 9) → 12
4.3 Parâmetros com valor padrão
Tornam o argumento opcional. Sempre vêm depois dos parâmetros obrigatórios:
def saudacao(nome, periodo="dia"):
print(f"Bom {periodo}, {nome}!")
saudacao("Ana") # Bom dia, Ana!
saudacao("Carlos", "tarde") # Boa tarde, Carlos!
4.4 return vs print — a distinção mais importante
print | return | |
|---|---|---|
| O que faz | Exibe na tela | Entrega valor ao chamador |
| Quem usa | O humano | O programa |
| Valor resultante da chamada | None | O valor especificado |
| Permite composição? | ❌ | ✅ |
def dobro_errado(n):
print(n * 2) # exibe, mas não entrega
def dobro(n):
return n * 2 # entrega
x = dobro_errado(5) # x é None ← bug silencioso
y = dobro(5) # y é 10 ← correto
print(y + 1) # 11
Usar print dentro de uma função quando se precisa do valor para cálculos posteriores é um dos bugs mais comuns em iniciantes. Dentro de funções, prefira return.
4.5 Escopo de variáveis
Variáveis criadas dentro de uma função são locais — não existem fora dela:
def quadrado(x):
resultado = x ** 2 # resultado é local
return resultado
print(quadrado(5)) # 25
# print(resultado) # NameError: não existe aqui
Variáveis definidas fora de qualquer função são globais e podem ser lidas dentro de funções, mas não modificadas sem global (evite global — use parâmetros e return):
# ❌ Ruim — usa global
contador = 0
def incrementar():
global contador
contador += 1
# ✅ Bom — parâmetro + return
def incrementar(contador):
return contador + 1
contador = incrementar(contador)
4.6 Composição de funções
A saída de uma função pode ser a entrada de outra — isso é composição:
def calcular_media(n1, n2, n3):
return (n1 + n2 + n3) / 3
def aprovado(media, minima=6.0):
return media >= minima
def formatar(nome, media, situacao):
return f"{nome} | {media:.2f} | {situacao}"
# Programa principal
media = calcular_media(8.0, 7.5, 9.0) # 8.17
status = "Aprovado" if aprovado(media) else "Reprovado"
relatorio = formatar("Ana", media, status)
print(relatorio) # Ana | 8.17 | Aprovado
5. Bibliotecas Padrão e Depuração
5.1 Como importar
import math # importa o módulo inteiro
from math import sqrt, pi # importa nomes específicos
import random # outro módulo
5.2 Módulo math
| Função / Constante | O que faz | Exemplo | Resultado |
|---|---|---|---|
math.pi | Constante π | math.pi | 3.14159… |
math.sqrt(x) | Raiz quadrada | math.sqrt(25) | 5.0 |
math.ceil(x) | Arredonda para cima | math.ceil(2.1) | 3 |
math.floor(x) | Arredonda para baixo | math.floor(2.9) | 2 |
math.pow(x, y) | Potência (retorna float) | math.pow(2, 8) | 256.0 |
math.log(x) | Logaritmo natural | math.log(math.e) | 1.0 |
import math
def area_circulo(raio):
return math.pi * math.pow(raio, 2)
def hipotenusa(a, b):
return math.sqrt(a**2 + b**2)
print(f"Área (r=5): {area_circulo(5):.2f}") # 78.54
print(f"Hipotenusa (3,4): {hipotenusa(3,4)}") # 5.0
5.3 Módulo random
| Função | O que faz | Exemplo |
|---|---|---|
random.randint(a, b) | Inteiro aleatório entre a e b (inclusive) | random.randint(1, 6) |
random.random() | Float aleatório entre 0.0 e 1.0 | random.random() |
random.choice(seq) | Escolhe um elemento aleatório | random.choice(["A","B","C"]) |
random.shuffle(seq) | Embaralha a lista no lugar | random.shuffle(cartas) |
import random
def rolar_dado(lados=6):
return random.randint(1, lados)
print(rolar_dado()) # número entre 1 e 6
print(rolar_dado(20)) # número entre 1 e 20
5.4 Outros módulos úteis da biblioteca padrão
| Módulo | Principais recursos |
|---|---|
statistics | mean(), median(), mode(), stdev() |
datetime | datetime.now(), date.today(), timedelta |
os | getcwd(), listdir(), path.exists() |
json | dumps(), loads(), dump(), load() |
string | ascii_letters, digits, punctuation |
5.5 Depuração com print
Adicione print temporários com prefixo [DEBUG] para inspecionar valores durante o desenvolvimento:
def calcular_desconto(preco, percentual):
print(f"[DEBUG] preco={preco}, percentual={percentual}")
desconto = preco * (percentual / 100)
print(f"[DEBUG] desconto={desconto}")
return preco - desconto
print(calcular_desconto(200, 15)) # Preço final: 170.0
Remova os [DEBUG] antes de entregar o código. No VS Code, use o atalho Ctrl+H para buscar e substituir todos de uma vez.
5.6 Depuração com o debugger do VS Code
| Ação | Atalho | O que faz |
|---|---|---|
| Definir breakpoint | Clique na margem esquerda | Pausa a execução naquela linha |
| Iniciar depuração | F5 | Executa até o próximo breakpoint |
| Step Over | F10 | Executa a linha atual, sem entrar em funções |
| Step Into | F11 | Entra dentro da função chamada |
| Continue | F5 | Retoma até o próximo breakpoint |
6. Estruturas de Repetição
6.1 Mapa de decisão: for ou while?
| Situação | Use |
|---|---|
| Quantidade de iterações conhecida antes de começar | for |
| Percorrer todos os elementos de uma coleção ou string | for |
| Repetir enquanto uma condição for verdadeira | while |
| Quantidade de iterações desconhecida (depende de entrada) | while |
| Parada antecipada por condição interna | for + break |
| Pular itens específicos mantendo o laço | for + continue |
6.2 Laço for
# Percorrer uma lista
frutas = ["maçã", "banana", "laranja"]
for fruta in frutas:
print(fruta)
# Percorrer uma string
for letra in "Python":
print(letra) # P y t h o n (um por linha)
6.3 range() — formas de uso
range(fim) # 0, 1, …, fim-1
range(inicio, fim) # inicio, …, fim-1
range(inicio, fim, passo)
| Chamada | Sequência gerada |
|---|---|
range(5) | 0 1 2 3 4 |
range(2, 7) | 2 3 4 5 6 |
range(0, 10, 3) | 0 3 6 9 |
range(10, 0, -2) | 10 8 6 4 2 |
O limite superior do range é exclusivo. range(1, 11) vai de 1 a 10, não de 1 a 11.
6.4 Laço while
# Forma básica
contador = 0
while contador < 5:
print(contador)
contador += 1 # ← sem isso, loop infinito!
# Padrão sentinela — leitura antes do while, releitura no fim do corpo
n = int(input())
soma = 0
quantidade = 0
while n != -1:
soma += n
quantidade += 1
n = int(input()) # ← releitura SEMPRE no fim do corpo
if quantidade > 0:
print(f"Média: {soma / quantidade:.2f}")
while- Sem atualização da condição no corpo → loop infinito
- Releitura no início do corpo → sentinela é processado
- Variável não inicializada antes do
while→NameError
6.5 break e continue
# break — encerra o laço imediatamente
for numero in range(1, 100):
if numero % 7 == 0:
print(f"Primeiro múltiplo de 7: {numero}") # 7
break
# continue — pula para a próxima iteração
for numero in range(1, 11):
if numero % 2 == 0:
continue # pula os pares
print(numero) # imprime 1 3 5 7 9
break não transforma for em whileO for ainda tem um teto máximo definido pelo range ou pelo tamanho da coleção. Use while quando realmente não há limite superior conhecido.
6.6 Ciclo de vida das variáveis em laços
Esta é a decisão mais importante ao escrever laços. Responda sobre cada variável:
"Esta variável pertence a um item ou ao conjunto?"
| Tipo | Onde inicializar | Exemplo |
|---|---|---|
| Persistente — acumula ao longo de todas as iterações | Fora do laço | total_aprovados na turma inteira |
| Com reset — começa do zero a cada iteração | Dentro do laço | soma das notas de um aluno |
| Flag booleana — registra evento em um item | Dentro do laço | tem_nota_zero desse aluno |
num_alunos = int(input())
aprovados = 0 # persistente — pertence à TURMA
for a in range(num_alunos):
soma = 0 # reset — pertence ao ALUNO
tem_zero = False # flag — pertence ao ALUNO
for j in range(3):
nota = float(input())
soma += nota
if nota == 0:
tem_zero = True
media = soma / 3
if media >= 6 and not tem_zero:
aprovados += 1 # atualiza o persistente
print(f"Aprovados: {aprovados} de {num_alunos}")
7. Strings
7.1 Indexação
Strings são sequências indexadas a partir do zero. Índices negativos contam do final:
P y t h o n
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
s = "Python"
print(s[0]) # P
print(s[-1]) # n (último)
print(s[-2]) # o (penúltimo)
7.2 Fatiamento (slicing)
Notação: s[inicio:fim:passo] — o fim é exclusivo:
| Expressão | Resultado | Descrição |
|---|---|---|
s[1:4] | "yth" | Índices 1, 2, 3 |
s[:3] | "Pyt" | Do início até o índice 2 |
s[3:] | "hon" | Do índice 3 até o fim |
s[::2] | "Pto" | Um a cada dois |
s[::-1] | "nohtyP" | String invertida |
texto = "algoritmo"
print(texto[:4]) # algo
print(texto[4:]) # ritmo
print(texto[::-1]) # omtirогla
7.3 Métodos de transformação de case
s = "olá, Mundo!"
print(s.upper()) # OLÁ, MUNDO!
print(s.lower()) # olá, mundo!
print(s.capitalize()) # Olá, mundo! (só a 1ª letra maiúscula)
print(s.title()) # Olá, Mundo! (1ª letra de cada palavra)
7.4 Métodos de limpeza
entrada = " dado com espaços "
print(entrada.strip()) # "dado com espaços" (remove das duas bordas)
print(entrada.lstrip()) # "dado com espaços " (só da esquerda)
print(entrada.rstrip()) # " dado com espaços" (só da direita)
7.5 Métodos de busca e substituição
frase = "café com leite e café"
print(frase.count("café")) # 2
print(frase.find("leite")) # 9 (índice da 1ª ocorrência; -1 se não achar)
print("café" in frase) # True
print(frase.replace("café","chá"))# chá com leite e chá
7.6 Métodos de divisão e junção
csv = "Alice,Bob,Carol"
nomes = csv.split(",") # ['Alice', 'Bob', 'Carol']
texto = " | ".join(nomes) # "Alice | Bob | Carol"
frase = "uma frase qualquer"
palavras = frase.split() # divide por espaço (padrão)
print(len(palavras)) # 3
7.7 Métodos de verificação (retornam bool)
| Método | Retorna True se… |
|---|---|
s.isalpha() | Todos os caracteres são letras |
s.isdigit() | Todos os caracteres são dígitos |
s.isalnum() | Todos são letras ou dígitos |
s.isspace() | Todos são espaços em branco |
s.startswith(prefixo) | String começa com prefixo |
s.endswith(sufixo) | String termina com sufixo |
s.isupper() | Todas as letras são maiúsculas |
s.islower() | Todas as letras são minúsculas |
print("abc".isalpha()) # True
print("123".isdigit()) # True
print("abc123".isalnum()) # True
print("hello".startswith("he")) # True
print("world".endswith("ld")) # True
7.8 Formatação com f-strings
Coloque a variável entre {} após o f. Use especificadores de formato após ::
| Especificador | Efeito | Exemplo | Saída |
|---|---|---|---|
.2f | Float com 2 casas decimais | f"{3.14159:.2f}" | "3.14" |
.0f | Float sem casas decimais | f"{8.7:.0f}" | "9" |
d | Inteiro | f"{42:d}" | "42" |
>10 | Alinhado à direita em 10 posições | f"{'Ana':>10}" | " Ana" |
<10 | Alinhado à esquerda em 10 posições | f"{'Ana':<10}" | "Ana " |
^10 | Centralizado em 10 posições | f"{'Ana':^10}" | " Ana " |
nome = "Ana"
nota = 8.756
print(f"Nome: {nome}") # Nome: Ana
print(f"Nota: {nota:.2f}") # Nota: 8.76
print(f"Arredondado: {nota:.0f}") # Arredondado: 9
print(f"{'Item':<12}{'Preço':>8}") # Item Preço
print(f"{'Caneta':<12}{1.50:>8.2f}")# Caneta 1.50
7.9 Iteração e comprimento
nome = "Carolina"
print(len(nome)) # 8
for letra in nome:
print(letra) # C a r o l i n a (um por linha)
# Contar vogais
vogais = sum(1 for c in nome.lower() if c in "aeiou")
print(vogais) # 5
Quadro-resumo: erros mais comuns
| Erro | Causa típica | Como corrigir |
|---|---|---|
TypeError: can only concatenate str (not "int") | Tentou somar str com int sem converter | Use int() ou float() na entrada |
NameError: name 'x' is not defined | Variável usada antes de ser criada | Inicialize a variável antes de usá-la |
IndentationError | Indentação inconsistente | Use sempre 4 espaços; nunca misture espaço e tab |
SyntaxError próximo a = numa condição | Usou = em vez de == | Troque if x = 5: por if x == 5: |
Loop infinito (while trava) | Condição nunca se torna False | Garanta que a variável da condição é atualizada no corpo |
Sentinela processado no while | Releitura no início do corpo | Mova a releitura para o fim do corpo |
Função retorna None | Esqueceu o return | Adicione return valor ao final da função |
| Reset no lugar errado | Acumulador iniciado fora do laço externo | Mova a inicialização para dentro do laço onde ela deve zerar |
Referências
Documentação Oficial
- Python Docs — Tutorial completo: https://docs.python.org/3/tutorial/
- Python Docs — Built-in Types: https://docs.python.org/3/library/stdtypes.html
- Python Docs — Control Flow: https://docs.python.org/3/tutorial/controlflow.html
- Python Docs — Defining Functions: https://docs.python.org/3/tutorial/controlflow.html#defining-functions
- Python Docs —
mathmodule: https://docs.python.org/3/library/math.html - Python Docs —
randommodule: https://docs.python.org/3/library/random.html - Python Docs — String Methods: https://docs.python.org/3/library/stdtypes.html#string-methods
Aprofundamento
- Real Python — Python Variables: https://realpython.com/python-variables/
- Real Python — Conditional Statements: https://realpython.com/python-conditional-statements/
- Real Python — Defining Your Own Python Function: https://realpython.com/defining-your-own-python-function/
- Real Python — Python Scope (LEGB Rule): https://realpython.com/python-scope-legb-rule/
- Real Python — Python
forLoops: https://realpython.com/python-for-loop/ - Real Python — Python
whileLoops: https://realpython.com/python-while-loop/ - Real Python — Python String Formatting: https://realpython.com/python-string-formatting/