Работа с датами в любом году

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь создавать скрипт на Python, который выводит все воскресенья за заданный год. Это полезный навык для любого, кто должен работать с датами и задачами, связанными с временем, в своих проектах программирования.

👀 Предварительный просмотр

python Sunday.py 2022
2022-01-02
2022-01-09
2022-01-16
2022-01-23
2022-01-30
2022-02-06
2022-02-13
2022-02-20
...

🎯 Задачи

В этом проекте вы научитесь:

  • Как использовать модули datetime и calendar в Python для работы с датами
  • Как написать функцию, которая вычисляет и возвращает список всех воскресений за заданный год
  • Как обрабатывать ввод пользователя и аргументы командной строки в скрипте на Python
  • Как усовершенствовать и настроить скрипт, чтобы сделать его более гибким и удобным для пользователя

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться, как работать с датами и временем в Python
  • Написать скрипт, который может вывести все воскресенья за заданный год
  • Настроить скрипт для обработки различных годов и ввода пользователя
  • Применить свои новые знания к другим задачам, связанным с датами, в своих проектах программирования

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/PythonStandardLibraryGroup -.-> python/date_time("Date and Time") subgraph Lab Skills python/conditional_statements -.-> lab-302733{{"Работа с датами в любом году"}} python/arguments_return -.-> lab-302733{{"Работа с датами в любом году"}} python/standard_libraries -.-> lab-302733{{"Работа с датами в любом году"}} python/date_time -.-> lab-302733{{"Работа с датами в любом году"}} end

Создайте файл Sunday.py

В этом шаге вы создадите файл Sunday.py и установите начальную структуру скрипта.

  1. Создайте файл Sunday.py в директории ~/project.
cd ~/project
touch Sunday.py
  1. Добавьте следующий код в файл:
import datetime
import sys


## Функция для вывода всех воскресений за заданный год
def print_sundays(year):
    sundays = []  ## Список для хранения воскресений
    date = datetime.date(year, 1, 1)  ## Начните с 1 января заданного года
    delta = datetime.timedelta(days=1)  ## Определите временной интервал в 1 день

    ## Найдите первое воскресенье года
    while date.weekday()!= 6:  ## 6 обозначает воскресенье (понедельник - 0, воскресенье - 6)
        date += delta  ## Перейдите к следующему дню

    ## Выведите все воскресения в году
    while date.year == year:  ## Цикл, пока год не изменится
        sundays.append(
            date.strftime("%Y-%m-%d")
        )  ## Добавьте воскресенье в список (форматированное как YYYY-MM-DD)
        date += datetime.timedelta(
            weeks=1
        )  ## Перейдите к следующему воскресенью (увеличьте на 1 неделю)

    return sundays  ## Верните список воскресений


## Прочитайте год из аргумента командной строки
if len(sys.argv) > 1:
    year = int(sys.argv[1])  ## Преобразуйте аргумент командной строки в целое число
    sundays = print_sundays(year)  ## Вызовите функцию, чтобы получить список воскресений
    for sunday in sundays:
        print(sunday)  ## Выведите каждое воскресенье
else:
    print(
        "Пожалуйста, укажите год в качестве аргумента командной строки."
    )  ## Отобразите сообщение об ошибке, если год не указан

Этот код устанавливает базовую структуру скрипта Sunday.py, включая функцию print_sundays() и обработку аргументов командной строки.

Разберитесь с кодом

В этом шаге вы поймете назначение и функциональность кода в файле Sunday.py.

  1. Функция print_sundays() принимает параметр year и возвращает список всех воскресений в этом году.
  2. Функция начинается с создания объекта datetime.date с заданным year и первым днем года (1 января).
  3. Затем она находит первое воскресенье года, перебирая дни до тех пор, пока день недели не будет равен 6 (воскресенье).
  4. Как только первое воскресенье найдено, функция входит в цикл, который продолжается до конца года. В каждой итерации она добавляет текущее воскресенье в список sundays и переходит к следующему воскресенью (добавляя временной интервал в 1 неделю).
  5. Наконец, функция возвращает список воскресений.
  6. Основная часть скрипта читает год из аргумента командной строки и вызывает функцию print_sundays() с указанным годом. Затем она выводит каждое воскресенье из списка.
  7. Если аргумент командной строки не указан, скрипт отображает сообщение об ошибке.

Запустите скрипт

В этом шаге вы запустите скрипт Sunday.py и изучите вывод.

  1. Откройте терминал и перейдите в директорию /home/labex/project.
  2. Запустите скрипт Sunday.py с конкретным годом в качестве аргумента командной строки:
python Sunday.py 2022

Вы должны увидеть следующий вывод:

2022-01-02
2022-01-09
2022-01-16
2022-01-23
2022-01-30
2022-02-06
2022-02-13
2022-02-20
2022-02-27
2022-03-06
2022-03-13
2022-03-20
2022-03-27
2022-04-03
2022-04-10
2022-04-17
2022-04-24
2022-05-01
2022-05-08
2022-05-15
2022-05-22
2022-05-29
2022-06-05
2022-06-12
2022-06-19
2022-06-26
2022-07-03
2022-07-10
2022-07-17
2022-07-24
2022-07-31
2022-08-07
2022-08-14
2022-08-21
2022-08-28
2022-09-04
2022-09-11
2022-09-18
2022-09-25
2022-10-02
2022-10-09
2022-10-16
2022-10-23
2022-10-30
2022-11-06
2022-11-13
2022-11-20
2022-11-27
2022-12-04
2022-12-11
2022-12-18
2022-12-25

Вывод показывает все воскресенья в году 2022.

✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.