Programação com Python

Tipos básicos, operadores e pensamento algorítmico.

Por Fábio Linhares • Instituto Infnet

Ao encarar as 16 questões a seguir, você não está só “fazendo continhas em Python”. Você está treinando o conjunto mínimo de competências que transforma alguém que copia código em alguém que constrói código com intenção. O desafio começa simples (comentários e print()), mas rapidamente vira um treino de raciocínio: organizar dados em variáveis, aplicar um fluxo claro de Entrada → Processamento → Saída (IPO), escolher tipos corretos (int, float, bool), operar com segurança em cálculos e, mais adiante, resolver problemas “de mundo real” que exigem arredondamento para baixo, resto de divisão, conversão de unidades e respeito à regra de negócio.

Se você conseguir resolver todas, você terá dominado estas skills/qualidades: você saberá ler enunciados como um programador. Isso significa extrair entradas, saídas, restrições (por exemplo: “somente unidades inteiras”, “tributa antes, soma suporte depois”, “parada só no fim do ciclo”) e transformar isso em passos claros. Em vez de “tentar até funcionar”, você passa a raciocinar em cima do que o problema realmente pede.

Você terá controle do básico com precisão: variáveis, atribuição e reatribuição (estado do programa), impressão de resultados, e principalmente a diferença entre “o código rodou” e “o código está correto”. Ao usar type() e trabalhar com int, float e bool, você consolida noções de tipagem prática: contagens não são valores monetários, e estados (ligado/desligado) não são números disfarçados.

Você dominará a aritmética que mais aparece em sistemas reais: soma, subtração, multiplicação, divisão, e o ponto crítico que muita gente tropeça — ordem das operações. Alguns exercícios te obrigam a usar parênteses não por estética, mas para garantir que a regra de negócio seja respeitada.

