🧩 Exercícios: Sintaxe Essencial do Markdown
Extra Guia De Markdown • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 01.1 — Hierarquia de Cabeçalhos e Formatação de Texto
Contexto: Hierarquia de Cabeçalhos e Formatação de Texto aplicado ao domínio de Sintaxe Essencial do Markdown.
Requisitos de Execução:
- Criar validador em Python que confira a presença de H1 (#), H2 (##) e estilos negrito/itálico.
- Emitir relatório de conformidade sintática.
Resultado Esperado
Validação de Sintaxe: Cabeçalhos H1 e H2 conformes | Ênfases detectadas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_1_SeuNome - Envie na tarefa:
Atividade Cap 01 - Sintaxe Essencial do Markdown
🔑 Gabarito de Código & Solução Comentada
# validar_sintaxe_basica.py
import re
def validar_markdown_basico(texto):
tem_h1 = bool(re.search(r"^#\s+[^\n]+", texto, re.M))
tem_h2 = bool(re.search(r"^##\s+[^\n]+", texto, re.M))
tem_bold = bool(re.search(r"\*\*[^*]+\*\*", texto))
tem_italic = bool(re.search(r"\*[^*]+\*", texto))
print(f"H1 Presente : {tem_h1}")
print(f"H2 Presente : {tem_h2}")
print(f"Negrito OK : {tem_bold}")
print(f"Itálico OK : {tem_italic}")
return tem_h1 and tem_h2 and tem_bold
md_teste = "# Titulo Principal\n## Subtitulo\nTexto com **negrito** e *italico*."
validar_markdown_basico(md_teste)
🔍 Nível 2: Prática
Problema 01.2 — Parser de Listas Aninhadas e Tabelas Markdown
Contexto: Parser de Listas Aninhadas e Tabelas Markdown aplicado ao domínio de Sintaxe Essencial do Markdown.
Requisitos de Execução:
- Escrever script que processe listas ordenadas, não-ordenadas e tabelas formatadas em Markdown.
- Converter a tabela para uma lista de dicionários Python.
Resultado Esperado
Tabela convertida para 2 registros estruturados.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_2_SeuNome - Envie na tarefa:
Atividade Cap 01 - Sintaxe Essencial do Markdown
🔑 Gabarito de Código & Solução Comentada
# parser_tabelas_md.py
def extrair_tabela_md(tabela_texto):
linhas = [l.strip() for l in tabela_texto.strip().split('\n') if '|' in l]
if len(linhas) < 3: return []
cabecalhos = [c.strip() for c in linhas[0].split('|')[1:-1]]
registros = []
for linha in linhas[2:]:
valores = [v.strip() for v in linha.split('|')[1:-1]]
registros.append(dict(zip(cabecalhos, valores)))
return registros
tabela = "| Nome | Cargo | Status |\n| :--- | :--- | :---: |\n| Ana | Dev | Ativo |\n| Caio | QA | Ativo |"
print(extrair_tabela_md(tabela))
⚡ Nível 3: Integração
Problema 01.3 — Extrator de Blocos de Código e Validador de Linguagem
Contexto: Extrator de Blocos de Código e Validador de Linguagem aplicado ao domínio de Sintaxe Essencial do Markdown.
Requisitos de Execução:
- Implementar extrator de blocos de código cercados.
- Alertar se houver blocos sem definição explícita de linguagem.
Resultado Esperado
Blocos encontrados: 2 (python, bash) | Blocos sem linguagem: 0
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_3_SeuNome - Envie na tarefa:
Atividade Cap 01 - Sintaxe Essencial do Markdown
🔑 Gabarito de Código & Solução Comentada
# extrator_codigo_md.py
import re
def auditar_blocos_codigo(conteudo):
padrao = r"`{3}([a-zA-Z0-9_-]*)\s*\n(.*?)`{3}"
matches = re.findall(padrao, conteudo, re.S)
sem_linguagem = sum(1 for lang, _ in matches if not lang.strip())
print(f"Total de Blocos: {len(matches)}")
print(f"Sem Linguagem : {sem_linguagem}")
for lang, code in matches:
qtd_linhas = len([l for l in code.splitlines() if l.strip()])
print(f"Linguagem: {lang or 'NENHUMA'} ({qtd_linhas} linhas)")
return len(matches), sem_linguagem
trecho = "```python\nprint('Hello')\n```"
auditar_blocos_codigo(trecho)
🏆 Nível 4: Desafio Corporativo
Problema 01.4 — Compilador de Markdown para HTML Seguro com Sanitização
Contexto: Compilador de Markdown para HTML Seguro com Sanitização aplicado ao domínio de Sintaxe Essencial do Markdown.
Requisitos de Execução:
- Criar compilador de Markdown simplificado convertendo cabeçalhos, listas, links e tabelas para HTML5.
- Sanitizar tags perigosas.
Resultado Esperado
HTML5 semântico gerado e sanitizado com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_4_SeuNome - Envie na tarefa:
Atividade Cap 01 - Sintaxe Essencial do Markdown
🔑 Gabarito de Código & Solução Comentada
# compilador_md_html.py
import re
import html
def md_para_html(md_texto):
texto = html.escape(md_texto)
texto = re.sub(r"^### (.*)$", r"<h3>\1</h3>", texto, flags=re.M)
texto = re.sub(r"^## (.*)$", r"<h2>\1</h2>", texto, flags=re.M)
texto = re.sub(r"^# (.*)$", r"<h1>\1</h1>", texto, flags=re.M)
texto = re.sub(r"\*\*([^\*]+)\*\*", r"<strong>\1</strong>", texto)
texto = re.sub(r"\*([^\*]+)\*", r"<em>\1</em>", texto)
texto = re.sub(r"\[([^\]]+)\]\(([^)]+)\)", r'<a href="\2">\1</a>', texto)
return texto
doc = "# Titulo\nTexto com [Link](https://tech.com) e **destaque**."
print(md_para_html(doc))