Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from tasks import (
add_task,
list_tasks,
Expand Down
155 changes: 79 additions & 76 deletions tasks.py
Original file line number Diff line number Diff line change
@@ -1,112 +1,115 @@
def add_task(tasks, title):
# Verificar si ya existe una tarea con el mismo título
for task in tasks:
if task["title"].lower() == title.lower():
print("Error: ya existe una tarea con ese título")
return

task = {
"id": len(tasks) + 1,
"title": title,
"completed": False
}
tasks.append(task)
print("✅ Tarea agregada")
# -*- coding: utf-8 -*-

def _next_id(tasks):
"""Genera un ID único aunque se eliminen tareas."""
max_id = 0
for t in tasks:
if isinstance(t, dict):
tid = t.get("id")
if isinstance(tid, int) and tid > max_id:
max_id = tid
return max_id + 1

def list_tasks(tasks):
if not tasks:
print("No hay tareas")
return

for task in tasks:
status = "✔" if task["completed"] else "✘"
print(f'{task["id"]}. {task["title"]} [{status}]')


# FUNCIÓN DE VALIDACIÓN DE ID
def validar_task_id(task_id):
"""
Valida que el task_id:
- Sea un número
- No sea negativo
- Sea un número entero
- Sea mayor a 0
- No rompa el programa si es inválido
"""
try:
task_id = int(task_id)
except ValueError:
except (TypeError, ValueError):
print("❌ Error: El ID debe ser un número (no letras ni símbolos).")
return None

if task_id < 0:
print("❌ Error: El ID no puede ser negativo.")
if task_id <= 0:
print("❌ Error: El ID debe ser mayor que 0.")
return None

return task_id


def complete_task(tasks, task_id):
<<<<<<< HEAD
task_id = validar_task_id(task_id)
if task_id is None:
return # 🔁 No se rompe el menú
def add_task(tasks, title):
# Validar título
if title is None:
print("⚠️ El título no puede ser nulo.")
return False

title = str(title).strip()
if not title:
print("⚠️ El título no puede estar vacío.")
return False

# Evitar títulos duplicados (opcional, pero útil)
for task in tasks:
if task["id"] == task_id:
task["completed"] = True
print("✅ Tarea marcada como completada")
return
if isinstance(task, dict):
existing_title = str(task.get("title", "")).strip()
if existing_title.lower() == title.lower():
print("⚠️ Ya existe una tarea con ese título.")
return False

print("❌ Error: No se encontró una tarea con ese ID")
task = {
"id": _next_id(tasks),
"title": title,
"completed": False
}
tasks.append(task)
print("✅ La tarea fue agregada correctamente.")
print(f"📝 Título: {title}")
return True


def delete_task(tasks, task_id):
task_id = validar_task_id(task_id)
if task_id is None:
return # 🔁 No se rompe el menú
=======
try:
task_id = int(task_id)
except:
print("Error: ID inválido")
def list_tasks(tasks):
if not tasks:
print("📭 No hay tareas registradas por el momento.")
print("👉 Agrega una nueva tarea desde el menú.")
return

print("📋 Lista de tareas:")
for task in tasks:
if task["id"] == task_id:
if task["completed"]:
print("La tarea ya estaba completada")
return
task["completed"] = True
print("✔ Tarea completada")
return
if not isinstance(task, dict):
print("⚠️ Se encontró una tarea inválida (formato incorrecto).")
continue

print("Error: tarea no encontrada")
tid = task.get("id", "?")
title = task.get("title", "(Sin título)")
completed = bool(task.get("completed", False))

status = "✔ Completada" if completed else "✘ Pendiente"
print(f"{tid}. {title} [{status}]")


def delete_task(tasks, task_id):
try:
task_id = int(task_id)
except:
print("Error: ID inválido")
return
>>>>>>> upstream/main
def complete_task(tasks, task_id):
task_id = validar_task_id(task_id)
if task_id is None:
return False # No rompe el menú

for task in tasks:
if task["id"] == task_id:
tasks.remove(task)
<<<<<<< HEAD
print("🗑️ Tarea eliminada")
return
if isinstance(task, dict) and task.get("id") == task_id:
if task.get("completed") is True:
print("ℹ️ La tarea ya estaba completada.")
return True

print("❌ Error: No se encontró una tarea con ese ID")
=======
task["completed"] = True
print("✅ Tarea marcada como completada.")
return True

for i, t in enumerate(tasks):
t["id"] = i + 1
print("❌ Error: No se encontró una tarea con ese ID.")
return False


def delete_task(tasks, task_id):
task_id = validar_task_id(task_id)
if task_id is None:
return False # No rompe el menú

print("Tarea eliminada")
return
for i, task in enumerate(tasks):
if isinstance(task, dict) and task.get("id") == task_id:
tasks.pop(i)
print("🗑️ Tarea eliminada correctamente.")
return True

print("Error: ID no encontrado")
>>>>>>> upstream/main
print("Error: No se encontró una tarea con ese ID.")
return False