Using an enumerate function for a string, with inserted file extracted variables, is it possible to recall correlated enumerate numbers upon input?

huangapple go评论81阅读模式
英文:

Using an enumerate function for a string, with inserted file extracted variables, is it possible to recall correlated enumerate numbers upon input?

问题

我对Python很陌生,所以对任何事情都不太确定:) 通过定义一个函数,我能够为从文本文件中提取的信息编号一个任务。

def view_mine():
  
  with open("tasks.txt", "r") as file: 
    
    for i, lines in enumerate(file):

     temp = lines.strip()

     temp = temp.split(", ")

     if user_name in (temp[0]):
         
         print("\n" + str(i+1) + ". " + f"Assigned to:\t{temp[0]}\nThe tital of the task:\t{temp[1]}\
               \nThe description of the task :\t{temp[2]}\nSet date:\t{temp[3]}\
                \nDue date:\t{temp[4]}\nTask complete? :\t{temp[5]}")
        
    file.close()

然后,我需要使用该编号,以便要求用户输入他/她希望编辑的任务编号,即更改截止日期/完成状态。

     view_mine()

     print("\n")

     task_selection = input("Select a task for modification? (enter -1 to return to the main menu): ")

     task_selection = int(task_selection)

     task_selection = task_selection - 1

     task_selection = view_mine(task_selection) ???- 这是我卡住的地方 

     if task_selection != ("-1"):

        task_modification = input("Would you like to:\n1-edit the task\n2-mark the task as complete\nEnter your choice: ")

        if task_modification == ("1"):
           
           task_modification_edit = input("Would you like to:\n1-edit the username the task is assigned to\n2-edit the due date\nEnter your choice: ")

           my_task = {"Assigned to: " : (temp[0]),
               "\nThe tital of the task: " : (temp[1]),
               "\nThe description of the task: " : (temp[2]),
               "\nSet date: " :  (temp[3]),
                "\nDue date: " :  (temp[4]),
                "\nTask complete? " : (temp[5])}

           if task_modification_edit == ("1"):
              
              task_modification_username = input("Enter the username you wish to assign the task for: ")

              my_task["Assigned to: "] = task_modification_username

              print("The username has been successfully changed")

           elif task_modification_edit == ("2"):
              
              task_modification_due_date = input("Please enter a new due date: ")

              my_task["\nDue date: "] = task_modification_due_date

              print ("The due date has been successfully modified")

        elif task_modification == ("2"):
           
           if my_task["\nTask complete? "] == ("No"):
             
             my_task["\nTask complete? "] = ("Yes")

           print("The task has been marked as complete")

     elif task_selection == ("-1"):

        break 

我不确定如何执行这个操作,以获得用户首先选择任务编号的期望结果,然后在所选任务上执行修改。

英文:

I am very new to Python, so not sure about anything:) Through defining a function, I was able to number a task, with the information extracted from a text file.

def view_mine():
  
  with open("tasks.txt", "r") as file: 
    
    for i, lines in enumerate(file):

     temp = lines.strip()

     temp = temp.split(", ")

     if user_name in (temp[0]):
         
         print("\n" + str(i+1) + ". " + f"Assigned to:\t{temp[0]}\nThe tital of the task:\t{temp[1]}\
               \nThe description of the task :\t{temp[2]}\nSet date:\t{temp[3]}\
                \nDue date:\t{temp[4]}\nTask complete? :\t{temp[5]}")
        
    file.close()

I then need to use that number, in order to ask the user to input the number of tasks he/she wishes to edit, aka change the due date/completion status.

     view_mine()

     print("\n")

     task_selection = input("Select a task for modification? (enter -1 to return to the main menu): ")

     task_selection = int(task_selection)

     task_selection = task_selection - 1

     task_selection = view_mine(task_selection) ???- here is where I am stuck 

     if task_selection != ("-1"):

        task_modification = input("Would you like to:\n1-edit the task\n2-mark the task as complete\nEneter your choice: ")

        if task_modification == ("1"):
           
           task_modification_edit = input("Would you like to:\n1-edit the username the task is assigned to\n2-edit the due date\nEnter your choice: ")

           my_task = {f"Assigned to: " : (temp[0]),
               "\nThe tital of the task: " : (temp[1]),
               "\nThe description of the task: " : (temp[2]),
               "\nSet date: " :  (temp[3]),
                "\nDue date: " :  (temp[4]),
                "\nTask complete? " : (temp[5])}

           if task_modification_edit == ("1"):
              
              task_modification_username = input("Enter the username you wish to assign the task for: ")

              my_task["Assigned to: "] = task_modification_username

              print("The uasername has been sucsessfuly changed")

           elif task_modification_edit == ("2"):
              
              task_modification_due_date = input("Please enter a new due date: ")

              my_task["\nDue date: "] = task_modification_due_date

              print ("The due date has been sucsesfully modified")

        elif task_modification == ("2"):
           
           if my_task["\nTask complete? "] == ("No"):
             
             my_task["\nTask complete? "] = ("Yes")

           print("The task has been marked as complite")

     elif task_selection == ("-1"):

        break 

I am not sure how to perform this, to get the wanted outcome of allowing the user to chose the number of the task first, and then perfom modifications on that selected task.

答案1

得分: 0

好的,以下是您要翻译的代码部分:

def view_mine(user_name):
    tasks = []
    
    with open("text_stack_prova.txt", "r") as file:
        for lines in file:
            temp = lines.strip().split(", ")
            if user_name == temp[0]:
                tasks.append(temp)
        file.close()

    return tasks

