Думать на языке python думать как компьютерный специалист allen downey

Обновлено: 03.07.2024

Упражнение 1
.

Напишите сценарий, который считывает текущее время и преобразует его во время суток в часах, минутах и секундах, плюс количество дней с начала эпохи.

Возможное решение доступно здесь - Решение

Представленное выше решение кажется простым для понимания, но меня смущают вычисления / формулы для преобразования времени эпохи в нормальное время суток. Эти строки меня больше всего сбивают с толку:

У меня вопрос: почему остаток от деления seconds_in_a_day от epoch делится на seconds_in_an_hour , а затем к результату добавляется 8. У меня такая же путаница с переменными minutes и seconds . Я пытаюсь понять логику такого расчета, но это довольно запутанно.

2 ответа

Поскольку эпоха составляет всего секунды с 1970, мы хотим наблюдать только количество прошедших секунд. Cегодня. Это дает первую часть каждой формулы, (epoch % seconds_in_a_day) .

Теперь, когда у нас есть количество секунд, которое прошло сегодня, мы можем разделить его на количество секунд в часе, чтобы получить количество часов. 8 добавляется здесь к результату, потому что часовой пояс Пекина - UTC + 8.

Поскольку у нас также есть секунды в течение дня, для часов и секунд мы повторяем логику, используемую для дней. Если мы знаем, что с начала сегодняшнего дня прошло n секунд, мы можем модулировать это время на количество секунд в одном часе, чтобы получить «оставшееся» количество секунд, прошедших в последнем незавершенном час. Теперь мы просто разделим его на seconds_in_a_minute , чтобы превратить секунды в минуты.

Та же логика применима и к секундам.

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

Логика заключается в следующем: seconds - это остаток от общего количества секунд, деленный на количество секунд в минуте, а minutes - это остаток от общего количества минут, деленный на количество минут в часе. , с помощью этой логики мы можем получить hours и days таким же образом.

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

Обложка книги Основы Python (Аллен Б. Дауни)

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

Учебник подойдет студентам технических ВУЗов, а также школьникам физ-мат классов, которые любят математику и не боятся решать сложные задачи.

Полная рецензия

Продолжаем поиск лучшей книги по Питону для новичков.

Странная история этой книги

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

Осталось лишь разбираться с тем, что же автор имеет в виду под серьезными математическими знаниями и их отсутствием.

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

Например, функции в книге даются до условий или циклов, что довольно странно. Да что уж там, списки идут только в 10 главе, а понятие рекурсии вводится в пятой, а ведь рекурсия — это не самая простая тема. Особенно если сравнивать со списками.

Оказалось, что автор изначально преподавал Java и в рамках своего курса в университете написал небольшую книгу в помощь студентам. Чтобы им было проще учиться. И выпустил её под свободной лицензией.

И из всего вышесказанного важны две вещи: во-первых, книга изначально создавалась в помощь студентам и во-вторых, автор преподавал в техническом ВУЗе.

Отсюда вытекает целевая аудитория книги — студенты технических ВУЗов и вот с учетом этого становится понятно почему функции идут до списков. Ну или почти понятно.

Первый взгляд на содержание

Давайте всё-таки посмотрим контент. И книга сразу бросает вас в бой. Тут нет многостраничных описаний возможностей Python, сфер его применения или набора скриншотов процесса установки. Ничего такого. Автор сразу предлагает вам начать писать код через сервис PythonAnyWhere, который позволяет запускать программы прямо в браузере. Почему бы и нет.

Разумеется первые примеры несложные — вам надо будет выполнить простые арифметические действия: сложение, вычитания, возведение в степень. Просто чтобы почувствовать Питон. В конце главы идут, опят же, несложные задания, с которыми вы скорее всего справитесь.

Но я бы сильно не обольщался простотой первой главы. Ведь нас еще ждут следующие, но перед тем как перейти дальше, поговорим об авторском стиле, ведь нас интересует не только структура, но и подача, а также глубина материала. И тут есть особенность. С одной стороны, автор довольно понятно и легко пишет. Приятно читать.

А с другой стороны в книге даётся самый минимум. Она скорее похожа на хорошие сопроводительные материалы к лекции, чем на самостоятельное издание.

Например, возьмем функции. Непростая тема для новичков в программировании, однако тут их вводят уже в третьей главе. При этом материал подается легко и понятно. Но Аллен Дауни не описывает все возможности Python-функций, а дает только то, что нужно для решения заданий и продвижения по книге далее. Вы не найдете тут информацию про позиционные и именованные аргументы, или про то как создавать функции с произвольным количеством параметров.

Ничего такого, тут чисто про то, что такое функции, как их использовать и зачем они нужны. И сразу в бой. В этой же главе же автор знакомит читателя с библиотекой math и математическими функциям. Что опять же подтверждает математический уклон книги.

Погружение в математику и программирование

