Простой способ переписать код, чтобы сохранить правильный вывод в текст
Надеюсь, кому-то наконец-то поможет. Я пытаюсь написать код для сохранения задач в текстовый файл. Текстовый файл принимает ввод от пользователя и хранит информацию. Я хотел бы найти очень простой способ изменить мой следующий код, чтобы добавить номер к задаче, чтобы я мог позже вызвать конкретную задачу. После того, как первая задача помечена как Пользователь назначена задаче 1: следующая задача должна быть помечена как Пользователь назначен задаче 2:, а затем задача Пользователь назначена задаче 3:
пример задачи:
Пользователь, которому назначена задача:
Джек
Название задачи:
бег трусцой
Описание задания:
Бегать трусцой
Срок выполнения задачи:
2020-02-08
Назначенная дата:
2020-02-07
Задание выполнено:
Нет
запрошенный вывод:
Пользователь, назначенный задаче 1:
Джек
Название задачи:
бег трусцой
Описание задания:
Бегать трусцой
Срок выполнения задачи:
2020-02-08
Назначенная дата:
2020-02-07
Задание выполнено:
Нет
Код, который у меня есть, выглядит следующим образом. Он записывает числа в текстовый файл, но все они помечены как задача 1, и следующая задача не меняется на задачу 2:
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")
count = 0
add_task(count)
1 ответ
Это потому, что переменная count
изменяется только в рамках add_task()
. Изменение не видно за пределами этой функции, поэтомуcount
является всегда 0
когда ты звонишь add_task(count)
.
Чтобы узнать больше об области видимости в Python, перейдите по этой ссылке: https://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html
РЕДАКТИРОВАТЬ: вы можете либо получить доступ к глобальной переменной count (см. Этот ответ), либо - и это то, что я бы рекомендовал - вы можете вернуть локальную переменнуюcount
и используйте его для обновления другой переменной следующим образом: count = add_task(count)