Compreender os fundamentos é essencial antes de mergulhar em qualquer linguagem de programação.
🗣️ Linguagens Naturais vs Linguagens de Programação
Comparativo
Aspecto
Linguagem Natural
Linguagem de Programação
Usuário
Humanos
Máquinas
Exemplo
Português, Inglês
Python, Java
Característica
Ambígua, flexível
Precisa, formal
Função
Comunicação
Instruções para computador
⚙️ Compilação vs Interpretação
Duas Formas de Tradução
Existem duas formas diferentes de transformar um programa de uma linguagem de alto nível em linguagem de máquina.
🔨 Compilação
Características
Aspecto
Descrição
Processo
Código fonte traduzido uma vez
Resultado
Gera executável específico para plataforma
Responsável
Compilador ou tradutor
Exemplos
C, C++, Go, Rust
🔄 Interpretação
Características
Aspecto
Descrição
Processo
Código fonte usado a cada execução
Resultado
Não gera executável separado
Responsável
Interpretador
Exemplos
Python, JavaScript, Ruby
Python
O Python é uma linguagem interpretada. Linguagens interpretadas também são chamadas de linguagens de scripting e os códigos são geralmente chamados de scripts.
📊 Comparativo
Qual é melhor?
Não existe melhor. Se existisse, o outro deixaria de ser utilizado. É uma questão de objetivo do projeto. Ambos têm vantagens e desvantagens.
Measure-Command {python3 arquivo.py} (mede tempo de execução)
📖 Termos Importantes
Biblioteca
É um conjunto de subprogramas e funções que podem ser reutilizados em programas.
API (Application Programming Interface)
“Interface de Programação de Aplicativos” - parecido com biblioteca, mas focada na integração entre sistemas. Permite utilizar funcionalidades de outros sistemas no seu programa, chamando funções remotas.
📦 Variáveis e Tipos de Dados 🆕
Uma variável é um espaço na memória do computador reservado para guardar um valor. Pense nela como uma caixa com um nome escrito na etiqueta: você guarda algo dentro, pode olhar o que está lá, e pode trocar o conteúdo quando quiser.
nome = "Ana" # string: textoidade = 17 # int: número inteiroaltura = 1.65 # float: número decimalaprovado = True # bool: verdadeiro ou falso
Regras para nomear variáveis
Use nomes descritivos: preco_produto é melhor que x
Sem espaços: use _ no lugar (estilo snake_case em Python)
Não comece com número: 2turma é inválido; turma2 é válido
Sem acentos em nomes de variáveis (boa prática universal)
Tipos de Dados Básicos em Python
Tipo
Nome técnico
Exemplo
Uso comum
Inteiro
int
42
Contadores, idades, quantidades
Decimal
float
3.14
Preços, medidas, porcentagens
Texto
str
"Olá"
Nomes, mensagens, código postal
Lógico
bool
True / False
Ligar/desligar, sim/não
Tipagem dinâmica no Python
Em Python, você não precisa declarar o tipo da variável. O interpretador descobre sozinho pelo valor atribuído. Isso é chamado de tipagem dinâmica e é uma das razões pelas quais Python é tão popular para iniciantes.
🔀 Estruturas Condicionais ✅
Condicionais permitem que o programa tome decisões com base em condições. É o mecanismo que dá ao código a capacidade de se comportar de maneiras diferentes dependendo dos dados.
nota = 7.5if nota >= 7: print("Aprovado!")elif nota >= 5: print("Recuperação")else: print("Reprovado")
Atenção à indentação
Em Python, o recuo (indentação) não é estético: ele é obrigatório e define quais linhas pertencem ao bloco if, elif ou else. Use 4 espaços (ou 1 Tab). Uma indentação errada causa erro de execução.
Operadores de Comparação
Operador
Significado
Exemplo
Resultado
==
igual a
5 == 5
True
!=
diferente de
3 != 4
True
>
maior que
7 > 3
True
<
menor que
2 < 1
False
>=
maior ou igual
5 >= 5
True
<=
menor ou igual
4 <= 3
False
Operadores Lógicos
Operador
Significado
Exemplo
Resultado
and
E (ambos verdadeiros)
True and False
False
or
OU (pelo menos um)
True or False
True
not
NÃO (inverte)
not True
False
🔁 Laços de Repetição (Loops) ♻️
Laços permitem repetir um bloco de código várias vezes sem reescrever as mesmas linhas. São essenciais para processar listas, contar, acumular resultados e automatizar tarefas repetitivas.
Laço for: quando sabemos quantas vezes repetir
for i in range(5): print(f"Iteração número {i}")
Saída:
Iteração número 0
Iteração número 1
Iteração número 2
Iteração número 3
Iteração número 4
Se a condição do while nunca se tornar falsa, o programa trava. Sempre garanta que o valor testado muda a cada iteração. Pressione Ctrl+C para interromper um programa travado no terminal.
Comparativo for vs while
Critério
for
while
Quando usar
Quantidade de repetições conhecida
Condição de parada variável
Risco de loop infinito
Baixo
Alto se mal programado
Percorrer lista
Natural (for item in lista)
Possível, mas mais verboso
Exemplo de uso
Processar 10 alunos
Ler até o usuário digitar “sair”
🛠️ Funções ⚙️
Uma função é um bloco de código com nome próprio que realiza uma tarefa específica. Você a escreve uma vez e pode chamá-la quantas vezes quiser, de qualquer ponto do programa.
calcular_media: nome da função (descritivo, snake_case)
nota1, nota2, nota3: parâmetros (entradas)
return: valor que a função devolve ao chamador
Por que usar funções?
Benefício
Explicação
Reutilização
Escreva uma vez, use em vários lugares
Legibilidade
Código com funções bem nomeadas lê como um texto
Manutenção
Corrija em um lugar, o efeito se propaga
Testabilidade
Funções isoladas são mais fáceis de testar
Boas práticas ao criar funções
Cada função deve fazer uma única coisa (princípio da responsabilidade única)
O nome deve descrever o que ela faz: prefira verbos (calcular_media, exibir_resultado)
Funções curtas (até ~20 linhas) são mais fáceis de entender e manter
🗺️ Mapa Conceitual: Do Dado ao Resultado
O diagrama abaixo mostra como os quatro blocos fundamentais se conectam num programa real:
flowchart TD
A[📦 Variáveis\nArmazenam dados] --> B[🔀 Condicionais\nif / elif / else]
A --> C[🔁 Laços\nfor / while]
B --> D[🛠️ Funções\nOrganizam e reutilizam]
C --> D
D --> E[✅ Resultado / Saída\nprint ou return]
A --> E
style A fill:#4A90D9,color:#fff,stroke:#2c5f8a
style B fill:#E8A838,color:#fff,stroke:#b07a1a
style C fill:#5BAD6F,color:#fff,stroke:#3a7a4a
style D fill:#9B59B6,color:#fff,stroke:#6c3483
style E fill:#2ECC71,color:#fff,stroke:#1a8a4a
Lendo o diagrama
Variáveis são a base: alimentam condicionais e laços. Condicionais e laços organizam o fluxo. Funções encapsulam esse fluxo para reuso. O resultado final é sempre uma saída: texto, cálculo ou ação.
🔗 Juntando Tudo: Exemplo Completo
O programa abaixo usa variáveis, condicional, laço e função em conjunto:
def classificar_nota(nota): if nota >= 7: return "Aprovado" elif nota >= 5: return "Recuperação" else: return "Reprovado"notas = [8.5, 4.0, 6.0, 9.5, 3.0]for i, nota in enumerate(notas, start=1): situacao = classificar_nota(nota) print(f"Aluno {i}: nota {nota:.1f} -> {situacao}")
Saída esperada:
Aluno 1: nota 8.5 -> Aprovado
Aluno 2: nota 4.0 -> Reprovado
Aluno 3: nota 6.0 -> Recuperação
Aluno 4: nota 9.5 -> Aprovado
Aluno 5: nota 3.0 -> Reprovado
O que este código demonstra
Variávelnotas: lista com os dados de entrada
Funçãoclassificar_nota: lógica encapsulada e reutilizável
Condicionalif/elif/else: tomada de decisão dentro da função
Laçofor: percorre cada nota sem repetir código
🧠 Atividades Mão na Massa
🧪 Atividade 1: Raio-X de um Programa no Python Tutor
Acesse o Replit e crie um novo projeto Python (sem instalar nada).
Implemente a função contar_aprovados exatamente como especificado abaixo.
Teste com as duas chamadas fornecidas e confirme que as saídas batem.
def contar_aprovados(lista_notas): aprovados = 0 for nota in lista_notas: if nota >= 7: aprovados += 1 return aprovados# Teste 1turma_a = [8.0, 5.5, 9.0, 3.0, 7.0]print(contar_aprovados(turma_a)) # deve imprimir: 3# Teste 2turma_b = [4.0, 4.5, 3.5]print(contar_aprovados(turma_b)) # deve imprimir: 0
Resultado observável: Os dois print produzem exatamente 3 e 0. Se algum valor for diferente, há um bug na lógica da condicional ou do contador.
Desafio extra: Modifique a função para retornar também a porcentagem de aprovados (ex.: 3 de 5 = 60.0%).
O que fazer:
O código abaixo tem dois bugs. Execute-o, leia a mensagem de erro e corrija cada problema.
def somar_pares(lista): total = 0 for numero in lista if numero % 2 = 0: total += numero return totalprint(somar_pares([1, 2, 3, 4, 5, 6]))
Pistas:
Bug 1: erro de sintaxe na linha do for (algo está faltando).
Bug 2: erro de operador na linha do if (confusão entre atribuição e comparação).
Resultado observável após a correção: O programa imprime 12 (soma de 2 + 4 + 6).
Entregável: Mostre o código corrigido e explique em uma frase por que cada operador/símbolo estava errado.
📖 Termos Complementares
Escopo de Variável
O escopo define onde uma variável pode ser acessada. Uma variável criada dentro de uma função (escopo local) não existe fora dela. Uma variável criada fora de qualquer função (escopo global) pode ser lida em todo o arquivo, mas modificá-la dentro de uma função exige cuidado.
mensagem = "Olá do escopo global"def exibir(): mensagem_local = "Olá do escopo local" print(mensagem) # OK: acessa variável global print(mensagem_local) # OK: variável local existe aquiexibir()# print(mensagem_local) # ERRO: variável local não existe aqui
Parâmetro vs Argumento
Parâmetro é o nome definido na assinatura da função (def soma(a, b)). Argumento é o valor passado na chamada (soma(3, 5)). A confusão entre os dois termos é comum, mas a distinção importa ao ler documentação técnica.
Algoritmo
Antes de escrever qualquer código, existe o algoritmo: uma sequência finita e ordenada de passos para resolver um problema. Todo programa é a implementação de um algoritmo numa linguagem específica. Você pode descrever um algoritmo em português (pseudocódigo) antes de traduzi-lo para Python.
🏆 Boas Práticas de Programação
Hábitos que fazem diferença desde o início
Nomes descritivos:calcular_imc diz mais que ci ou x
Comentários nos pontos não óbvios: explique o “por quê”, não o “o quê”
Uma função, uma responsabilidade: se precisar de “e” para descrever o que a função faz, considere dividir
Teste com casos extremos: zero, lista vazia, nota 10, nota 0
Indentação consistente: 4 espaços em Python (configure seu editor)
# Ruim: nome sem significado, sem comentáriodef f(x, y): return x / y# Bom: nome claro, trata divisão por zerodef calcular_media_turma(soma_notas, total_alunos): if total_alunos == 0: return 0 # evita divisão por zero em turmas sem alunos return soma_notas / total_alunos