Você ganhará um “superpoder” de iniciante avançado: saber quando usar divisão comum (/) e quando usar divisão inteira (//) e resto (%). Isso é o coração de vários problemas práticos: capacidade máxima sem exceder, decomposição de tempo em horas/minutos, ciclos periódicos, e qualquer situação em que “não pode quebrar em fração”.

Você aprenderá a pensar em unidades e conversões sem se perder. Minutos para horas decimais, horas para segundos, energia por segundo, margem de segurança — isso é treino de engenharia mental: manter as grandezas consistentes e evitar “erros de unidade” (que são um tipo de bug silencioso e caro).

Você terá uma noção inicial de confiabilidade: calcular com clareza, nomear variáveis com significado, produzir saídas “devidamente sinalizadas” e construir resultados que outra pessoa consegue auditar. Em outras palavras, você começa a programar de um jeito que o time confia.

No fim, quem resolve todas essas questões sai com um núcleo sólido: consegue pegar um problema simples, modelar os dados, executar os cálculos corretos, justificar as escolhas (especialmente //, % e parênteses), e apresentar o resultado com clareza. Isso é exatamente a fronteira entre “aprendi comandos” e “aprendi programação”.

Pense em cada questão como um “micro-sistema”: identifique as entradas, os cálculos intermediários e as saídas. Antes de digitar, escreva em uma linha o que o programa deve fazer. A ideia é trocar tentativa-e-erro por intenção: você não “atira código na tela”; você desenha o fluxo (IPO) e depois o traduz em Python.
BLOCO 01
Exercícios 1–4: Comentários, print() e IPO
Objetivo: consolidar comentário, saída básica e o fluxo Entrada → Processamento → Saída.
Exercício 1 — Comentário com # (importância da programação)
Diagnóstico rápido: você só precisa escrever um comentário. Comentário não executa; serve para orientar humanos (e seu “eu” do futuro).
# Programar em Python permite automatizar tarefas repetitivas, reduzir erros humanos,
# padronizar processos e aumentar a eficiência: o computador faz o trabalho chato,
# rápido e reprodutível.

Validação: nada aparece na saída (porque comentário não roda).

Exercício 2 — Hello World com print()
Diagnóstico: imprimir uma mensagem literal na tela. Esse é o primeiro teste clássico para saber se o ambiente está ok.
print("Olá Mundo! Bem-vindo ao Cinema Digital")

Validação: o terminal deve mostrar exatamente a frase, sem erros de aspas ou parênteses.

Exercício 3 — Variáveis disciplina e turma + print()
Diagnóstico: guardar dados em variáveis antes de usar (organização do estado do programa).
disciplina = "Python"
turma = 101

print(disciplina)
print(turma)

Erro comum: esquecer aspas em "Python" (vira “nome de variável” e dá erro de variável não definida).

Exercício 4 — Fluxo IPO (Entrada → Processamento → Saída)
Diagnóstico: estruturar o programa em 3 etapas claras. Mesmo sem usar input() ainda, você já separa mentalmente Entrada, Processamento e Saída.
# Entrada
peso_unidade = 80
quantidade = 10

# Processamento
peso_total = peso_unidade * quantidade

# Saída
print(peso_total)

Validação: deve imprimir 800. Se o valor não bater, revise as variáveis e a operação.

BLOCO 02
Exercícios 5–7: Tipos básicos, type() e booleanos
Objetivo: diferenciar int, float e bool, e usar type() como ferramenta de inspeção.
Exercício 5 — Inventário: quantidade e preço
Diagnóstico: usar int para contagem e float para preço monetário.
quantidade_macas = 150
preco_maca = 5.99

print(quantidade_macas)
print(preco_maca)

Observação: 5.99 é float (decimal). Evite usar inteiros para valores com centavos.

Exercício 6 — Tipos básicos: int e float + type()
Diagnóstico: confirmar o tipo de cada variável e enxergar o que Python está guardando.
contratos = 12
faturamento = 2500.50

print(type(contratos))
print(type(faturamento))

Validação: deve aparecer algo como <class 'int'> e <class 'float'>. Use isso como “raio-X” rápido do seu estado.

Exercício 7 — Booleanos (True/False)
Diagnóstico: estado lógico muda e o programa reflete a mudança. Ótimo para treinar futuros if/else.
sensor_ativo = True
print(sensor_ativo)

sensor_ativo = False
print(sensor_ativo)

Erro comum: escrever true/false (minúsculo). Em Python é True/False com inicial maiúscula.

BLOCO 03
Exercícios 8–10: Soma, subtração e divisão
Objetivo: praticar operações aritméticas básicas em cenários de “sistemas reais”.
Exercício 8 — Soma de receita
Diagnóstico: somar dois valores monetários e guardar o resultado em uma nova variável.
venda_smartphones = 5400.00
venda_acessorios = 1250.50

receita_total = venda_smartphones + venda_acessorios
print(receita_total)

Validação: 6650.5 (pode aparecer como 6650.50 dependendo de formatação; se quiser 2 casas, use print(f"{receita_total:.2f}")).

Exercício 9 — Subtração de saldo
Diagnóstico: saldo final = saldo atual − fatura. Clássico de extrato bancário.
saldo_atual = 10000
valor_fatura = 3500

saldo_final = saldo_atual - valor_fatura
print(saldo_final)

Validação: 6500. Se o sinal estiver invertido, revise a ordem das variáveis na subtração.

Exercício 10 — Preço unitário (divisão)
Diagnóstico: preço unitário = preço do fardo ÷ unidades. Atenção para divisão entre float e int.
preco_fardo = 24.0
unidades = 6

preco_unitario = preco_fardo / unidades
print(preco_unitario)

Validação: 4.0. Note que o resultado é float mesmo dividindo por um inteiro.

BLOCO 04
Exercícios 11–12: Divisão inteira, resto e ciclos
Objetivo: usar // e % para problemas com unidades inteiras e ciclos periódicos.
Exercício 11 — Máximo de sacas (inteiro) + % de ocupação
Diagnóstico rápido: “unidades inteiras” pede divisão inteira (//). Depois calcula ocupação em porcentagem.
capacidade_kg = 550
peso_saca = 65

max_sacas = capacidade_kg // peso_saca
capacidade_real = max_sacas * peso_saca
ocupacao_percent = (capacidade_real / capacidade_kg) * 100

print("Max sacas:", max_sacas)
print("Capacidade real (kg):", capacidade_real)
print("Ocupação (%):", ocupacao_percent)

Validação esperada:

  • max_sacas: 8
  • capacidade_real: 520 kg
  • ocupacao_percent: ~94.545...%

Erro comum: usar / e obter número quebrado de sacas (o enunciado proíbe).

Exercício 12 — Ciclo de 8 dias: fase atual e dia total da parada
Diagnóstico: fase atual é o resto da divisão (%). Parada no fim do ciclo → próximo múltiplo de 8.
dias_decorridos = 125
periodo = 8

dia_atual_ciclo = dias_decorridos % periodo
dias_ate_parada = (periodo - dia_atual_ciclo) % periodo
total_dias_ate_parada = dias_decorridos + dias_ate_parada

print("Dia atual do ciclo (0 a 7):", dia_atual_ciclo)
print("Total de dias decorridos até a parada:", total_dias_ate_parada)

Validação:

  • dia atual do ciclo: 5
  • total até a parada: 128 (próximo fechamento de ciclo)

Armadilha: confundir “fim do ciclo” com “dia 7”. Na prática operacional, o “fim” costuma ser o instante em que completa 8 dias (múltiplo de 8), aqui 128.

BLOCO 05
Exercícios 13–14: Regra de negócio e conversão de unidades
Objetivo: respeitar a ordem das operações e treinar conversão consistente de unidades.
Exercício 13 — Tributação primeiro, suporte depois (uma linha)
Diagnóstico: imposto só sobre a base; suporte entra depois sem imposto. Parênteses importam aqui.
custo_base = 2500
aliquota = 0.05
suporte = 150

total_final = (custo_base * (1 + aliquota)) + suporte
print(total_final)

Validação: 2775.0. Sem os parênteses, você muda a regra de negócio (por exemplo, pode estar tributando também o suporte).

Exercício 14 — Minutos para horas decimais
Diagnóstico: converter minutos em horas = minutos / 60. Clássico de registro de ponto.
minutos = 345
horas_decimais = minutos / 60
print(horas_decimais)

Validação: 5.75. O enunciado pode citar outro equipamento, mas a tarefa aqui é registrar especificamente os 345 minutos.

BLOCO 06
Exercícios 15–16: Normalização de unidades e decomposição de tempo
Objetivo: consolidar conversão para segundos, margem de segurança e uso de // e % em tempo trabalhado.
Exercício 15 — Converter tudo para segundos e calcular energia + 15%
Diagnóstico rápido: normalizar unidade (segundos), somar tempos, multiplicar pela taxa (J/s) e só então aplicar margem.
voo1_horas = 3.77
voo2_minutos = 214
joules_por_segundo = 2.7
margem = 0.15

voo1_seg = voo1_horas * 3600
voo2_seg = voo2_minutos * 60

total_seg = voo1_seg + voo2_seg
energia = total_seg * joules_por_segundo
energia_com_margem = energia * (1 + margem)

print("Total (s):", total_seg)
print("Energia (J):", energia)
print("Energia com 15% (J):", energia_com_margem)

Validação numérica (aprox.):

  • total_seg26412.0
  • energia71312.4 J
  • energia_com_margem82009.26 J

Erros comuns: esquecer que 1h = 3600s; aplicar 15% antes de somar os voos (aqui a ordem não muda o resultado final, mas em outros problemas muda).

Exercício 16 — Separar horas inteiras e minutos excedentes + calcular pagamento
Diagnóstico: decomposição clássica com // e % (quociente e resto). Primeiro separam-se horas e minutos; depois calcula-se o valor pago.
total_minutos = 1527

valor_por_hora = 60.00
valor_por_minuto = 1.20

horas_trabalhadas = total_minutos // 60
minutos_excedentes = total_minutos % 60

valor_horas = horas_trabalhadas * valor_por_hora
valor_minutos = minutos_excedentes * valor_por_minuto
valor_total = valor_horas + valor_minutos

print("Horas trabalhadas:", horas_trabalhadas)
print("Minutos excedentes:", minutos_excedentes)
print("Valor pago pelas horas: R$", valor_horas)
print("Valor pago pelos minutos: R$", valor_minutos)
print("Valor total a receber: R$", valor_total)

Validação:

  • horas = 25
  • minutos excedentes = 27
  • valor horas = 1500.0
  • valor minutos = 32.4
  • total = 1532.4

Armadilha: usar / em vez de // para horas (gera número quebrado e destrói a lógica de “horas completas”).

Debrief — Padrões que se repetem aqui
Você acabou de praticar 4 padrões que viram “canivete suíço” em Python introdutório: (1) variável como estado, (2) IPO, (3) operadores aritméticos com prioridade (parênteses quando a regra de negócio manda), (4) divisão inteira + resto (// e %) para problemas de “unidades inteiras” e decomposição de tempo.
Exercício extra (para consolidar // e %): pegue total_minutos = 999 e decomponha em horas e minutos; depois reconstrua o total (horas*60 + minutos) e mostre que bate com 999. Rubrica: iniciante (funciona), autônomo (testa casos), bom design (nomes claros), excelente (explica o porquê de // e %).