А в четвертой главе автор знакомит с библиотекой turtle, с помощью которой можно рисовать несложные картинки.

Но речь на самом деле про интерфейс функции. В этой же вы узнаете про инкапсуляцию и рефакторинг.

Примечательно, что в современном программировании речь про интерфейс или инкапсуляцию обычно заходит в рамках Объектно-ориентированного подхода. Однако тут автор вводит эти понятия применительно к чистым функциям. И в целом — это для того, чтобы показать вам не только синтаксис Python, но и чтобы познакомить вас с программированием как областью деятельности.

Собственно в этой же главе вы найдете что-то вроде алгоритма создания, документирования, отладки и рефакторинга функций. То есть проходим по всему процессу разработки. А в упражнениях вас ждет практика рисования вот таких фигур:

Пример фигур из книги

Фигуры, которые нужно нарисовать с помощью Python.

И вот тут без математики вам точно не обойтись.

Но, к слову, рядом с каждым заданием есть ссылки на исходники с решениями на Гитхабе и эти ссылки работают. Что как мы уже знаем не всегда бывает с книгами. Поэтому если вы не захотите решать задачи, то можете спокойно подсмотреть код.

Тут же автор знакомит с условиями, что логично, так как без условий написать рекурсивную функцию нельзя. И собственно, в конце главы вам будет предложено нарисовать Кривую Коха.

Кривая Коха

И далее автор еще больше погружается в рекурсию и математику и делает послабление лишь к 7 главе, когда начинает изучение итераций. То есть циклов, а после и строк.

И это чисто классический Вузовский подход, который мы видели у Златопольского, который является преподавателем и в Укусе Питона, где книга похожа на дипломную работу. Тут примерно так же. Разве что выбор тем гораздо более продуманный нежели чем в Укусе.

Полезные примеры

После списков идут словари и примечательно, что в словарях приводится пример оптимизации рекурсивных вызовов функции Фибоначчи. И это очень важно по двум причинам:

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

А во-вторых, автор не просто показал алгоритм вычисления чисел Фибоначчи, а еще и показал один из способов оптимизации рекурсии. А это круто.

Погружение в классы

Но давайте пойдем далее. Далее идут главы про кортежи, файлы и классы. Причем классам посвящено несколько глав: отдельно про объекты, отдельно про методы, отдельно наследование. То есть ООП автор уделяет много внимания, что логично, ведь это Python. Напомню, что у того же Златопольского вообще ничего нет про классы. А тут всё ОК.

После основ программирования Аллен Дауни решает немного подсластить синтаксическим сахаром: приводит однострочный if, генераторы, множества, функции all и any, знакомит с модулем collections. Не очень глубоко, но в целом неплохо.

Завершается же книга главой про отладку программ и анализом алгоритмов.

Выводы

Что же перейдем к выводам.

И в целом книга мне понравилась, в ней логичное повествование и понятный язык, но всё же я считаю, что она не подойдет совсем новичкам, в силу своей математической сложности. Да, автор с обложки говорит, что вам не понадобятся серьезные математические знания. Но сравнивает он скорее не со школьной программой, а с дисциплинами, которые проходят в университетах, где он работал. А там совсем другая математика.

И поэтому книга будет отличным дополнением если вы студент технического ВУЗа и вам читают курс по Python.

При чем курс именно в рамках программирования, а не знакомства с языком. Тогда эта книга может быть полезной. К тому же задания, которые в ней приводятся вам точно понравятся. Там есть над чем поломать мозг. Также если вы учитесь в школе в каком-нибудь физ. мат классе, и обучение программированию и математика даются вам легко, то тоже можете взять эту книгу. Будет полезно.

Если же вы совсем новичок и не дружите с математикой или же хотите глубоко освоить именно Python во всем его великолепии, то лучше выбрать другие книги.

На этом у меня всё.
Пока и успехов в Учебе!

Представляю вашему вниманию книгу "Мыслить как программист. Учимся с Python", 2-е издание. Это книга для тех, кто хочет научиться программировать. Книга учит программированию, используя язык Python как средство обучения.

Это открытая книга, по аналогии с открытым кодом.

Написанная Джеффри Элкнером (Jeffrey Elkner), Алленом Б. Дауни (Allen B. Downey) и Крисом Мейерсом (Chris Meyers), книга несколько лет использовалась учениками старшей школы как учебное пособие для изучения программирования. За это время она вобрала в себя замечания и дополнения сотен ее читателей. В 2010 - 2012 годах я перевел книгу на русский язык и незначительно переработал ее.


Предисловие к русскому изданию

Эту книгу я встретил очень кстати. У меня давно зрело желание познакомиться с языком Python, и вот весной 2010 года вместе с моим 10-летним сыном Иваном мы решили его осуществить.

