es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ordenar ascendente mente una lista de tareas basada en la prioridad.

Como parte de una oportunidad de pasantía, nos han pedido que hagamos una aplicación CLI de lista de tareas pendientes. El problema es que no sé cómo ordenar el texto en el archivo en orden ascendente de prioridad, cualquier ayuda sería apreciada.

Aquí está mi código:

import typer 
app = typer.Typer()

@app.command()
def help():
    print("""Uso:
$ ./todo add 2 hello world  # Agregar un nuevo elemento con prioridad 2 y texto "hello world" a la lista
$ ./todo ls               # Mostrar elementos de la lista de prioridades incompletas ordenados por prioridad en orden ascendente
$ ./todo del NUMBER       # Eliminar el elemento incompleto con el número de prioridad dado
$ ./todo done NUMBER      # Marcar el elemento incompleto con el NÚMERO_DE_PRIORIDAD dado como completado
$ ./todo help             # Mostrar el uso
$ ./todo report           # Estadísticas """)

@app.command()
def add(priority: int,task: str):

    file1=open("ls.txt","r")
    x=len(file1.readlines())
    y=x+1
    file1.close()
    file1=open("ls.txt","a")
    file1.write(str(y)+". "+task + " ["+str(priority)+"]"+ "\n")
    file1.close()

@app.command()
def ls():
    file1=open("ls.txt","r")
    print(file1.read())

if __name__=="__main__":
    app()

Y aquí está la imagen de salida deseada: image

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para ordenar el texto en el archivo en orden ascendente de prioridad, puedes hacer lo siguiente:

    1. Lee el contenido del archivo y guárdalo en una lista.
    2. Utiliza la función sorted con una función de clave para ordenar la lista basada en la prioridad.
    3. Escribe la lista ordenada de vuelta al archivo.

    Aquí tienes una versión actualizada de la función ls que implementa esto:

    @app.command()
    def ls():
        with open("ls.txt", "r") as f:
            items = [line.strip() for line in f.readlines()]
    
        sorted_items = sorted(items, key=lambda item: int(item.split("[")[1][:-1]))
    
        for item in sorted_items:
            print(item)
    

    Explicación:

    1. Abrimos el archivo en modo lectura y leemos su contenido en una lista llamada items. Utilizamos una declaración with para cerrar automáticamente el archivo después de la lectura.
    2. Utilizamos la función sorted para ordenar la lista items basándonos en el valor de prioridad. La función de clave es una función lambda que extrae el valor de prioridad de cada ítem.
    3. Iteramos sobre los ítems ordenados e imprimimos cada uno.

Comments are closed.