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 |
|
|
Язык программирования - это формальный язык, разработанный для описания вычислений. czech 25.06.10 в 04:37 |
||
|
Фомальный язык имеет строгую систему синтаксических правил. Например, 3+3=6 - это синтаксически верное математическое выражение, а 3=+6$ - нет. H2O - синтаксически верное химическое название, а 2Zz - нет. czech 25.06.10 в 04:40 |
||
|
Синтаксические правила определяют два понятия: знаки и структуру. Знаки - это простейшие элементы языка, такие как слова, числа, химические элементы. Одной из проблем выражения 3=+6$ является знак $, который не имеет смысла в математике (по крайней мере, пока). Также, 2Zz - не имеет смысла, потому что нет такого химического элемента Zz. czech 25.06.10 в 04:45 |
||
|
Вторым понятием, определяемым синтаксическими правилами, является структура, описывающая взаимоотношения знаков. Выражение 3=+6$ не имеет смысла, потому что нельзя помещать знак сложения сразу после знака равно. Так же и в химических формулах, числовой знак имеет смысл лишь расположенный после имени химического элемента, а не перед ним. czech 25.06.10 в 04:49 Вторым понятием, определяемым синтаксическими правилами, является структура, описывающая взаимоотношения знаков. Выражение 3=+6$ не имеет смысла, потому что нельзя помещать знак сложения сразу после знака равно. Так же и в химических формулах, числовой знак имеет смысл лишь расположенный после имени химического элемента, а не перед ним. czech 25.06.10 в 04:49 |
||
|
Когда вы читаете предложение на английском или выражение на формальном языке, вы должны определить структуру предложения (хотя в естественном языке это не столь важно). Этот процесс называется парсингом (разбором). czech 25.06.10 в 04:52 |
||
|
Например, когда вы слышите предложение: "Другой ботинок упал", вы понимаете что "другой ботинок" - это подлежащее, а "упал" - сказуемое. Разобрав предложение, вы можете понять его смысл или семантику предложения. Если предположить, что вы знаете, что такое ботинок, и что значит упал, вы можете понять основной смысл. czech 25.06.10 в 04:55 |
||
|
Хотя формальные и естественные яхыки имеют схожие черты - знаки, структуру, синтаксис и семантику - они сильно различаются: czech 25.06.10 в 04:57 |
+1 | |
|
Двусмысленность - естественные языки полны двусмысленности, когда подразумевается что-то другое, используются метафоры. Формальные языки создавались строго недвусмысленными, т.е. написанное всегда подразумевает то, что означает, без всякого скрытого смысла. czech 25.06.10 в 05:04 |
||
|
Людям, говорящим на естественном языке - всем людям - требуется определенное время, чтобы настроиться на понимание формального языка. Иногда, разница между формальным и естественным языком сравнима с разницей между поэзией и прозой, но в большей степени: czech 25.06.10 в 05:13 |
||
|
Поэзия - в словах больше важен звук, произношение, чем смысл, и вся поэма в своей цельности призвана вызвать какие-то эмоции или отклик. Здесь встречаются не только распространенные неопределенности, но и совершенно новые. czech 25.06.10 в 05:22 |
||
|
Приведем несколько подсказок по прочтению программ (и других формальных языков). Во-первых, помните, что формальный язык намного насыщеннее языка естественного, потому для его прочтения необходимо приложить больше усилий. Ещё очень важна структура, поэтому не всегда полезно читать сверху вниз и справа налево. Вместо этого необходимо разобрать программу в уме, определить все знаки и понять стурктуру. И, наконец, детали имеют значение. Мелкие ошибки, типа опечаток или неверной пунктуации, на которые вы можете не обратить внимания в естесвенном языке, могут привести совершенно к другому результату в языке формальном. czech 25.06.10 в 06:40 |
||
|
1.9 Первая программа czech 25.06.10 в 06:41 |
||
|
Традиционно, в первой программе на новом языке мы здороваемся с Миром. Называется она Hello, World! (Привет, Мир!), потому что выводит "Hello, World!" на экран. На Python это выглядит так: czech 25.06.10 в 06:43 Традиционно, в первой программе на новом языке мы здороваемся с Миром. Называется она Hello, World! (Привет, Мир!), потому что выводит "Hello, World!" на экран. На Python это выглядит так: czech 25.06.10 в 06:43 |
||
|
print "Hello, World!" czech 25.06.10 в 06:43 |
||
|
Это пример кода выводит текст на экран, а не на принтер, как могло показаться. В данном случае на экране появиться надпись: czech 25.06.10 в 06:45 |
||
|
Hello, World! czech 25.06.10 в 06:45 |
||
|
Кавычки в программе указывают начало и конец значения и на экран не выводятся. czech 25.06.10 в 06:45 |
||
|
Многие ценители судят по языку программирования на основе этого примера, сколько усилий нужно затратить, чтобы вывести подобную надпись на экран. Python справляется с этой задачей элементарно. czech 25.06.10 в 06:48 |
||
|
1.10 Словарь czech 25.06.10 в 06:48 |
||
|
Алгоритм - процесс решения определенного типа проблем. czech 25.06.10 в 07:41 |
||
|
1.11 Задания czech 25.06.10 в 07:41 |
||
|
Напишите на родном языке предложение с понятным смыслом, но неверным синтаксисом. Напишите синтаксически верное предложение, но с семантическими ошибками. czech 25.06.10 в 07:43 |
||
|
Запустите оболочку python. Наберите 1 + 2 и нажмитее клавишу Enter. Python вычислит это выражение, напечатает результат и вновь выведет строку приглашения. * - оператор умножения, ** - оператор возведения в степень. Поэкспериментируйте с этими операциями, посмотрите, что пишет оболочка в ответ. Что озачает оператор / ? Всегда ли результаты совпадают с ожидаемым? Объясните. czech 25.06.10 в 07:48 |
||
|
Наберите 1 2 и нажмите Enter. Python попробует вычислить выражение, но не сможет, потому что это синтаксически неверно. Вместо ответа появиться следующее сообщение об ошибке: czech 25.06.10 в 07:50 |
||
|
File ___, line 1 1 2 ^ SyntaxError: invalid syntax czech 25.06.10 в 07:50 |
||
|
В большинстве случаев python указывает, где именно он обнаружил синтаксическую ошибку, но это не всегда верно, и не дает дополнительной информации что же все таки не так. czech 25.06.10 в 07:54 |
||
|
Так что, по большей части, надежда только на то, что вы хорошо знаете правила синтаксиса. czech 25.06.10 в 07:55 |
||
|
В этот раз python пожаловался на то, что между числами 1 и 2 отсуттствует какой-нибудь оператор. czech 25.06.10 в 07:56 |
||
|
Ниже приведено ещё три примера, вызвающие вывод ошибки. Объясните, что не понравилось python в каждом случае. czech 25.06.10 в 08:05 |
||
|
Наберите print 'hello'. Python вычислиn это выражение и выведет буквы h-e-l-l-o. Кавычки на экран не выводятся, потому как являются указателями начала и конца значения. Теперь напишите просто "hello" и попробуйте объяснить появившийся результат. czech 25.06.10 в 08:11 |
||
|
Наберите print cheese без кавычек. Вывод будет примерно таким: czech 25.06.10 в 08:12 |
||
|
Traceback (most recent call last): czech 25.06.10 в 08:12 |
||
|
Это ошибка выполнения; в частности, ошибка именования (NameError), а конкретнее, ошибка возникла потоу что имя chesse не определено. Если вы не знается что это значит, скоро все поймете. czech 25.06.10 в 08:16 |
||
|
Наберите 'This is a test...' в оболочке Python и нажмите Enter. Посмотрите, что получится. czech 25.06.10 в 08:17 |
||
|
Теперь, создайте скрипт и назовите его test1.py. Содержание будет следующим (убедитесь, что сохранили изменения, прежде чем запускать скрипт): czech 25.06.10 в 08:18 |
||
|
'This is a test...' czech 25.06.10 в 08:19 |
||
|
Что произойдет, когда вы запустите скрипт? Теперь внесите следующее изменение: czech 25.06.10 в 08:19 |
||
|
print 'This is a test...' czech 25.06.10 в 08:19 |
||
|
и попробуйте снова запустить. czech 25.06.10 в 08:19 |
||
|
Что произошло на этот раз? czech 25.06.10 в 08:20 |
||
|
Всякий раз, когда в оболочке python появлется новое выражение, оно вычисляется и результат выводиться на следующей строке. Результатом вычисления выражения 'This is a test...' будет выражение 'This is a test...' (подобно тому, как результатом вычисления выражения 42 будет 42). В скрипте, однако, результат вычисления таких выражений никуда не выводится, поэтому после запуска скрипта на экране ничего не появляется. czech 25.06.10 в 08:24 |
