Спору нет, если ищешь, то всегда что-нибудь найдешь, но совсем не обязательно то, что искал
Джон Рональд Руэл Толкин » Хоббит, или Туда и обратно «.

Наверное, самая приятная часть вашей работы. Это печально?
Удаляйте код. О, как это хорошо!
Речь сегодня пойдет о такой простой задаче, как вывод календаря за месяц в командной строке. (Саму идею я взял из книги «101 BASIC Computer Games» Edited by David H. Ahl, published 1978 (ссылка). ) Легко понять, что сам код на бейсике будет отличаться от кода на Python, но насколько сильно?
Отличия заключаются в том, что — мы хотим сами выбирать дату в диапазоне от 1-го года н.э, до скажем 9999 года н.э. Месяц должен отображаться в консоли в виде колонок, примерно так как в настольном календаре. Никаких goto и возможность управлять программой из консоли.
Первым делом я сделал прототип того, как это будет отображаться в консоли в виде комментариев, прежде чем начать программировать, так мне стало более понятно, что же я хочу получить в дальнейшем.
"""
*********************************************************
* MONTH *
*********************************************************
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
*********************************************************
"""
Довольно понятная структура для вывода. Первое с чем я тут столкнулся — как узнать какой день недели первое число месяца? И не заглядывая в библиотеки питона стал придумывать велосипед. Дошёл до алгоритма Зеллера (eng wiki) — который довольно быстро реализовал в программе, но потом понял, что мне нужны дополнительные средства для работой с датами.
Например, для того чтобы узнать текущую системную дату вполне можно воспользоваться библиотекой — datetime, которая может вернуть текущую дату в виде строки, всё что нужно с ней сделать — это всего лишь превратить её в список.
После этого пришлось добавить библиотеку sys для ввода параметров запуска в командной строке, а не ввода их после запуска программы. Изначально я планировал передавать три параметра год, месяц и день. (Догадаетесь ли вы что здесь лишнее?). После чего мне нужно было написать несколько функций для проверки валидности данных.
Сначала таких функций было три и они проверяли — число ли это значение, а потом попадает ли в рамки, для года от 1 до 9999, для месяца от 1 до 12, а вот для дня… И тут я узнал о ещё одной библиотеке , которая могла вернуть количество дней в месяце, всё что мне нужно было сделать — это сравнить значения, пока меня не озарило, что для моей задачи проверка дней вообще не нужна, мне достаточно месяца и знать, сколько дней в неделе. Плюс, я более внимательно посмотрел на библиотеку календарь и увидел, что она позволит мне выводить значения в формате, который меня устроит.
В итоге вышел вот такой код. (Ссылка на гитхаб.)
Три функции, две для проверки валидности даты, одна для нахождения текущего месяца. Был большой соблазн сделать ещё функцию для вывода всей информации на экран , а также ошибок, но в данной реализации это не выглядит здравым шагом, так как main — небольшая функция.