Мы читали вслух 2-ое издание книги "Мыслить как программист. Учимся с Python" на английском языке. В результате, Ваня познакомился с основами программирования и научился писать простые программы на Python. Энтузиазм, с которым он осваивал программирование, заглядывал вперед, делился сделанными открытиями стал для меня неожиданной и очень приятной наградой. Книга ориентирована на учеников старших классов школы, поэтому время от времени Ивану требовались дополнительные разъяснения. Но это сделало совместное изучение книги только интереснее.

В книге нет обсуждения низкоуровневых деталей программирования, таких, как двоичный код или байтовая организация данных. Однако есть обсуждение типов данных, встроенных в Python, а также абстрактных структур данных: списков, словаря, стека, очередей, деревьев. Читатель, кроме конструкций языка Python, знакомится с понятиями алгоритма, рекурсии, чистых функций и функций с побочными эффектами, осваивает основы процедурного и объектно-ориентированного программирования. То есть, книга учит читателя как раз тому, что обещает ее название: мыслить (и работать) как программист.

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

Авторы исходили из того, что читатель работает с Python в ОС семейства Linux, и в ряде мест в оригинале даже присутствует привязка к конкретным версиям ОС Ubuntu. Я отступил от этой практики. Ведь изучать программирование с помощью Python можно с равным успехом и в ОС Windows.

Англоязычные строки и комментарии в примерах программ оставлены без изменения. Дело в том, что использование русского языка в программах требует дополнительных знаний и усилий. А начинающим программистам дополнительные сложности ни к чему. Однако, в Приложении A подробно изложено, как подружить Python и русский язык, если вы работаете в ОС Windows. Руководствуясь приведенными инструкциями, все желающие смогут русифицировать примеры из книги.

Я убрал из книги упоминание библиотеки GASP, примеры ее использования, а также главу, посвященную работе с этой библиотекой. Джеффри Элкнер, один из авторов книги, разработал эту библиотеку, чтобы оживить графикой процесс изучения языка Python в школе. Не сомневаюсь, что библиотека GASP выполняет свою функцию в курсе программирования Джеффри Элкнера. Однако считаю, что ее изучение и работа с ней необязательны для изучающих Python.

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

Андрей Трофимов,
инженер-программист,
Владивосток, Россия

Основы Python


Пишем о выходе похожих книг. Раз в неделю. Дарим книгу Говори на языке диаграмм

О книге

Практическое руководство по основам Python — самого популярного на данный момент и простого для изучения языка программирования.

Автор последовательно раскрывает все важные темы от самых простых к сложным, приводит множество примеров и заданий. При этом он пользуется понятным языком, и вам не потребуются специальные навыки или серьезные математические знания. Книга подходит новичкам и тем, кто уже что-то умеет, но хотел бы структурировать свои знания или иметь под рукой справочник.

Кроме того, эта книга меняет мышление. Когда вы научитесь понимать базовые принципы программирования, то сможете по-другому смотреть на многие задачи, даже не касающиеся компьютерной области.

Для кого книга

Для тех, кто интересуется программированием на любых языках

Для начинающих программистов, изучающих Python

Для тех, кто хочет научиться программировать с нуля

Об авторе

Аллен Б. Дауни – автор книги «Основы Python»

Аллен Дауни — профессор компьютерных наук, преподаватель, автор книг по программированию. Имеет степень Университета Беркли и МИТ.

Цитаты из книги

Решение задач

Единственный самый важный навык для разработчика — умение находить решение задачи. Для этого он должен сформулировать задачу, подойти творчески к поиску решения, а затем точно и ясно его реализовать. Как видите, обучение программированию — это прекрасная возможность попрактиковаться в решении задач.

Инструкции

Каждая программа, которую вы когда-либо использовали, независимо от ее сложности, состоит из инструкций. Таким образом, вы можете представить программирование как процесс разбиения большой и сложной задачи на всё более мелкие подзадачи, пока подзадачи не станут достаточно простыми, чтобы их можно было сформулировать с помощью одной из этих инструкций.

В браузере

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

Привет, мир!

Традиционно первая программа, которую пишут на любом новом языке программирования называется Hello, World! Все, что она делает, это отображает слова Hello, World! (то есть «Привет, мир!»). На языке Python программа выглядит так: >>> print(’Привет, мир!’) Это пример инструкции печати, хотя на самом деле она ничего не печатает на бумаге.

Мыслить как настоящий программист

Этот способ сочетает в себе особенности мышления математика, инженера и ученого. Как математики компьютерные специалисты используют формальные языки для выражения идей. Как инженеры они что-то проектируют, оценивают компромиссы между альтернативами. Как ученые они наблюдают за поведением сложных систем, формируют гипотезы и тестируют прогнозы.

Формальные языки

На естественных языках говорят люди. Формальные языки разрабатываются людьми для определенных целей. Например, математические символы представляют собой формальный язык, который особенно хорош для обозначения отношений между числами и символами. Языки программирования — это формальные языки, предназначенные для выражения вычислений.

Читайте также: