Playground - Crea un task manager usando closures
Clase 32 de 56 • 21 Días de Python
Contenido del curso
David Hereira
Maga Hernandez
Jose Eleazar Gavidia Diaz
Linda Atenea Mejía Usme
Leonel Federico Valencia Estudillo
Nicolas Alpargatero
Sebastián Alejandro Arce García
Ángel Sabillón
Harold Edward Rodriguez Navarro
Sergio Daniel Aguirre Consuegra
Enrique Barrera
Diego Paredes Piñón
Fabricio González Guasque
Victor Ortiz
Waldir Zapata Garcia
Francisco Jesús Eslava Fernández
Alejandro Anaya
Fernando Jesús Núñez Valdez
José Miguel Reyes
Daniel Salazar Munoz
Harold Zurita Simon
me costó bastante este ejercicio, no que con los otros no tuviera alguna dificultad, pero se resolvían con solo pensar un poco, pero en este caso no sabia o recordaba el uso de funciones internas como metodos de una funcion externa y no encontraba la clase de los cursos basicos de python que he tomado donde los explicaban. Luchando con la tentacion de ir directo a la respuestas de los compañeros y ver, finalmente logré hacerlo como un poco de ensayo y error, algo de logica e intuición, pero culminar todo el ejercicio me tomó como 6 horas en total, si fuese un prueba tecnica, pues dudo que hubiese aprobado
for item in arrayTasks: if (item['id'] ==value) or(item['name'] ==value): item['completed']=True def getSortedTasksByPriority(): # Tu código aquí 👇 sortedTasks =[] for i in range(1, 2): if arrayTasks[i]['priority'] < arrayTasks[i-1]['priority']: sortedTasks.append(arrayTasks[i]) sortedTasks.append(arrayTasks[i-1]) else: sortedTasks.append(arrayTasks[i-1]) sortedTasks.append(arrayTasks[i]) return sortedTasks def filterTasksByTag(tag): # Tu código aquí 👇 return [task for task in arrayTasks if tag in task['tags']] def updateTask(taskId, updates): # Tu código aquí 👇 for i in range(len(arrayTasks)): if arrayTasks[i]['id']==taskId: for key, value in updates.items(): arrayTasks[i][key]=value return {'addTask': addTask, 'getTasks': getTasks, 'removeTask': removeTask, 'getPendingTasks':getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted':markTaskAsCompleted, 'getSortedTasksByPriority':getSortedTasksByPriority, 'filterTasksByTag':filterTasksByTag, 'updateTask' :updateTask}
tal cual....!!
Hola, Aqui esta una Solucion con Pruebas Internas para Validacion de cada uno de los Metodos propuestos por el Ejercicio: Saludos
def createTaskPlanner(): tasks = [] def addTask(task): task['completed'] = False tasks.append(task) def removeTask(value): for task in tasks: if task['id'] == value or task['name'] == value: tasks.remove(task) break def getTasks(): return tasks def getPendingTasks(): return [task for task in tasks if not task['completed']] def getCompletedTasks(): return [task for task in tasks if task['completed']] def markTaskAsCompleted(value): for task in tasks: if task['id'] == value or task['name'] == value: task['completed'] = True break def getSortedTasksByPriority(): return sorted(tasks, key=lambda task: task['priority']) def filterTasksByTag(tag): return [task for task in tasks if tag in task['tags']] def updateTask(taskId, updates): for task in tasks: if task['id'] == taskId: for key, value in updates.items(): task[key] = value break return { 'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask, } planner = createTaskPlanner() planner'addTask' planner'addTask' planner'addTask' planner'markTaskAsCompleted' def print_dictionaries(dictionaries): for dictionary in dictionaries: for key, value in dictionary.items(): print(key, "=", value) print() def print_title(title): print("°"*20, title , "°"*20) print_title("Tareas Completadas") print_dictionaries(planner['getCompletedTasks']()) print_title("Tareas Pendientes") print_dictionaries(planner['getPendingTasks']()) planner'markTaskAsCompleted' print_title("Marcando Tarea 3 Como Completada") print_title("Tareas Completadas") print_dictionaries(planner['getCompletedTasks']()) print_title("Tareas Pendientes") print_dictionaries(planner['getPendingTasks']()) print_title("Tareas Ordenadas por Prioridad") print_dictionaries(planner['getSortedTasksByPriority']()) print_title("Tareas Filtradas por Etiqueta: Python") print_dictionaries(planner'filterTasksByTag') print_title("Tareas Filtradas por Etiqueta: personal") print_dictionaries(planner'filterTasksByTag') print_title("Tareas Filtradas por Etiqueta del Ejemplo 2: shopping") print_dictionaries(planner'filterTasksByTag') print_title("Tareas Tareas Totales") print_dictionaries(planner['getTasks']()) print_title("Removiendo Tarea con ID: 2") planner'removeTask' print_title("Tareas Tareas Totales") print_dictionaries(planner['getTasks']())
Lo que mas me costó entender en esta ocación fue conocer y entender que son y como funcionaban los clousure y como se retornan las funciones anidadas de la función principal.
def createTaskPlanner(): tasks = [] def _findTask(key, value): for task in tasks: if task[key] == value: return task def addTask(task): task["completed"] = False tasks.append(task) def removeTask(value): if type(value) == int: tasks.remove(_findTask("id", value)) elif type(value) == str: tasks.remove(_findTask("name", value)) def getTasks(): return tasks def getPendingTasks(): pendingTasks = [] for task in tasks: if task["completed"] == False: pendingTasks.append(task) return pendingTasks def getCompletedTasks(): completedTasks = [] for task in tasks: if task["completed"] == True: completedTasks.append(task) return completedTasks def markTaskAsCompleted(value): if type(value) == int: _findTask("id", value)["completed"] = True elif type(value) == str: _findTask("name", value)["completed"] = True def getSortedTasksByPriority(): return sorted(tasks, key=lambda task: task["priority"]) def filterTasksByTag(tag): taskByTag = [] for task in tasks: for tagElement in task["tags"]: if tagElement == tag: taskByTag.append(task) return taskByTag def updateTask(taskId, updates): _findTask("id", taskId).update(updates) return { "addTask": addTask, "getTasks": getTasks, "removeTask": removeTask, "getPendingTasks": getPendingTasks, "getCompletedTasks": getCompletedTasks, "markTaskAsCompleted": markTaskAsCompleted, "getSortedTasksByPriority": getSortedTasksByPriority, "filterTasksByTag": filterTasksByTag, "updateTask": updateTask }
Esta muy dificil, me tarde dias y mas en resolver
UnboundLocalError: cannot access local variable 'tasks' where it is not associated with a value
pero al final lo termine
def createTaskPlanner(): tasks = [] def addTask(task): task['completed'] = False tasks.append(task) def removeTask(value): nonlocal tasks # para acceder a la variable tasks del ambito exterior tasks = [task for task in tasks if task['id'] != value or task['name'] != value] def getTasks(): return tasks def getPendingTasks(): nonlocal tasks return [task for task in tasks if task['completed'] == False] def getCompletedTasks(): nonlocal tasks return [task for task in tasks if task['completed'] == True] def markTaskAsCompleted(value): nonlocal tasks # para acceder a la variable tasks del ambito exterior for task in tasks: if task['id'] == value or task['name'] == value: task['completed'] = True def getSortedTasksByPriority(): sortedTask = [] sortedTask = sorted(tasks,key=lambda task: task['priority']) return sortedTask def filterTasksByTag(tag): return [task for task in tasks if tag in task['tags']] def updateTask(taskId, updates): for task in tasks: if task['id']==taskId: for key, value in updates.items(): task[key]=value return {'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask }
Esta práctica está bastante completa, me demore, pero muy buena.
Me pareció muy bueno este ejercicio, tuve que consultar algunas cosas a chatgpt pero en últimas un gran reto.
* *
*
def createTaskPlanner(): tasks = [] def addTask(task): task["completed"] = False tasks.append(task) return tasks def removeTask(value): for i in tasks: if i["name"] == value: tasks.remove(i) elif i["id"] == value: tasks.remove(i) def getTasks(): return tasks def getPendingTasks(): pending_tasks = [] for i in tasks: if i["completed"] == False: pending_tasks.append(i) return pending_tasks def getCompletedTasks(): completed_tasks = [] for i in tasks: if i["completed"] == True: completed_tasks.append(i) return completed_tasks def markTaskAsCompleted(value): for i in tasks: if i["name"] == value: i["completed"] = True elif i["id"] == value: i["completed"] = True def getSortedTasksByPriority(): tasks_sorted = sorted(tasks, key=lambda i: i["priority"], reverse=False) return tasks_sorted def filterTasksByTag(tag): tasks_filtered = list(filter(lambda x: tag in x["tags"], tasks)) return tasks_filtered def updateTask(taskId, updates): for i in tasks: if i["id"] == taskId: i.update(updates) return { "addTask":addTask, "removeTask":removeTask, "getTasks": getTasks, "getPendingTasks":getPendingTasks, "getCompletedTasks":getCompletedTasks, "markTaskAsCompleted":markTaskAsCompleted, "getSortedTasksByPriority":getSortedTasksByPriority, "filterTasksByTag":filterTasksByTag, "updateTask":updateTask }
Costó un poco pero lo logré!
def createTaskPlanner(): tasks = []
def addTask(task): task['completed'] = False tasks.append(task)
def removeTask(value): if isinstance(value, int): for task in tasks: if task['id'] == value: tasks.remove(task) elif isinstance(value, str): for task in tasks: if task['name'] == value: tasks.remove(task)
def getTasks(): return tasks def getPendingTasks(): return [task for task in tasks if task['completed'] == False] def getCompletedTasks(): return [task for task in tasks if task['completed'] == True] def markTaskAsCompleted(value): if isinstance(value, int): for task in tasks: if task['id'] == value: task['completed'] = True elif isinstance(value, str): for task in tasks: if task['name'] == value: task['completed'] = True def getSortedTasksByPriority(): return sorted(tasks, key=lambda x: x['priority']) def filterTasksByTag(tag): return [task for task in tasks if tag in task['tags']] def updateTask(taskId, updates): for task in tasks: if task['id'] == taskId: for key, value in updates.items(): task[key] = value return {'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask}
planner = createTaskPlanner()
planner'addTask'
planner'addTask'
planner'updateTask'
# print(planner'filterTasksByTag')
Reto del día superado.
def createTaskPlanner(): tasks = list() def addTask(task): task['completed'] = False tasks.append(task) def removeTask(value): for task in tasks: if task['id'] == value: tasks.remove(task) elif task['name'] == value: tasks.remove(task) return def getTasks(): return tasks def getPendingTasks(): return [task for task in tasks if task['completed'] == False] def getCompletedTasks(): return [task for task in tasks if task['completed'] == True] def markTaskAsCompleted(value): for task in tasks: if task['id'] == value or task['name'] == value: task['completed'] = True break return def getSortedTasksByPriority(): new_tasks = [task for task in tasks] priority = lambda task: task['priority'] new_tasks.sort(key=priority) return new_tasks def filterTasksByTag(tag): return [task for task in tasks if tag in task['tags']] def updateTask(taskId, updates): for task in tasks: if task['id'] == taskId: task.update(updates) return return {'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask }
Mi código:
def createTaskPlanner(): tasks = [] def addTask(task): task["completed"] = False tasks.append(task) return tasks def removeTask(value): for task in tasks: if task["id"] == value or task["name"] == value: tasks.remove(task) return tasks
def getTasks(): return tasks def getPendingTasks(): return list(filter((lambda x:x["completed"] == True), tasks)) def getCompletedTasks(): return list(filter((lambda x:x["completed"] != False), tasks)) def markTaskAsCompleted(value): for task in tasks: if task["id"] == value or task["name"] == value: task["completed"] = True return tasks def getSortedTasksByPriority(): return sorted(tasks, key = lambda x:x["priority"])
def filterTasksByTag(tag): list_tag = [] for task in tasks: for tag1 in task["tags"]: if tag1 == tag: list_tag.append(task) return(list_tag) def updateTask(taskId, updates): for task in tasks: if task["id"] == taskId: for key, value in updates.items(): task[key] = value return tasks
return {"addTask":addTask, "removeTask":removeTask, "getTasks":getTasks, "getPendingTasks":getPendingTasks, "getCompletedTasks":getCompletedTasks, "markTaskAsCompleted":markTaskAsCompleted, "getSortedTasksByPriority":getSortedTasksByPriority, "filterTasksByTag":filterTasksByTag, "updateTask":updateTask}
C:>
C:>
C:>
C:>
C:>
C:>
C:>
C:>
def createTaskPlanner(): tareas=[] def addTask(task): task["completed"] = False tareas.append(task) return 0 def removeTask(value): for tarea in tareas[:]: if tarea["id"]==value or tarea["name"]==value: tareas.remove(tarea) return 0 def getTasks(): return tareas def getPendingTasks(): incompleta = lambda tarea: tarea["completed"] == False pendientes=list(filter(incompleta, tareas)) return pendientes def getCompletedTasks(): completada = lambda tarea: tarea["completed"] == True terminadas=list(filter(completada, tareas)) return terminadas pass def markTaskAsCompleted(value): for tarea in tareas[:]: if tarea["id"]==value or tarea["name"]==value: tarea["completed"]=True return 0 def getSortedTasksByPriority(): temp=[] temp=tareas temp.sort(key=lambda tarea: tarea["priority"]) return temp def filterTasksByTag(tag): filtradas=[] for tarea in tareas: if tag in tarea["tags"]: filtradas.append(tarea) return filtradas def updateTask(taskId, updates): for tarea in tareas: if tarea["id"]==taskId: for clave, valor in updates.items(): tarea[clave]=valor return 0 return {"markTaskAsCompleted":markTaskAsCompleted,"getCompletedTasks":getCompletedTasks ,"updateTask":updateTask, "filterTasksByTag":filterTasksByTag,"addTask": addTask, "getTasks": getTasks, "removeTask": removeTask, "getPendingTasks": getPendingTasks, "getSortedTasksByPriority":getSortedTasksByPriority}
<code> def createTaskPlanner(): taskList = [] def addTask(task): task['completed'] = False taskList.append(task) def removeTask(value): index_list = None for index, dictionary in enumerate(taskList): if dictionary.get('id') == value or dictionary.get('name') == value: index_list = index break if index_list is not None: taskList.pop(index_list) def getTasks(): return taskList def getPendingTasks(): return [dictionary for dictionary in taskList if dictionary.get('completed') == False] def getCompletedTasks(): return [dictionary for dictionary in taskList if dictionary.get('completed') == True] def markTaskAsCompleted(value): matching_dictionaries = [dictionary for dictionary in taskList if dictionary.get('id') == value or dictionary.get('name') == value] if matching_dictionaries: matching_dictionaries[0]['completed'] = True def getSortedTasksByPriority(): return sorted(taskList, key=lambda k: k['priority']) def filterTasksByTag(tag): return [dictionary for dictionary in taskList if tag in dictionary['tags']] def updateTask(taskId, updates): matching_dictionaries = [dictionary for dictionary in taskList if dictionary.get('id') == taskId] if matching_dictionaries: for key, value in updates.items(): matching_dictionaries[0][key] = value return { "addTask" : addTask, "removeTask" : removeTask, "getTasks" : getTasks, "getPendingTasks" : getPendingTasks, "getCompletedTasks" : getCompletedTasks, "markTaskAsCompleted" : markTaskAsCompleted, "getSortedTasksByPriority" : getSortedTasksByPriority, "filterTasksByTag" : filterTasksByTag, "updateTask" : updateTask }
def createTaskPlanner(): # Tu código aquí 👇 tareas = [] def addTask(task): # Tu código aquí 👇 task["completed"] = False tareas.append(task) def removeTask(value): # Tu código aquí 👇 for tarea in tareas: if tarea["id"] == value or tarea["name"] == value: tareas.remove(tarea) def getTasks(): # Tu código aquí 👇 return tareas def getPendingTasks(): # Tu código aquí 👇 for tarea in tareas: if tarea["completed"] == False: return tarea def getCompletedTasks(): # Tu código aquí 👇 completadas = [] for tarea in tareas: if tarea["completed"] == True: completadas.append(tarea) return completadas def markTaskAsCompleted(value): # Tu código aquí 👇 for tarea in tareas: if tarea["id"] == value or tarea["name"] == value: tarea["completed"] = True return tareas def getSortedTasksByPriority(): # Tu código aquí 👇 lista = [] for tarea in tareas: if tarea["priority"] == 1: lista.append(tarea) for tarea in tareas: if tarea["priority"] == 2: lista.append(tarea) for tarea in tareas: if tarea["priority"] == 3: lista.append(tarea) return lista def filterTasksByTag(tag): tareas_filtradas = [] # Lista para almacenar las tareas que coinciden con la etiqueta for tarea in tareas: if tag in tarea['tags']: tareas_filtradas.append(tarea) # Agregar la tarea a la lista de tareas filtradas return tareas_filtradas def updateTask(taskId, updates): for tarea in tareas: if tarea["id"] == taskId: if "name" in updates: tarea["name"] = updates["name"] if "completed" in updates: tarea["completed"] = updates["completed"] if "priority" in updates: tarea["priority"] = updates["priority"] if "tags" in updates: tarea["tags"] = updates["tags"] if "notes" in updates: tarea["notes"] = updates["notes"] if "place" in updates: tarea["place"] = updates["place"] # return tareas return {'addTask':addTask, "filterTasksByTag":filterTasksByTag, "getCompletedTasks":getCompletedTasks, "getPendingTasks": getPendingTasks, "getSortedTasksByPriority":getSortedTasksByPriority, "getTasks":getTasks, 'markTaskAsCompleted':markTaskAsCompleted, "removeTask":removeTask, "updateTask":updateTask, }
Mi resultado: . . . . . . . . . . . . . . . . . . . . . . . .
def createTaskPlanner(): # Tu código aquí 👇 tasks = [] def addTask(task): # Tu código aquí 👇 task['completed'] = False tasks.append(task) pass def removeTask(value): # Tu código aquí 👇 for task in tasks: if task['id'] == value or task['name'] == value: tasks.remove(task) break pass def getTasks(): # Tu código aquí 👇 return tasks pass def getPendingTasks(): # Tu código aquí 👇 return list(filter(lambda task: not task['completed'], tasks)) pass def getCompletedTasks(): # Tu código aquí 👇 return list(filter(lambda task: task['completed'], tasks)) pass def markTaskAsCompleted(value): # Tu código aquí 👇 for task in tasks: if task['id'] == value or task['name'] == value: task['completed'] = True break pass def getSortedTasksByPriority(): # Tu código aquí 👇 return sorted(tasks, key = lambda task: task['priority']) pass def filterTasksByTag(tag): # Tu código aquí 👇 return list(filter(lambda task: tag in task['tags'], tasks)) pass def updateTask(taskId, updates): # Tu código aquí 👇 for index, task in enumerate(tasks): if task['id'] == taskId: tasks[index].update(updates) break pass return { 'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask }
#función que crea la lista de tareas def createTaskPlanner(): listaTareas = [] #función que agrega una tarea a la lista def addTask(task): task["completed"] = False listaTareas.append(task) #función que elimina una tarea de la lista def removeTask(value): idTarea = filter_tasks(value) listaTareas.pop(idTarea) #función que devuelve la lista de tareas def getTasks(): return listaTareas #función que devuelve las tareas pendientes def getPendingTasks(): return list(filter(lambda i: not i["completed"], listaTareas)) #función que devuelve las tareas completadas def getCompletedTasks(): return list(filter(lambda i: i["completed"], listaTareas)) #función que filtra el id de una tarea o por el nombre def filter_tasks(value): if isinstance(value, int): idx = [ i for i in range(len(listaTareas)) if listaTareas[i]["id"] == value] else: idx = [ i for i in range(len(listaTareas)) if listaTareas[i]["name"] == value] return idx[0] #función que marca una tarea completada def markTaskAsCompleted(value): idx = filter_tasks(value) listaTareas[idx]["completed"] = True #función que ordena tareas por prioridad def getSortedTasksByPriority(): sorted_tasks = sorted(listaTareas, key=lambda i: i["priority"]) return sorted_tasks #función que filtra tareas por etiqueta def filterTasksByTag(tag): by_tag = filter(lambda i: tag in i["tags"], listaTareas) return list(by_tag) #función que actualiza tareas def updateTask(taskId, updates): idx = filter_tasks(taskId) listaTareas[idx].update(updates) #regresa los métodos return { "addTask": addTask, "removeTask": removeTask, "getTasks": getTasks, "getPendingTasks": getPendingTasks, "getCompletedTasks": getCompletedTasks, "markTaskAsCompleted": markTaskAsCompleted, "getSortedTasksByPriority": getSortedTasksByPriority, "filterTasksByTag": filterTasksByTag, "updateTask": updateTask }
🛡️🛡️Escudo anti-spoilers🛡️🛡️
Mi solución al reto:
def createTaskPlanner(): tasks = [] def _find(task): for t in tasks: if t['id'] == task or t['name'] == task: return t return None def addTask(task): task['completed'] = False tasks.append(task) def removeTask(value): for t in tasks: tasks.remove(_find(value)) def getTasks(): return tasks def getPendingTasks(): return [t for t in tasks if not t['completed']] def getCompletedTasks(): return [t for t in tasks if t['completed']] def markTaskAsCompleted(value): for t in tasks: if _find(value): t['completed'] = True def getSortedTasksByPriority(): return sorted(tasks, key=lambda x: x['priority']) def filterTasksByTag(tag): return [t for t in tasks if tag in t['tags']] def updateTask(taskId, updates): for t in tasks: if _find(taskId): t.update(updates) return { 'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask }
Estuvo genial este Playground. Tuve que investigar y repasar notas para poder resolverlo. Thanks, Platzi. . . . . . . . . . . .
def createTaskPlanner(): tareas = [] def addTask(task): task['completed'] = False tareas.append(task) def removeTask(value): i = -1 found = False while not found and i < len(tareas): i += 1 if tareas[i]['id'] == value or tareas[i]['name'] == value: found = True tareas.pop(i) def getTasks(): return tareas def getPendingTasks(): return list(filter(lambda x: x['completed'] == False, tareas)) def getCompletedTasks(): return list(filter(lambda x: x['completed'] == True, tareas)) def markTaskAsCompleted(value): i = -1 found = False while not found and i < len(tareas): i += 1 if tareas[i]['id'] == value or tareas[i]['name'] == value: found = True tareas[i]['completed'] = True def getSortedTasksByPriority(): return sorted(tareas, key= lambda x: x['priority']) def filterTasksByTag(tag): return list(filter(lambda x: tag in x['tags'], tareas)) def updateTask(taskId, updates): # Get index of task i = -1 found = False while not found and i < len(tareas): i += 1 if tareas[i]['id'] == taskId: found = True # Actualization tareas[i] = tareas[i] | updates return {'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask':updateTask}
Mi solución:
def createTaskPlanner(): tasks = [] def addTask(task): if 'completed' not in task: task['completed'] = False tasks.append(task) def removeTask(value): task = next((t for t in tasks if t['id'] == value or t['name'] == value), None) if task: tasks.remove(task) def getTasks(): return tasks def getPendingTasks(): return [task for task in tasks if not task['completed']] def getCompletedTasks(): return [task for task in tasks if task['completed']] def markTaskAsCompleted(value): task = next((t for t in tasks if t['id'] == value or t['name'] == value), None) if task: task['completed'] = True def getSortedTasksByPriority(): return sorted(tasks, key=lambda x: x['priority']) def filterTasksByTag(tag): return [task for task in tasks if tag in task.get('tags', [])] def updateTask(taskId, updates): task = next((t for t in tasks if t['id'] == taskId), None) if task: task.update(updates) return { 'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask }
Esta fue una prueba novedosa, nunca había hecho algo así, al menos combinar closures con diccionarios, aprendi algo nuevo
def createTaskPlanner(): tasks = [] def addTask(task): task['completed'] = False tasks.append(task) def removeTask(value): nonlocal tasks # print(value == tasks[0]['id']) tasks = [task for task in tasks if task['id'] != value and task['name'] != value] def getTasks(): return tasks def getPendingTasks(): nonlocal tasks tasks = [task for task in tasks if task['completed'] != True] return tasks def getCompletedTasks(): nonlocal tasks completed = [task for task in tasks if task['completed'] != False] return completed def markTaskAsCompleted(value): # nonlocal tasks for i, task in enumerate(tasks): if task['id'] == value or task['name'] == value: tasks[i]['completed'] = True def getSortedTasksByPriority(): return sorted(tasks, key=lambda x: x['priority'] ) def filterTasksByTag(tag): return list(filter(lambda x: tag in x['tags'] , tasks)) def updateTask(taskId, updates): for i, task in enumerate(tasks): if task['id' ] == taskId: for key, value in updates.items(): tasks[i][key] = value return { 'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks':getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted':markTaskAsCompleted, 'getSortedTasksByPriority':getSortedTasksByPriority, 'filterTasksByTag':filterTasksByTag, 'updateTask' :updateTask }
Solución 😄... .
def createTaskPlanner(): tasks = [] def addTask(task): task['completed'] = False tasks.append(task) def removeTask(value): item = [ task for task in tasks if task['id'] == value or task['name'] == value ][0] return tasks.remove(item) def getTasks(): return tasks def getPendingTasks(): return [ task for task in tasks if task['completed'] == False ] def getCompletedTasks(): return [ task for task in tasks if task['completed'] == True ] def markTaskAsCompleted(value): index = tasks.index([ task for task in tasks if task['id'] == value or task['name'] == value ][0]) tasks[index]['completed'] = True def getSortedTasksByPriority(): return sorted( tasks, key=lambda task: task['priority'] ) def filterTasksByTag(tag): return [ task for task in tasks if tag in task['tags'] ] def updateTask(taskId, updates): index = tasks.index([ task for task in tasks if task['id'] == taskId ][0]) tasks[index].update(updates) return { 'addTask': addTask, 'removeTask': removeTask, 'getTasks': getTasks, 'getPendingTasks': getPendingTasks, 'getCompletedTasks': getCompletedTasks, 'markTaskAsCompleted': markTaskAsCompleted, 'getSortedTasksByPriority': getSortedTasksByPriority, 'filterTasksByTag': filterTasksByTag, 'updateTask': updateTask }