todo_cli.py en Python
Una lista de pendientes CLI completa que persiste en JSON.
"""Una mini lista de pendientes que persiste en un archivo JSON."""
import argparse
import json
from pathlib import Path
ARCHIVO_PENDIENTES = Path("todos.json")
def cargar_pendientes():
if ARCHIVO_PENDIENTES.exists():
return json.loads(ARCHIVO_PENDIENTES.read_text())
return []
def guardar_pendientes(pendientes):
ARCHIVO_PENDIENTES.write_text(json.dumps(pendientes, indent=2))
def principal():
parser = argparse.ArgumentParser(description="lista mínima de pendientes")
sub = parser.add_subparsers(dest="command", required=True)
agregar = sub.add_parser("agregar")
agregar.add_argument("text")
hecho = sub.add_parser("hecho")
hecho.add_argument("number", type=int)
sub.add_parser("lista")
args = parser.parse_args()
pendientes = cargar_pendientes()
if args.command == "agregar":
pendientes.append({"texto": args.text, "hecho": False})
guardar_pendientes(pendientes)
print(f"agregado: {args.text}")
elif args.command == "hecho":
pendientes[args.number - 1]["hecho"] = True
guardar_pendientes(pendientes)
print(f"completado #{args.number}")
else:
for i, pendiente in enumerate(pendientes, start=1):
marca = "x" if pendiente["hecho"] else " "
print(f"[{marca}] {i}. {pendiente['texto']}")
if __name__ == "__main__":
principal()
Cómo funciona
- Los subcomandos de
argparsele dan los verbos add, done y list. - El estado va y vuelve por un archivo JSON con
pathlib. - Cada comando edita la lista y la vuelve a guardar.
Palabras clave y builtins usados aquí
defelifelseenumerateforifintprintreturntype
El intento, en números
- Líneas
- 45
- Caracteres a escribir
- 1234
- Tokens
- 306
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 175 segundos.
Paso 3 de 5 en Bis; paso 70 de 72 en Fundamentos del lenguaje.