Aprenda Lógica de Programação na Prática
Estude os fundamentos da programação através de explicações simples e exercícios interativos em diversas linguagens.
- Módulos
- 13
- Exercícios
- 39
- Linguagens
- 8
# Primeiro algoritmo
def saudacao(nome):
if nome:
return "Olá, " + nome
return "Olá, mundo!"
for n in ["Ana", "Bob"]:
print(saudacao(n))
Um ciclo simples que fixa o conteúdo
Explicação, resumo, exercício e feedback imediato — tudo no mesmo lugar.
Aprenda
Leia uma explicação simples e objetiva do conceito.
Entenda
Veja um resumo com os pontos principais para fixar.
Pratique
Resolva um exercício para ganhar XP.
Aprenda os mesmos conceitos, na sintaxe que você prefere
Todos os exemplos e exercícios se adaptam automaticamente à linguagem escolhida. O conteúdo teórico permanece o mesmo.
🚀Introdução à Programação
O que é programar, algoritmo e lógica
Programar é escrever instruções que o computador executa para resolver um problema. Um algoritmo é uma sequência finita de passos e a lógica de programação é a forma de pensar para montar esses passos de forma clara e correta.
Entender a base do que significa programar antes de aprender qualquer linguagem específica.
Sempre. Toda vez que você transforma uma ideia em código, você usa lógica e algoritmos.
Uma receita de bolo é um algoritmo: passos ordenados que, se seguidos, produzem um resultado.
A palavra 'algoritmo' vem do matemático persa Al-Khwarizmi, do século IX.
Programar = escrever instruções. Algoritmo = passos ordenados. Lógica = raciocínio para montar esses passos.
# "Olá, mundo" em Python
print("Olá, mundo")Qual é a melhor definição de algoritmo?
Todas as linguagens de programação usam exatamente a mesma sintaxe.
Qual das opções descreve melhor a diferença entre 'lógica' e 'linguagem de programação'?
🧭Algoritmos e Fluxogramas
Planejando a solução antes do código
Antes de escrever código, é comum planejar em passos ou desenhar um fluxograma. Fluxogramas usam formas padrão: retângulo para ação, losango para decisão, paralelogramo para entrada/saída e círculo para início/fim.
Aprender a pensar em passos claros antes de programar.
Sempre que precisar organizar a solução de um problema antes de implementar.
Fazer login em um app: digitar usuário → digitar senha → verificar → entrar ou mostrar erro.
Os primeiros algoritmos escritos para máquinas foram criados por Ada Lovelace no século XIX.
Um algoritmo é uma sequência ordenada de passos. Fluxogramas ajudam a visualizá-los.
# Algoritmo: somar dois números
a = 5
b = 3
soma = a + b
print(soma)A ordem dos passos em um algoritmo pode alterar o resultado final.
Em um fluxograma, qual figura representa uma decisão?
Qual característica é essencial para um bom algoritmo?
📦Variáveis e Tipos de Dados
Armazenando informação
Uma variável é um espaço na memória com um nome, que guarda um valor. Cada valor tem um tipo: inteiro, decimal (float), texto (string), booleano (true/false). Algumas linguagens deduzem o tipo automaticamente, outras exigem que você declare.
Armazenar e reutilizar informações no programa.
Sempre que precisar guardar algo: um nome digitado, o resultado de um cálculo, um total.
É como uma caixa etiquetada: você escreve 'idade' na etiqueta e coloca o valor 25 dentro.
Em Python o tipo é dinâmico; em Java, C e Go você declara o tipo antes de usar.
Variáveis guardam informações. Tipos definem o que pode ser guardado (número, texto, verdadeiro/falso).
nome = "Maria"
idade = 25
altura = 1.68
ativo = True
print(nome, idade, altura, ativo)Para que serve uma variável?
Qual o tipo mais adequado para armazenar o valor 3.14?
O que este código imprime?
x = 10
x = x + 5
x = x * 2
print(x)🎤Entrada e Saída de Dados
Comunicação com o usuário
Programas recebem dados (entrada) e mostram resultados (saída). A entrada pode vir do teclado, de um arquivo ou de uma API. A saída pode ir para a tela, arquivo ou rede.
Tornar o programa interativo e útil.
Sempre que o programa precisar receber algo do usuário ou apresentar um resultado.
Digitar em um formulário (entrada) e ver a mensagem de confirmação na tela (saída).
O primeiro dispositivo de saída dos computadores modernos era uma impressora, não uma tela.
Entrada é o que o programa recebe; saída é o que ele devolve. Todo programa útil faz as duas coisas.
nome = input("Qual seu nome? ")
print("Olá,", nome)Um programa útil geralmente produz algum tipo de saída.
Em Python, qual instrução lê um valor digitado pelo usuário?
Ao ler um número com input() em Python, qual é o tipo do valor retornado?
➕Operadores
Matemáticos, relacionais e lógicos
Operadores realizam operações com valores. Matemáticos (+, -, *, /, %) fazem cálculos. Relacionais (>, <, ==, !=) comparam valores e devolvem verdadeiro ou falso. Lógicos (&&, ||, !) combinam condições.
Fazer cálculos e tomar decisões com base em comparações.
Em qualquer cálculo, comparação ou condição composta.
Verificar se 'idade >= 18 E possuiCarteira == true' antes de deixar alguém dirigir.
'=' é atribuição e '==' é comparação. Trocar os dois é um dos erros mais comuns de iniciantes.
Operadores fazem cálculos, comparam valores e combinam condições para tomar decisões.
a = 10
b = 3
print(a + b) # 13
print(a % b) # 1 (resto)
print(a > b) # True
print(a > 0 and b > 0) # TrueQual é o resultado de 10 % 3 (resto da divisão)?
Qual é o resultado de (5 > 2) && (3 < 1)?
O que este código imprime?
a = 7
b = 2
print(a // b, a % b)🔀Estruturas Condicionais
if, else, else if e switch
Estruturas condicionais permitem que o programa siga caminhos diferentes conforme uma condição. 'if' executa quando é verdadeira, 'else' quando é falsa, e 'else if' testa alternativas em sequência.
Tomar decisões durante a execução do programa.
Sempre que o comportamento depender de uma condição: idade, valor, resposta do usuário.
Se está chovendo, leve guarda-chuva; senão, leve óculos escuros.
'switch' costuma ser mais legível que vários 'else if' quando você compara a mesma variável com valores fixos.
Condicionais escolhem qual bloco de código executar com base em condições verdadeiro/falso.
idade = 20
if idade >= 18:
print("Adulto")
else:
print("Menor")O que este código imprime quando idade = 20?
idade = 20
if idade >= 18:
print("Adulto")
else:
print("Menor")O que este código imprime quando idade = 15?
idade = 15
if idade >= 18:
print("Adulto")
elif idade >= 12:
print("Adolescente")
else:
print("Criança")Quando o 'switch' (ou 'match') é mais recomendado que vários 'else if'?
🔁Estruturas de Repetição
for, while e do while
Loops repetem um bloco várias vezes. Use 'for' quando você sabe quantas vezes vai repetir, 'while' quando repete enquanto uma condição for verdadeira, e 'do while' quando precisa executar pelo menos uma vez.
Executar tarefas repetitivas sem duplicar código.
Percorrer listas, aplicar uma ação N vezes, esperar até algo acontecer.
Enquanto o balde não estiver cheio, continuar despejando água.
Loops infinitos (que nunca terminam) são um dos bugs mais famosos e podem travar programas inteiros.
Loops repetem instruções. Escolha entre for, while e do while conforme o caso.
for i in range(3):
print(i)Quantas vezes 'oi' é impresso?
for i in range(5):
print("oi")Qual o valor final de 'soma'?
soma = 0
for i in range(1, 5):
soma = soma + i
print(soma)Qual estrutura garante que o bloco execute pelo menos uma vez, mesmo que a condição seja falsa desde o início?
🗂️Vetores e Listas
Coleções unidimensionais
Vetores (também chamados de arrays ou listas) armazenam vários valores em uma única estrutura. Cada valor é acessado por um índice numérico. Na maioria das linguagens, o primeiro índice é 0.
Agrupar dados relacionados para manipular vários valores de uma vez.
Lista de alunos, notas de uma prova, itens de um carrinho, coordenadas em um jogo.
Uma prateleira numerada onde você acessa o item pela posição.
Em Python, listas podem crescer dinamicamente. Em C, o tamanho geralmente é fixo.
Vetores guardam vários valores organizados por índices numéricos, começando em 0.
nums = [10, 20, 30]
print(nums[0]) # 10
print(len(nums)) # 3Qual é o índice do primeiro elemento em um array na maioria das linguagens?
O que este código imprime?
nums = [5, 10, 15, 20]
print(nums[2])Se um vetor tem 5 elementos, qual é o índice do último elemento?
🧮Matrizes
Estruturas de duas dimensões
Matrizes são coleções organizadas em linhas e colunas — como uma tabela. Cada elemento é acessado por dois índices: [linha][coluna]. Podem ser usadas para tabuleiros de jogos, planilhas ou imagens.
Trabalhar com dados organizados em linhas e colunas.
Tabuleiros (xadrez, jogo da velha), tabelas, matrizes matemáticas, pixels de uma imagem.
Uma planilha do Excel: as células são acessadas pela linha e coluna.
Uma imagem digital nada mais é do que uma matriz de pixels — cada célula tem uma cor.
Matrizes são vetores de vetores, acessados por dois índices: linha e coluna.
matriz = [
[1, 2, 3],
[4, 5, 6],
]
print(matriz[1][2]) # 6Uma matriz é normalmente organizada em:
Dada a matriz {{1,2,3},{4,5,6},{7,8,9}}, o que retorna matriz[2][0]?
matriz = [[1,2,3],[4,5,6],[7,8,9]]
print(matriz[2][0])Toda matriz precisa ser quadrada (mesmo número de linhas e colunas).
🔤Strings
Trabalhando com texto
String é uma sequência de caracteres — palavras, frases, textos. Você pode concatenar, medir o tamanho, acessar caracteres por índice e comparar strings.
Manipular textos: nomes, mensagens, conteúdos digitados.
Formulários, mensagens, nomes de arquivos, respostas do usuário.
Compor uma mensagem juntando 'Olá, ' + nomeDoUsuário para saudar alguém.
Em muitas linguagens, strings são imutáveis: cada modificação cria uma nova string na memória.
Strings guardam texto. Você pode concatenar, medir e acessar caracteres por índice.
nome = "Prometeu"
print(len(nome)) # 8
print(nome.upper()) # PROMETEU
print(nome + " Code")O que é uma string em programação?
O que este código imprime?
s = "Prometeu"
print(len(s))Qual operação combina duas strings em uma só (ex: 'Olá' + 'Mundo')?
🧩Funções
Parâmetros, retorno e escopo
Funções são blocos de código reutilizáveis. Podem receber parâmetros (entradas) e retornar um valor (saída). Variáveis criadas dentro de uma função pertencem ao escopo local — não existem fora dela.
Organizar o código em blocos pequenos, reutilizáveis e fáceis de testar.
Sempre que uma lógica se repete ou representa uma tarefa bem definida.
Uma máquina de café: você coloca água e café (parâmetros) e recebe o café pronto (retorno).
Uma boa função faz uma única coisa bem feita. Se está fazendo várias, provavelmente deveriam ser várias funções.
Funções recebem entradas, executam uma tarefa e podem devolver um resultado.
def somar(a, b):
return a + b
print(somar(2, 3))Uma variável declarada dentro de uma função pode ser acessada livremente fora dela.
O que este código imprime?
def dobro(x):
return x * 2
print(dobro(5))Qual afirmação sobre funções está correta?
🛠️Boas Práticas e Depuração
Escrever código legível e caçar bugs
Bons programadores escrevem código claro: nomes descritivos, funções pequenas e comentários quando necessário. Depurar (debug) é o ato de encontrar e corrigir erros — usando prints, breakpoints ou ferramentas de debug.
Escrever código que outras pessoas (e você no futuro) consigam entender e corrigir com facilidade.
Sempre. Cada linha escrita será lida muitas vezes — priorize clareza.
Escrever uma receita com passos numerados e ingredientes bem separados, em vez de um texto corrido.
O termo 'bug' começou literalmente com um inseto preso em um computador da década de 1940.
Escreva código legível e aprenda a depurar — encontrar bugs faz parte do trabalho.
# Ruim: nomes obscuros
x = 60
y = x * 60
# Bom: nomes descritivos
segundos_por_minuto = 60
segundos_em_uma_hora = segundos_por_minuto * 60
print(segundos_em_uma_hora)Usar nomes descritivos em variáveis ajuda outras pessoas a entender o código.
O que significa 'depurar' (debug) um programa?
Qual é uma técnica útil quando um programa está apresentando comportamento inesperado?
🏆Desafios Integradores
Colocando tudo em prática
Chegou a hora de juntar variáveis, condicionais, loops e funções em um mesmo problema. Esses desafios simulam o que você faz no dia a dia: combinar conceitos simples para resolver algo maior.
Consolidar todos os fundamentos vistos até aqui em problemas integrados.
Como diagnóstico do que você já domina e do que ainda vale revisar.
Passar em uma prova prática depois de estudar cada tópico.
Programar bem é combinar poucos conceitos fundamentais de maneiras poderosas.
Junte variáveis, decisões, loops e funções para resolver problemas reais.
def eh_par(n):
return n % 2 == 0
for i in range(1, 6):
if eh_par(i):
print(i, "par")
else:
print(i, "ímpar")Qual saída este código produz para os números de 1 a 5?
for i in range(1, 6):
if i % 2 == 0:
print(i, "par")
else:
print(i, "ímpar")Você precisa somar todos os números de 1 até N. Qual combinação faz sentido?
O que a função retorna para contarPares([1, 2, 3, 4, 5, 6])?
def contarPares(nums):
total = 0
for n in nums:
if n % 2 == 0:
total += 1
return total
print(contarPares([1,2,3,4,5,6]))Continue estudando
Conclua todos os 13 módulos para desbloquear sua Conquista Prometeu Code. Você já respondeu 0 de 39 exercícios.