Цель этого проекта – написать ежедневную программу задач в Python, которая побудит пользователей утром записать три вещи, которые они хотели бы достичь в тот день (один майор, два несовершеннолетних), и побудить их снова вечером обновить, будь то Задачи были выполнены или нет.
Разработка этого проекта будет направлена знаниями Python, получившим неделю на неделю, для удовлетворения еженедельных целей, начиная с базовой программы, которая обрабатывает следующие 7 шагов;
- Утренний пользовательский подсказка
- Пользовательские входные задачи
- Программные магазины задачи
- Вечерний пользовательский подсказка
- Пользовательские обновления статус задачи
- Программные магазины обновляется статус задачи
- Повторная программа в новые дни
И разработка этих процессов в приложение с открытым исходным кодом, совместимое с ноутбуками и мобильными устройствами.
Есть много онлайн -ресурсов, на которые я могу ссылаться на этот проект, и я в основном буду использовать следующее;
- Андрей Ниагои Завершите ноль -мастерство разработчика Python
- Середина
- Переполнение стека
- W3Schools
- Личные мини -проекты
- Этот сайт, конечно
Требования
Перед началом какого -либо кодирования требования к программе рассматривались на каждый шаг. Они обеспечивали ясность в процессе.
1. Утренний пользовательский подсказка
- Как программа узнает, что это утро?
2. Пользовательские входные задачи
- Как программа запрашивает пользователя для задач?
- Как пользователь узнает, какая задача является основной, а какие – несовершеннолетние?
3. Программа магазинов задачи
- Как программа узнает, когда хранить задачи?
- Где программа хранит задачи?
- Какой уникальный идентификатор для каждой записи?
4. Вечерний пользовательский подсказка
- Как программа узнает, когда это вечер?
5. Пользовательские обновления статус задачи
- Как пользователь обновляет статус задачи?
- Как программа будет показывать только пользователь задачи на этот день?
6. Программные магазины обновляется статус задачи
- Как обновляется статус программного магазина?
- Будет ли программа перезаписать утренние записи задач?
7. Повторная программа
- Как программа узнает, когда начать новую запись?
- Как программа начинает новую запись?
Каждое из этих требований была проверена отдельно перед тестированием всей программы.
Построение кода
1. Утренний пользовательский подсказка
Одна из первых вещей, которую программа должна знать, – это то, какое это время дня. Для простоты этой первой недели были использованы две категории для определения времени суток; утром и вечером. Словарь используется с этими категориями в качестве ключей и значениями как часами, основанными на 24-часовых часах, которые попадают в эти две категории (для меня).
timeOfDay = {"Morning": [5, 6, 7, 8, 9, 10, 11], "Evening": [18, 19, 20, 21, 22, 23]}
Затем программа должна знать текущее время и определить, находится ли текущий час в любой из этих категорий. Для этого программа использует модуль DateTime из библиотеки DateTime и назначает пару функций DateTime с переменными перед простым тестом IF оператора.
# Using the timeOfDay dictionary from datetime import datetime as dt todaysDate = dt.now() currentHourOfDay = dt.now().hour if currentHourOfDay in timeOfDay["Morning"]: print("Good morning!") elif currentHourOfDay in timeOfDay["Evening"]: print("Good evening!") else: print("It is not the morning or the evening")
Чтобы проверить каждое утверждение, я изменил значение CurrentHourOfDay на разные утренние и вечерние значения, а также значения за пределами этих категорий.
2. Пользовательские входные задачи
Есть два этапа ввода задачи для пользователя; Первый утра. Если программа проводится в течение утренних часов, согласно данным в словаре времени, пользователя встречает и спрашивает, чего они хотят достичь в тот день. Для этого используется входная функция, и она включена в качестве корпуса первого оператора IF.
if currentHourOfDay in timeOfDay["Morning"]: print("\nGood morning! What would you like to achieve today?") major = input("Major task: ") minor_1 = input("Minor task 1: ") minor_2 = input("Major task 2: ") print("\nGreat! Come back after 6pm to update your progress")
3. Программа магазинов задачи
Для хранения ежедневных задач я использую DataFrame Pandas, который будет экспортировать данные в файл CSV, и их импортируется при снова. Для этого требуется местоположение файла, имя файла и DataFrame для хранения данных. Чтобы учесть нескольких пользователей, чтобы не перезаписать другие пользовательские хранилища или записи, переменная имени пользователя и дата, чтобы создать уникальное имя файла. Этот уникальный идентификатор со временем изменится по мере развития проекта.
Имя пользователя и дата рождения запрашиваются в начале программы, поэтому оно может найти правильный файл CSV. Кроме того, поскольку запись должна быть идентифицирована, когда CSV вспоминается, а задачи ежедневно представлены, дата в качестве целого числа используется в качестве уникального идентификатора в данных.
import pandas as pd userName = input("First Name: ") dateOfBirth = input("Date of Birth (ddmmyyyy): ") dateAsInteger = int(todaysDate.strftime("%Y%m%d")) fileLocation = "" fileName = userName + dateOfBirth + ".csv" filePath = fileLocation + fileName if not path.exists(filePath): tasks_df = pd.DataFrame(columns=["UniqueID","MajorTask", "MinorTask1", "MinorTask2", "MajorTask_Complete", "MinorTask1_Complete", "MinorTask2_Complete"]) tasks_df.to_csv(fileName, index=False) else: tasks_df = pd.read_csv(filePath) # Previous if statement if currentHourOfDay in timeOfDay["Morning"]: print("\nGood morning! What would you like to achieve today?") major = input("Major task: ") minor_1 = input("Minor task 1: ") minor_2 = input("Major task 2: ") print("\nGreat! Come back after 6pm to update your progress") tasks_df.iloc[0,:4] = [dateAsInteger, major, minor_1, minor_2] tasks_df.to_csv(fileName, index=None)
4. Вечерний пользовательский подсказка
Программа идентифицирует вечер так же, как идентифицирует утро, и пользователю предлагается обновить статус своей задачи ».
5. Пользовательские обновления статус задачи
Чтобы обновить статус задачи », программа импортирует ранее сохраненный CSV и напоминает задачи дня, когда пользователь обновляется, используя функцию ввода.
if currentHourOfDay in timeOfDay["Evening"]: major = tasks_df["MajorTask"][0] minor_1 = tasks_df["MinorTask1"][0] minor_2 = tasks_df["MinorTask2"][0] print("\nWelcome back! Did your complete your tasks (Y/N)?") major_complete = completionKey[input(f"""Today's major task: {major} Did you complete this? """)] minor1_complete = completionKey[input(f"""Today's first minor task: {minor_1} Did you complete this? """)] minor2_complete = completionKey[input(f"""Today's second minor task: {minor_2} Did you complete this? """)]
6. Программа хранит обновления статус задачи
Для хранения обновленного статуса задачи ранее сохраненный CSV импортируется в виде DataFrame, и добавляются новые значения. Словарь используется, чтобы позволить пользователям четко ответить на «y» или «n» для своих обновлений, сохраняя при этом значения как 1 и 0 для будущего анализа.
completionKey = {"Y": 1, "N": 0} if currentHourOfDay in timeOfDay["Evening"]: major = tasks_df["MajorTask"][0] minor_1 = tasks_df["MinorTask1"][0] minor_2 = tasks_df["MinorTask2"][0] print("\nWelcome back! Did your complete your tasks (Y/N)?") major_complete = completionKey[input(f"""Today's major task: {major} Did you complete this? """)] minor1_complete = completionKey[input(f"""Today's first minor task: {minor_1} Did you complete this? """)] minor2_complete = completionKey[input(f"""Today's second minor task: {minor_2} Did you complete this? """)] tasks_df.iloc[0,4:] = [major_complete, minor1_complete, minor2_complete] tasks_df.to_csv(fileName, index=None)
7. Повторная программа
Повторение программы было самым сложным шагом для выяснения. Это требования, которые я изначально не рассмотрел:
- Как программа узнает, что утренние задачи уже были введены?
- Как программа узнает, будет ли это в тот же день или новый день?
- Если это новый день, как программа узнает, чтобы записать новую запись, а не перезаписать предыдущую запись?
- Как программа узнает, является ли пользователь новым, и поэтому требуется новый файл CSV или возвращение?
- Как программа узнает, были ли задачи и их статус «обновлены за день?
Было действительно весело пытаться найти ответы на эти вопросы, и каждый раз, когда я находил ответ на один, появился другой, но я попал туда в конце. Ниже приведен окончательный код на этой неделе.
""" Three Things To Do by @LauraKateHolley """ from datetime import datetime as dt import pandas as pd from os import path userName = input("First Name: ") dateOfBirth = input("Date of Birth (ddmmyyyy): ") todaysDate = dt.now() currentHourOfDay = dt.now().hour dateAsInteger = int(todaysDate.strftime("%Y%m%d")) fileLocation = "C:\\Users\\laura\\Documents\\Personal Projects\\Three Things To Do\\" fileName = userName + dateOfBirth + ".csv" filePath = fileLocation + fileName timeOfDay = {"Morning": [5, 6, 7, 8, 9, 10, 11], "Evening": [18, 19, 20, 21, 22, 23]} completionKey = {"Y": 1, "N": 0} if not path.exists(filePath): tasks_df = pd.DataFrame(columns=["UniqueID","MajorTask", "MinorTask1", "MinorTask2", "MajorTask_Complete", "MinorTask1_Complete", "MinorTask2_Complete"]) tasks_df.to_csv(fileName, index=False) else: tasks_df = pd.read_csv(filePath) if tasks_df.loc[len(tasks_df)-1, 'UniqueID'] != dateAsInteger: tasks_df.loc[len(tasks_df),'UniqueID'] = dateAsInteger firstEntry = tasks_df.iloc[0,1:].isnull().all() latestEntry = int(tasks_df['UniqueID'].max()) maxIndex = len(tasks_df.index) - 1 emptyTasks = tasks_df.iloc[maxIndex,1:4].isnull().all() emptyTaskStatus = tasks_df.iloc[maxIndex,4:].isnull().all() # --- MAIN BODY --- if currentHourOfDay in timeOfDay["Morning"] and firstEntry: print("\nGood morning! Welcome to Three Things To Do. To start, tell me what would you like to achieve today?") major = input("Major task: ") minor_1 = input("Minor task 1: ") minor_2 = input("Minor task 2: ") print("\nGreat! Come back after 6pm to update your task progress") tasks_df.iloc[0,1:4] = [major, minor_1, minor_2] tasks_df.to_csv(fileName, index=None) elif not emptyTasks and emptyTaskStatus and currentHourOfDay not in timeOfDay["Evening"]: print("\nOops! You have already entered your tasks for the day. Come back after 6pm to update your progress") elif latestEntry == dateAsInteger and currentHourOfDay in timeOfDay["Morning"] and emptyTasks: print("\nGood morning! What would you like to achieve today?") major = input("Major task: ") minor_1 = input("Minor task 1: ") minor_2 = input("Major task 2: ") print("\nGreat! Come back after 6pm to update your progress") tasks_df.iloc[maxIndex,:4] = [dateAsInteger, major, minor_1, minor_2] tasks_df.to_csv(fileName, index=None) elif currentHourOfDay in timeOfDay["Evening"] and latestEntry == dateAsInteger and emptyTaskStatus: major = tasks_df["MajorTask"][maxIndex] minor_1 = tasks_df["MinorTask1"][maxIndex] minor_2 = tasks_df["MinorTask2"][maxIndex] print("\nWelcome back! Did your complete your tasks (Y/N)?") major_complete = completionKey[input(f"""Today's major task: {major} Did you complete this? """)] minor1_complete = completionKey[input(f"""Today's first minor task: {minor_1} Did you complete this? """)] minor2_complete = completionKey[input(f"""Today's second minor task: {minor_2} Did you complete this? """)] tasks_df.iloc[maxIndex,4:] = [major_complete, minor1_complete, minor2_complete] tasks_df.to_csv(fileName, index=None) else: print("\nYou have already updated your tasks for the day, good job!") # --- END ---
Выводы в конце недели
Эта неделя была очень веселой. Я узнал о модуле DateTime и модуле Path, которые были ключевыми игроками в том, чтобы записывать новые данные и распознавать новых/возвращающихся пользователей. Первоначально я думал, что это будет несколько строк кода, не так много … Я был неправ. Тем не менее, я надеюсь со временем, когда узнаю больше о создании своих собственных функций и классов, код будет менее … занят?
Я бы очень признателен за любые отзывы по этому поводу. Если это хорошо, то, что я могу сделать, чтобы улучшить его, и любые идеи для развития!
Оригинал: “https://dev.to/laurakateholley/week-1-the-first-seven-steps-40mg”