Рубрики
Без рубрики

Неделя 1: первые семь шагов

Цель этого проекта – написать ежедневную программу задач в Python, которая побуждает пользователей в MOR … Tagged с Python, 100daysOfCode, WomenIntech.

Цель этого проекта – написать ежедневную программу задач в Python, которая побудит пользователей утром записать три вещи, которые они хотели бы достичь в тот день (один майор, два несовершеннолетних), и побудить их снова вечером обновить, будь то Задачи были выполнены или нет.

Разработка этого проекта будет направлена знаниями Python, получившим неделю на неделю, для удовлетворения еженедельных целей, начиная с базовой программы, которая обрабатывает следующие 7 шагов;

  1. Утренний пользовательский подсказка
  2. Пользовательские входные задачи
  3. Программные магазины задачи
  4. Вечерний пользовательский подсказка
  5. Пользовательские обновления статус задачи
  6. Программные магазины обновляется статус задачи
  7. Повторная программа в новые дни

И разработка этих процессов в приложение с открытым исходным кодом, совместимое с ноутбуками и мобильными устройствами.

Есть много онлайн -ресурсов, на которые я могу ссылаться на этот проект, и я в основном буду использовать следующее;

Требования

Перед началом какого -либо кодирования требования к программе рассматривались на каждый шаг. Они обеспечивали ясность в процессе.

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”