if __name__=="__main__":
    while True:
        user_name = input("Enter the user you are looking for:\n")
        tasks = view_mine(user_name)

        if len(tasks) == 0:
            print(f"No tasks found for user: {user_name}! Exiting program...")
            break
        else:
            print("Here are the Tasks assigned to", user_name + ":")
            for i, task in enumerate(tasks):
                print(str(i+1) + ". " + f"Assigned to:\t{task[0]}\nThe title of the task:\t{task[1]}\
                      \nThe description of the task:\t{task[2]}\nSet date:\t{task[3]}\
                      \nDue date:\t{task[4]}\nTask complete? :\t{task[5]}\n")

        task_selection = input("Give me the index of the Task that need to be modified: (enter -1 to return to the main menu): ")

        try:
            task_selection = int(task_selection)

            if task_selection == -1:
                print("Ok let's restart from the beginning...\n")
                continue # not break!!
            else:
                task_selection -= 1
                selected_task = tasks[task_selection]
                task_modification = input("Would you like to:\n1 - edit the task\n2 - mark the task as complete\nEnter your choice: ")
                while True:
                    if task_modification == "1":
                        task_modification_edit = input("Would you like to:\n1 - edit the username the task is assigned to\n2 - edit the due date\nEnter your choice: ")
                        if task_modification_edit == "1":
                            task_modification_username = input("Enter the username you wish to assign the task to: ")
                            old_name = selected_task[0]
                            selected_task[0] = task_modification_username
                            print("The user {} has been successfully changed in {}".format(old_name, task_modification_username))
                            break
                        elif task_modification_edit == "2":
                            task_modification_due_date = input("Please enter a new due date [YYYY-MM-DD]: ")
                            selected_task[4] = task_modification_due_date
                            print("The due date has been successfully modified.")
                            break                        
                        else:
                            print("Invalid choice. Please try again.")
                            continue
                    elif task_modification == "2":
                        if selected_task[5] == "No":
                            selected_task[5] = "Yes"
                            print("The task has been marked as complete.")
                        else:
                            print("The task is already marked as complete.")
                            break
                    else:
                        print("Invalid choice. Please try again. Exiting program...")

        except ValueError:
            print("Invalid input. Please enter a valid number or -1.")
            break
英文:

OK then...
I'll give you a silly solution, that you can use as a starting point to built your program and start practising Python!
You should change features, fix flaws, or add the necessary improvements, according to what you really want to achieve.

Hints:

_How to restart the program instead of quitting in case of errors?
_How to ensure that an input is a valid integer?
_How to handle other exceptions? (e.g. the "IndexError: list index out of range" that occurs when the number corresponds to a Task that does not exist)
_How to check that a date format is correct?
_How to use '-1' as command to return to main-menu for every input?
_How to create a method that modify/update the original file after changes?
_How to add new tasks from input?
_How to create a simple GUI interface, instead of using terminal?

Snippet:

def view_mine(user_name):
    tasks = []
    
    with open("text_stack_prova.txt", "r") as file:
        for lines in file:
            temp = lines.strip().split(", ")
            if user_name == temp[0]:
                tasks.append(temp)
        file.close()

    return tasks

if __name__=="__main__":
    while True:
        user_name = input("Enter the user you are looking for:\n")
        tasks = view_mine(user_name)

        if len(tasks) == 0:
            print(f"No tasks found for user: {user_name}! Exiting program...")
            break
        else:
            print("Here are the Tasks assigned to", user_name + ":")
            for i, task in enumerate(tasks):
                print(str(i+1) + ". " + f"Assigned to:\t{task[0]}\nThe title of the task:\t{task[1]}\
                      \nThe description of the task:\t{task[2]}\nSet date:\t{task[3]}\
                      \nDue date:\t{task[4]}\nTask complete? :\t{task[5]}\n")

        task_selection = input("Give me the index of the Task that need to be modified: (enter -1 to return to the main menu): ")

        try:
            task_selection = int(task_selection)

            if task_selection == -1:
                print("Ok let's restart from the beginning...\n")
                continue # not break!!
            else:
                task_selection -= 1
                selected_task = tasks[task_selection]
                task_modification = input("Would you like to:\n1 - edit the task\n2 - mark the task as complete\nEnter your choice: ")
                while True:
                    if task_modification == "1":
                        task_modification_edit = input("Would you like to:\n1 - edit the username the task is assigned to\n2 - edit the due date\nEnter your choice: ")
                        if task_modification_edit == "1":
                            task_modification_username = input("Enter the username you wish to assign the task to: ")
                            old_name = selected_task[0]
                            selected_task[0] = task_modification_username
                            print("The user {} has been successfully changed in {}".format(old_name, task_modification_username))
                            break
                        elif task_modification_edit == "2":
                            task_modification_due_date = input("Please enter a new due date [YYYY-MM-DD]: ")
                            selected_task[4] = task_modification_due_date
                            print("The due date has been successfully modified.")
                            break                        
                        else:
                            print("Invalid choice. Please try again.")
                            continue
                    elif task_modification == "2":
                        if selected_task[5] == "No":
                            selected_task[5] = "Yes"
                            print("The task has been marked as complete.")
                        else:
                            print("The task is already marked as complete.")
                            break
                    else:
                        print("Invalid choice. Please try again. Exiting program...")

        except ValueError:
            print("Invalid input. Please enter a valid number or -1.")
            break  

huangapple
  • 本文由 发表于 2023年6月22日 18:28:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/76530949.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定