цикл по номерам задач - PullRequest
0 голосов
/ 07 февраля 2020

Может ли кто-нибудь помочь с моим текущим кодом. Я хотел бы добавить номера задач к моим задачам, которые будут сохранены в моем выходном текстовом документе. Мне нужно l oop, чтобы каждому заданию был присвоен следующий номер задания. Если возможно, я бы хотел позвонить по этим номерам задач позже.

Пока мой код:

def add_task():
 if menu == "a" or menu == "A":
    with open( 'user.txt' ) as fin :    
        usernames = [i.split(',')[0] for i in fin.readlines() if len(i) > 3]
        task = input ("Please enter the username of the person the task is assigned to.\n")
    while task not in usernames :
        task = input("Username not registered. Please enter a valid username.\n")

    else:
        task_title = input("Please enter the title of the task.\n")
        task_description = input("Please enter the task description.\n")
        task_due = input("Please input the due date of the task. (yyyy-mm-dd)\n")
        date = datetime.date.today()
        task_completed = False
        if task_completed == False:
            task_completed = "No"
        else:
            task_completed = ("Yes")

        with open('tasks.txt', 'a') as task1:
            task1.write("\nUser assigned to task:\n" + task + "\nTask Title :"  + "\n" + task_title + "\n" + "Task Description:\n" + task_description + "\n" + "Task Due Date:\n" + task_due + "\n" + "Date Assigned:\n" + str(date) + "\n" + "Task Completed:\n" + task_completed + "\n")
            print("The new assigned task has been saved")
add_task()

1 Ответ

0 голосов
/ 07 февраля 2020

Во-первых, я действительно не хочу вдаваться в подробности go, но способ хранения выходных данных крайне неэффективен и труднее получить доступ к большему текстовому файлу. Почему бы не использовать бесплатную систему БД для хранения ваших данных.

Во-вторых. Предполагая, что вы хотите писать много задач одновременно, но, если можно так выразиться, «сохранить» только один раз, рассмотрите возможность использования dict of dicts.

def write_task_to_txt(task):
    ### break down the dict to from your lines to write to your text
def add_task(task_list,task_id):

    new_tasks[task_id] = {}
    new_tasks[task_id]["username"] = "username"
    new_tasks[task_id]["title"] = "Task 1"
    ### How you fill up a task
    return task_list
new_tasks = {}
for i in range(10):
    new_tasks = add_task(new_tasks,i+1)
write_task_to_txt(new_tasks)

При этом вы всегда можете получить доступ к задаче, используя new_tasks [task_id] вытащить все данные этой задачи. Обратите внимание, что для l oop используется итератор. Если вы хотите избежать этого, вы можете использовать вместо него глобальный и некоторое время l oop. НО, если вы хотите это сделать, я рекомендую преобразовать ваше приложение в класс и использовать вместо него переменные класса.

Вот скелет того, как я бы это попробовал:

class yourclass():
    def __init__(self):
        self.task_num = 1 #use 1 if no values
        self.tasks_towrite = {}
        self.mode_select()
    def mode_select(self):
        self.menu = input("choose mode")
        while(1):
            if self.menu == "a" or self.menu == "A":
                self.add_task()
            if self.menu == "s".casefold() #Cool function that does the same as your menu thingy
                self.write_to_text()
            else:
                print("exit")
                self.close_program()
    def close_program(self): # Exit function
        print("exiting")
        sys.exit(1)

    def add_task(self): #Add task

        with open( 'user.txt' ) as fin :    
            self.usernames = [i.split(',')[0] for i in fin.readlines() if len(i) > 3]
            task = input ("Please enter the username of the person the task is assigned to.\n")
        while task not in self.usernames :
            task = input("Username not registered. Please enter a valid username.\n")

        else:
            new_task = {}
            new_task["username"] = task
            new_task["title"] = input("Please enter the title of the task.\n")
            new_task["description"] = input("Please enter the task description.\n")
            new_task["due"] = input("Please input the due date of the task. (yyyy-mm-dd)\n")

            date = datetime.date.today()
            task_completed = False
            if task_completed == False:
                 new_task["completed"]  = "No"
            else:
                 new_task["completed"]  = "Yes"
            new_task["assigned"] = date
            self.tasks_towrite[self.task_num] = new_task
            sefl.task_num +=1 #New test number
            return None #returns to mode_select
    def write_to_text(self):
        with open('tasks.txt', 'a') as task1:
            for i in self.tasks_towrite:
                task1.write(str(i) + "\n") #Writes it all at once You can reformat however you want 
            self.tasks_towrite = {}

            print("The new assigned tasks has been saved")
            return None #returns to menu or you could go to self.close_program to exit 

if __name__== '__main__':
x = yourclass()
...