How to Think Like a Computer Scientist: Learning with Python 2nd Edition. / Как стать программистом: учимся вместе с Python. Второе издание.: Chapter 1 The way of the program

← →
Английский оригинал Перевод на русский

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

Формальные языки - это языки, придуманные людьми для специальных целей. Например, математическая нотация использует формальный язык, что упрощает описание отношений между числами и символами. Химия тоже использует формальный язык для описания фимической структуры молекул. И самое важное:

czech 25.06.10 в 04:37

0

Язык программирования - это формальный язык, разработанный для описания вычислений.

czech 25.06.10 в 04:37

0

Фомальный язык имеет строгую систему синтаксических правил. Например, 3+3=6 - это синтаксически верное математическое выражение, а 3=+6$ - нет. H2O - синтаксически верное химическое название, а 2Zz - нет.

czech 25.06.10 в 04:40

0

Синтаксические правила определяют два понятия: знаки и структуру. Знаки - это простейшие элементы языка, такие как слова, числа, химические элементы. Одной из проблем выражения 3=+6$ является знак $, который не имеет смысла в математике (по крайней мере, пока). Также, 2Zz - не имеет смысла, потому что нет такого химического элемента Zz.

czech 25.06.10 в 04:45

0

Вторым понятием, определяемым синтаксическими правилами, является структура, описывающая взаимоотношения знаков. Выражение 3=+6$ не имеет смысла, потому что нельзя помещать знак сложения сразу после знака равно. Так же и в химических формулах, числовой знак имеет смысл лишь расположенный после имени химического элемента, а не перед ним.

czech 25.06.10 в 04:49

0

Вторым понятием, определяемым синтаксическими правилами, является структура, описывающая взаимоотношения знаков. Выражение 3=+6$ не имеет смысла, потому что нельзя помещать знак сложения сразу после знака равно. Так же и в химических формулах, числовой знак имеет смысл лишь расположенный после имени химического элемента, а не перед ним.

czech 25.06.10 в 04:49

0

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

czech 25.06.10 в 04:52

0

Например, когда вы слышите предложение: "Другой ботинок упал", вы понимаете что "другой ботинок" - это подлежащее, а "упал" - сказуемое. Разобрав предложение, вы можете понять его смысл или семантику предложения. Если предположить, что вы знаете, что такое ботинок, и что значит упал, вы можете понять основной смысл.

czech 25.06.10 в 04:55

0

Хотя формальные и естественные яхыки имеют схожие черты - знаки, структуру, синтаксис и семантику - они сильно различаются:

czech 25.06.10 в 04:57

0
+1

Двусмысленность - естественные языки полны двусмысленности, когда подразумевается что-то другое, используются метафоры. Формальные языки создавались строго недвусмысленными, т.е. написанное всегда подразумевает то, что означает, без всякого скрытого смысла.
Избыточность - изобилуя всевозможными двусмысленностями и неопределенностями, естественные языки должны быть избыточными и, как результат, многословными. Формальные языки менее избыточны и более сжаты.
Литературность - естественные языки полны идиом и метафор. Если кто-то скажет: "Другой ботинок упал", возможно нет никакого ботинка и, тем более, какого-то падения. На формальном языке сказанное будет означать именно то, что подразумевалось.

czech 25.06.10 в 05:04

0

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

czech 25.06.10 в 05:13

0

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

czech 25.06.10 в 05:22

0

Приведем несколько подсказок по прочтению программ (и других формальных языков). Во-первых, помните, что формальный язык намного насыщеннее языка естественного, потому для его прочтения необходимо приложить больше усилий. Ещё очень важна структура, поэтому не всегда полезно читать сверху вниз и справа налево. Вместо этого необходимо разобрать программу в уме, определить все знаки и понять стурктуру. И, наконец, детали имеют значение. Мелкие ошибки, типа опечаток или неверной пунктуации, на которые вы можете не обратить внимания в естесвенном языке, могут привести совершенно к другому результату в языке формальном.

czech 25.06.10 в 06:40

0

1.9 Первая программа

czech 25.06.10 в 06:41

0

Традиционно, в первой программе на новом языке мы здороваемся с Миром. Называется она Hello, World! (Привет, Мир!), потому что выводит "Hello, World!" на экран. На Python это выглядит так:

czech 25.06.10 в 06:43

0

Традиционно, в первой программе на новом языке мы здороваемся с Миром. Называется она Hello, World! (Привет, Мир!), потому что выводит "Hello, World!" на экран. На Python это выглядит так:

czech 25.06.10 в 06:43

0

print "Hello, World!"

czech 25.06.10 в 06:43

0

Это пример кода выводит текст на экран, а не на принтер, как могло показаться. В данном случае на экране появиться надпись:

czech 25.06.10 в 06:45

0

Hello, World!

czech 25.06.10 в 06:45

0

Кавычки в программе указывают начало и конец значения и на экран не выводятся.

czech 25.06.10 в 06:45

0

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

czech 25.06.10 в 06:48

0

1.10 Словарь

czech 25.06.10 в 06:48

0

