Правильная функция для l oop в текстовый файл - PullRequest
0 голосов
/ 08 февраля 2020

Может ли кто-нибудь помочь с правильным способом l oop в текстовый файл. У меня есть проблема с моим кодом в тот момент, когда он записывает номера задач в текстовый файл, но все числа возвращают задачу 1. Моя вторая задача не возвращает задачу 2, а третья задача не возвращает задачу 3. Все они возвращаются. задача 1. Я хотел бы, чтобы номер задачи менялся каждый раз, когда я добавляю задачу в текстовый файл. Возможен ли простой способ вызова определенной задачи c позже в коде?

пример задачи:

Пользователь, назначенный для задачи:

jack

Название задачи:

jog

Описание задачи:

Go бег

Срок выполнения задачи:

2020-02-08

Назначенная дата:

2020-02-07

Задание выполнено:

Нет

запрошенный вывод:

Пользователь назначен на задачу 1:

jack

Название задачи:

jog

Описание задачи:

Go бег

Срок выполнения задачи:

2020-02-08

Назначенная дата:

2020-02-07

Задача выполнена:

Нет

Код, который у меня есть, следующий. Он записывает числа в текстовый файл, но все они помечены как задача 1, и следующая задача не меняется на задачу 2:

count = 0

def add_task(count):
 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:
            count = count + 1
            task1.write("\nUser assigned to task" + str(count) + "\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(count)

1 Ответ

2 голосов
/ 08 февраля 2020

Переменная count находится в глобальной области видимости, и когда вы запускаете count = count + 1 в своей функции, вы изменяете ее только для области локальной функции. если вы хотите, чтобы функция изменила глобальную переменную, вам нужно использовать оператор global.

Добавьте это в качестве первой строки функции add_task:

global count

И удалите считать из параметра функции. (поэтому функция add_task будет вызываться без передачи ей счетчика)

Теперь, когда вы запустите count = count + 1, она изменит переменную счетчика из глобальной области.

Однако использование глобальных переменных не рекомендуется , лучше использовать класс и сохранить счетчик в качестве переменной класса:

class TaskCreator():
    task_count = 0
    @classmethod
    def add_task(cls):
        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:
                    cls.task_count += 1
                    task1.write("\nUser assigned to task" + str(cls.task_count) + "\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")

TaskCreator.add_task()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...