◇ OpenCyber Academy
Graduação · Capítulo 3 · Português

Capítulo 3 — Programação I

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 3 — Programação I

Mapa da aula

Aula 03 publicada. Mapa, exemplo, EX007.

flowchart TD
  N0["3.1 Contar registros"]
  N1["3.2 Listas e dicionários"]
  N2["Laboratório — Contagem de reportes por unidade"]
  N3["3.3 Testar com entradas conhecidas"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX007"]

Desenho lógico

flowchart LR
  N0["3.1 Contar registros"]
  N1["3.2 Listas e dicionários"]
  N2["Laboratório — Contagem de reportes por unidade"]
  N3["3.3 Testar com entradas conhecidas"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX007"]
[3.1 Contar registros]
    |
    v
[3.2 Listas e dicionários]
    |
    v
[Laboratório — Contagem de reportes por unidade]
    |
    v
[3.3 Testar com entradas conhecidas]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX007]

Objetivos de aprendizagem

Você vai (1) escrever Python simples para contar e resumir registros; (2) usar listas e dicionários para dados de comportamento; (3) testar um script com entradas conhecidas.

3.1 Contar registros

Nadia escreve seu primeiro script em Python para contar os reportes de e-mails suspeitos por unidade. Cada registro é uma linha com data, unidade e veredito. O script lê as linhas, divide cada uma em campos e soma um ao contador da unidade. O dicionário do Python é ideal para isso, porque associa o nome de cada unidade à sua contagem. Ela imprime os totais em ordem. Até uma contagem simples é útil: mostra que duas unidades com computadores públicos reportam muito mais e-mails do que as outras, o que levanta uma pergunta que vale a pena investigar.

3.2 Listas e dicionários

Uma lista guarda itens em ordem, como todas as datas de reporte, enquanto um dicionário guarda pares, como unidade e contagem. Nadia usa uma lista de dicionários, um por reporte, para que cada reporte mantenha seus campos juntos. Em seguida, filtra a lista para encontrar os reportes maliciosos e os agrupa por unidade. Ela aprende a manter os dados sintéticos e sem nomes de pessoas, já que até código de prática deve respeitar a privacidade. Bons hábitos aprendidos em scripts pequenos se levam para projetos maiores mais adiante no curso.

Laboratório — Contagem de reportes por unidade

# Count synthetic suspicious-email reports by branch.
rows = ["2026-01-03,Central,malicious", "2026-01-04,Riverside,harmless"] + \
       [f"2026-{2 + d // 28:02d}-{1 + d % 28:02d},{b},{v}" for d, (b, v) in enumerate(
           [("Central", "harmless")] * 13 + [("Riverside", "malicious")] * 9 + [("Hill", "harmless")] * 6 +
           [("Market", "harmless")] * 5 + [("Oakfield", "malicious")] * 4 + [("Mill", "harmless")] * 3 +
           [("Quay", "harmless")] * 3 + [("Elm", "harmless")] * 2 + [("Abbey", "malicious")] * 1, start=1) if True]
counts = {}
for r in rows:
    parts = r.split(",")
    if len(parts) != 3: print("skip", r); continue
    counts[parts[1]] = counts.get(parts[1], 0) + 1
for b, c in sorted(counts.items(), key=lambda x: -x[1]): print(b, c)
print("total", sum(counts.values()))

Execute com python3 lab_count.py. Saída verificada:

Central 14
Riverside 10
Hill 6
Market 5
Oakfield 4
Mill 3
Quay 3
Elm 2
Abbey 1
total 48

3.3 Testar com entradas conhecidas

Nadia testa o script criando um arquivo minúsculo com cinco reportes cujos totais ela conhece. Se a saída do script coincide com sua contagem manual, ela ganha confiança. Ela também testa um arquivo vazio e uma linha com um campo faltando, e acrescenta uma verificação que pula linhas quebradas com um aviso. Testar com entradas conhecidas é uma disciplina básica da programação, e importa no trabalho de segurança porque contagens erradas podem levar a decisões erradas sobre onde investir esforço ou treinamento.

Exemplo resolvido

Nadia conta reportes sintéticos por unidade com um dicionário, agrupa os reportes maliciosos e testa o script com entradas conhecidas.

Caso sintético. Os dados são sintéticos.

Erros e limites

Linhas quebradas podem esconder problemas reais. Testes pequenos não provam a correção.

Exercícios

Síntese

Scripts simples e testados transformam registros em contagens que levantam perguntas úteis.

Continue estudando — aula 03 (capítulo 03 de 40)

← Capítulo 02 · Índice das aulas · Capítulo 04 →

Continue para a próxima aula já escrita.