Алгоритм - процесс решения определенного типа проблем.
Ошибка (баг) - ошибка в программе.
Байт-код - промежуточное состояние программы между исходным и объектным кодом. Многие современные языки программирования компилируют исходный код в байт-код, а потом интерпретируют последний с помощью виртуальной машины.
Компиляция - трансляция программы, написанной на высокоуровневом языке, в низкоуровневый язук, для дальнейшего запуска.
Отладка (дебаггинг) - поиск и удаление любых типов ошибок в программе.
Исключение - ошибка выполнения.
Исполнимый код - объектный код, готовый в исполнению.
Формальный язык - искусственно созданный язык для описания узкого круга задач, например, математические формулы или компьютерные программы. Все языки программирования - формальные языки.
Высокоуровневый язык - язык, наподобие Python, созданный для удобного использования человеком.
Интерпретирование - построчное исполнение программы, написанной на высокоуровневом языке.
Низкоуровневый язык (ассемблер) - язык, понятный компьютеру.
Естественный язык - язык, на котором разговаривают люди.
Объектный код - код, получаемый в результате компиляции.
Разбор (парсинг) - синтаксический анализ программы.
Переносимость (портабильность) - свойство программы запускаться более чем на одном типе компьютеров.
Выражение print - инструкция интерпретатору python вывести значение на экран.
Решение проблемы - процесс формулирования проблемы, поиска решений, и определения решения.
Программа - список инструкций, указывающих компьютеру какие действия и вычисления неоходимо произвести.
Оболочка Python - интерактивный пользовательский интерфейс для работы с интерпретатором python. Пользователь в оболочке Python пишет команды после приглашения (>>>), нажимает на клавишу Enter, и интерпретатор немедленно приступает к исполнению введенной команды.
Ошибка выполнения - ошибка, ничем не выдающая себя до самого момента запуска программы. Происходит при появлении незапланированных ситуаций.
Скрипт - программа, сохраненная в файле.
Семантическая ошибка - ошибка, заставляющая программу делать не совсем то, что от нее хотел программист.
Семантика - смысл программы.
Исходный код - текст программы на высокоуровневом языке.
Синтаксис - структура программы.
Синтаксическая ошибка - ошибка в программе, приводящая к невозможности дальнейшего разбора и, следовательно, интерпретирования.
Знак - один из основных элементов синтаксической структуры программы, аналогично слову в естественном языке.

czech 25.06.10 в 07:41

0

1.11 Задания

czech 25.06.10 в 07:41

0

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

czech 25.06.10 в 07:43

0

Запустите оболочку python. Наберите 1 + 2 и нажмитее клавишу Enter. Python вычислит это выражение, напечатает результат и вновь выведет строку приглашения. * - оператор умножения, ** - оператор возведения в степень. Поэкспериментируйте с этими операциями, посмотрите, что пишет оболочка в ответ. Что озачает оператор / ? Всегда ли результаты совпадают с ожидаемым? Объясните.

czech 25.06.10 в 07:48

0

Наберите 1 2 и нажмите Enter. Python попробует вычислить выражение, но не сможет, потому что это синтаксически неверно. Вместо ответа появиться следующее сообщение об ошибке:

czech 25.06.10 в 07:50

0

File ___, line 1 1 2 ^ SyntaxError: invalid syntax

czech 25.06.10 в 07:50

0

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

czech 25.06.10 в 07:54

0

Так что, по большей части, надежда только на то, что вы хорошо знаете правила синтаксиса.

czech 25.06.10 в 07:55

0

В этот раз python пожаловался на то, что между числами 1 и 2 отсуттствует какой-нибудь оператор.

czech 25.06.10 в 07:56

0

Ниже приведено ещё три примера, вызвающие вывод ошибки. Объясните, что не понравилось python в каждом случае.

czech 25.06.10 в 08:05

0

Наберите print 'hello'. Python вычислиn это выражение и выведет буквы h-e-l-l-o. Кавычки на экран не выводятся, потому как являются указателями начала и конца значения. Теперь напишите просто "hello" и попробуйте объяснить появившийся результат.

czech 25.06.10 в 08:11

0

Наберите print cheese без кавычек. Вывод будет примерно таким:

czech 25.06.10 в 08:12

0

Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'cheese' is not defined

czech 25.06.10 в 08:12

0

Это ошибка выполнения; в частности, ошибка именования (NameError), а конкретнее, ошибка возникла потоу что имя chesse не определено. Если вы не знается что это значит, скоро все поймете.

czech 25.06.10 в 08:16

0

Наберите 'This is a test...' в оболочке Python и нажмите Enter. Посмотрите, что получится.

czech 25.06.10 в 08:17

0

Теперь, создайте скрипт и назовите его test1.py. Содержание будет следующим (убедитесь, что сохранили изменения, прежде чем запускать скрипт):

czech 25.06.10 в 08:18

0

'This is a test...'

czech 25.06.10 в 08:19

0

Что произойдет, когда вы запустите скрипт? Теперь внесите следующее изменение:

czech 25.06.10 в 08:19

0

print 'This is a test...'

czech 25.06.10 в 08:19

0

и попробуйте снова запустить.

czech 25.06.10 в 08:19

0

Что произошло на этот раз?

czech 25.06.10 в 08:20

0

Всякий раз, когда в оболочке python появлется новое выражение, оно вычисляется и результат выводиться на следующей строке. Результатом вычисления выражения 'This is a test...' будет выражение 'This is a test...' (подобно тому, как результатом вычисления выражения 42 будет 42). В скрипте, однако, результат вычисления таких выражений никуда не выводится, поэтому после запуска скрипта на экране ничего не появляется.

czech 25.06.10 в 08:24

0
Минутку...

← Предыдущая страница