Palotina, 1983. Antes de construir a pista, o terreno precisava ser limpo. No código: antes de calcular, precisa-se declarar.
Nesta primeira fase, você vai limpar o terreno mental e construir os alicerces da programação. Assim como o ábaco romano precisa de todas as contas no chão antes de começar a calcular, o programador precisa entender variáveis antes de escrever qualquer algoritmo.
if / elif / else)for e whileRanhuraAbaco (o coração do ábaco)CircuitoFerradura completaO ábaco romano (século II–V d.C.) usa o sistema bi-quinário: cada ranhura tem 1 conta superior (vale 5) e 4 contas inferiores (valem 1 cada). Máximo por ranhura: 9. Com 5 ranhuras: 0 a 99.999.
Cada ranhura é uma curva da pista de Palotina. As contas inferiores são as pedaladas terrestres (esforço do piloto). A conta superior é a rampa — quando você a ativa, o valor salta de 1 para 5, assim como o salto da Paineira multiplica a velocidade instantaneamente.
# Representação ASCII do ábaco com o número 1993
══════════════════════════════════════════════════
Ranhura │ Celeste │ Terrestres │ Valor
══════════════════════════════════════════════════
Unidades │ ● │ ● ● ● ○ │ 3
Dezenas │ ● │ ● ● ● ● │ 9
Centenas │ ● │ ● ● ● ● │ 9
Milhares │ ○ │ ● ○ ○ ○ │ 1
══════════════════════════════════════════════════
Total: 1993
No ábaco, zerar uma ranhura é como declarar uma variável sem valor. Armar um número é atribuir. Ler o total é imprimir.
# Declarar (terreno vazio)
>>> abaco = CircuitoFerradura()
>>> print(abaco.valor_total())
0
# Armar o ano de Palotina (atribuir)
>>> abaco.contornar_paineira(1993)
>>> print(abaco.valor_total())
1993
# Tipos básicos
>>> ano = 1993 # int
>>> cidade = "Palotina" # str
>>> pista = True # bool
>>> rampa = 9.8 # float (gravidade)
No ábaco, a conta superior só ativa quando o dígito atinge 5 ou mais. Isso é uma condicional: "se o valor ≥ 5, ativa a conta celeste".
# Lógica interna do ábaco: if/elif/else
def armar_ranhura(valor: int) -> dict:
if valor < 0 or valor > 9:
raise ValueError("Ranhura aceita 0–9 apenas")
superior = valor >= 5
inferiores = valor - 5 if superior else valor
return {"superior": superior, "inferiores": inferiores}
>>> armar_ranhura(7)
{'superior': True, 'inferiores': 2}
Para percorrer todas as ranhuras do ábaco, usamos loops. Cada iteração é uma pedalada — você passa por todos os pontos-chave da pista.
# Percorrer as 5 ranhuras (loop for)
for nome, estado in abaco.estado_ranhuras().items():
print(f" {nome:<22}: valor={estado['valor']}")
Unidades : valor=3
Dezenas : valor=9
Centenas : valor=9
Milhares : valor=1
Dezenas de Milhar : valor=0
Marque cada item ao concluir:
Implemente a classe CircuitoFerradura completa com:
contornar_paineira(), somar(), subtrair(),
zerar(), estado_ranhuras() e display ASCII colorido no terminal.
Baixe o pacote local do Circuito Ferradura como referência de comportamento esperado.