Conceitos Gerais de Programação

Base para Todo Programador

Compreender os fundamentos é essencial antes de mergulhar em qualquer linguagem de programação.


🗣️ Linguagens Naturais vs Linguagens de Programação

Linguagem Natural vs Programação

Comparativo

AspectoLinguagem NaturalLinguagem de Programação
UsuárioHumanosMáquinas
ExemploPortuguês, InglêsPython, Java
CaracterísticaAmbígua, flexívelPrecisa, formal
FunçãoComunicaçãoInstruçõ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

Processo de Compilação

Características

AspectoDescrição
ProcessoCódigo fonte traduzido uma vez
ResultadoGera executável específico para plataforma
ResponsávelCompilador ou tradutor
ExemplosC, C++, Go, Rust

🔄 Interpretação

Características

AspectoDescrição
ProcessoCódigo fonte usado a cada execução
ResultadoNão gera executável separado
ResponsávelInterpretador
ExemplosPython, 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

Vantagens e Desvantagens

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.

📺 Linguagem Compilada vs Interpretada | Qual é melhor?


🧪 Exemplo Prático: Compilação vs Interpretação

Linguagem Compilada (C)

1. Criar arquivo C (hello.c):

#include <stdio.h>
 
int main() {
    printf("Hello, World!\n");
    return 0;
}

2. Compilar:

gcc hello.c -o hello

3. Executar:

./hello

Linguagem Interpretada (Python)

1. Criar arquivo Python (hello.py):

print("Olá, mundo!")

2. Executar:

python hello.py

Criando arquivo no Windows (PowerShell)

  1. Abrir o PowerShell
  2. Escolher uma pasta
  3. type nul > arquivo.py
  4. notepad arquivo.py
  5. python3 arquivo.py
  6. 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: texto
idade = 17         # int: número inteiro
altura = 1.65      # float: número decimal
aprovado = 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

TipoNome técnicoExemploUso comum
Inteiroint42Contadores, idades, quantidades
Decimalfloat3.14Preços, medidas, porcentagens
Textostr"Olá"Nomes, mensagens, código postal
LógicoboolTrue / FalseLigar/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.5
 
if 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

OperadorSignificadoExemploResultado
==igual a5 == 5True
!=diferente de3 != 4True
>maior que7 > 3True
<menor que2 < 1False
>=maior ou igual5 >= 5True
<=menor ou igual4 <= 3False

Operadores Lógicos

OperadorSignificadoExemploResultado
andE (ambos verdadeiros)True and FalseFalse
orOU (pelo menos um)True or FalseTrue
notNÃO (inverte)not TrueFalse

🔁 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

Laço while: enquanto uma condição for verdadeira

contador = 0
while contador < 3:
    print(f"Contador: {contador}")
    contador += 1

Cuidado com loops infinitos

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érioforwhile
Quando usarQuantidade de repetições conhecidaCondição de parada variável
Risco de loop infinitoBaixoAlto se mal programado
Percorrer listaNatural (for item in lista)Possível, mas mais verboso
Exemplo de usoProcessar 10 alunosLer 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.

def calcular_media(nota1, nota2, nota3):
    soma = nota1 + nota2 + nota3
    media = soma / 3
    return media
 
resultado = calcular_media(8.0, 7.5, 9.0)
print(f"Média: {resultado:.1f}")

Anatomia de uma função Python

  • def: palavra-chave que inicia a definição
  • 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ícioExplicação
ReutilizaçãoEscreva uma vez, use em vários lugares
LegibilidadeCódigo com funções bem nomeadas lê como um texto
ManutençãoCorrija em um lugar, o efeito se propaga
TestabilidadeFunçõ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ável notas: lista com os dados de entrada
  • Função classificar_nota: lógica encapsulada e reutilizável
  • Condicional if/elif/else: tomada de decisão dentro da função
  • Laço for: percorre cada nota sem repetir código

🧠 Atividades Mão na Massa

🧪 Atividade 1: Raio-X de um Programa no Python Tutor

Ferramenta: pythontutor.com

O que fazer:

  1. Acesse pythontutor.com e cole o código abaixo no editor.
  2. Clique em “Visualize Execution”.
  3. Clique em “Next” passo a passo e observe o painel direito.
def dobrar(x):
    resultado = x * 2
    return resultado
 
numeros = [3, 7, 10]
saida = []
 
for n in numeros:
    saida.append(dobrar(n))
 
print(saida)

Resultado observável (o que anotar):

  • Qual o valor de resultado quando n = 7?
  • Em que momento a lista saida recebe seu segundo elemento?
  • O que acontece com a variável x após o return?

Entregável: Print da tela do Python Tutor no passo em que n = 10 está em execução, com a pilha de chamadas (call stack) visível.


🧪 Atividade 2: Função com Laço e Condicional no Replit

Ferramenta: replit.com/languages/python3

O que fazer:

  1. Acesse o Replit e crie um novo projeto Python (sem instalar nada).
  2. Implemente a função contar_aprovados exatamente como especificado abaixo.
  3. 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 1
turma_a = [8.0, 5.5, 9.0, 3.0, 7.0]
print(contar_aprovados(turma_a))   # deve imprimir: 3
 
# Teste 2
turma_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%).


🧪 Atividade 3: Caça ao Bug

Ferramenta: pythontutor.com ou replit.com

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 total
 
print(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 aqui
 
exibir()
# 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ário
def f(x, y):
    return x / y
 
# Bom: nome claro, trata divisão por zero
def 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

📚 Fontes (2026)