Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 225

Когда я запускаю эту программу, я вижу следующее:

I'm main, in process 97080

I'm loopy, in process 97081

Number 1 of 1000000. Honk!

Number 2 of 1000000. Honk!

Number 3 of 1000000. Honk!

Number 4 of 1000000. Honk!

Number 5 of 1000000. Honk!

Календари и часы

Программисты прилагают удивительное количество усилий в процессе работы

с датами и временем. Поговорим о некоторых проблемах, с которыми они сталки-

ваются, а затем рассмотрим лучшие способы и приемы, позволяющие проще с ними

справиться.

Даты могут быть представлены множеством способов — их даже слишком мно-

го. Даже англоговорящие люди, использующие римский календарь, применяют

множество вариантов представления простой даты:

 July 29 1984;

 29 Jul 1984;

 29/7/1984;

 7/29/1984.

292

Глава 10. Системы

Помимо других проблем, представление даты может быть двусмысленным.

В предыдущих примерах довольно легко определить, что 7 означает месяц, а 29 —

день месяца, в основном потому что у месяца не может быть номера 29. Но как

насчет даты 1/6/2012? Мы говорим о 6 января или 1 июня?

Название месяца в римском календаре изменяется в зависимости от языка. Даже

год и месяц могут иметь разные определения в разных культурах.

Високосные годы — это еще одна проблема. Вы, возможно, знаете, что каждый

четвертый год является високосным (в этом году проходят летняя олимпиада и вы-

боры президента в Америке). Знаете ли вы, что каждый сотый год не является

високосным, а каждый 400-й — является? Рассмотрим пример кода, в котором

проверяется, является ли год високосным:

>>> import calendar

>>> calendar.isleap(1900)

False

>>> calendar.isleap(1996)

True

>>> calendar.isleap(1999)

False

>>> calendar.isleap(2000)

True

>>> calendar.isleap(2002)

False

>>> calendar.isleap(2004)

True

Работа с временем также может доставить неприятности, особенно из-за часовых

поясов и перехода на летнее время. Если вы взглянете на карту часовых поясов, то

окажется, что эти пояса больше соответствуют политическим и историческим

границам, вместо того чтобы сменяться каждые 15° (360°/24) долготы. Кроме того,