Python. Занятие 2: алгоритмы и алгоритмические структуры

5 (100%) 12 vote[s]

В этом занятии нужно разобраться в блок-схемах, интерпретаторах и компиляторах, арифметике в Python, попрактиковаться в работе с командной строкой.

Интерпретаторы и компиляторы

Машинный код

Для непосредственного выполнения компьютером программа должна быть представлена в форме машинного кода . Такая запись содержит только номера команд процессора, необходимые данные и адреса ячеек памяти. И выглядит примерно следующим образом (для удобства двоичные данные чаще всего записываются в шестнадцатеричной форме, где 2 символа соответствуют 1 байту данных — именно поэтому шестнадцатеричная система счисления является такой популярной в программировании):

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Ассемблеры

Для написания таких программ применяются язык ассемблера, которые позволяют записывать команды вместо числовой формы в текстовой (MOV, ADD, IN, OUT) и содержат некоторые простые средства для облегчения написания программы. Но даже в таком «украшенном» виде программа остается чрезвычайно близкой к машинному коду и поэтому язык ассемблера относят к низкоуровневым языкам программирования (то есть таких, которые близки к уровню машинного кода).

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

Ассемблер же — это программа, которая преобразует код, написанный на языке ассемблера, окончательно в машинный код. Но часто и сам язык называют сокращенно «ассемблером».

Трансляторы

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

С другой стороны, для выполнения компьютером такая программа должна быть превращена в машинный код или хотя бы переписана на низкоуровневый язык (а дальше уже ассемблер обеспечит ее понимание машиной). Причем команды высокоуровневого языка программирования могут быть достаточно сложными и соответствовать нескольким или даже нескольким десяткам машинных команд. Этот процесс преобразования называется трансляцией, а программы, которые его выполняют — трансляторами.

В этом контексте трансляторы по принципу работы делятся на 2 типа: компиляторы и интерпретаторы .

Компиляторы

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

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

Интерпретаторы

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

В такой схеме выполнение программы будет занимать немного больше времени — так как при этом каждый раз происходит анализ кода и его преобразования.

Поэтому для повышения быстродействия большинство современных интерпретаторов на самом деле работают по смешанной схеме, сначала транслируя исходный код программы в некоторую промежуточную форму — так называемый байт-код. Он является кодом низшего уровня и ближе к ассемблеру, но машинно-независимый — потому выполняется не напрямую компьютером, а некоторой виртуальной машиной, которая входит в состав интерпретатора. Это позволяет, при отсутствии изменений в оригинальной программе, не перечитывать ее полностью, а использовать байт-код как «полуфабрикат» для работы. Выполнение байт-кода все равно медленнее машинного кода, но такой подход является компромиссом, который пытается совместить преимущества интерпретации и компиляции.

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

Проверка знаний

Python 2 Babulya 2019 год Повторить тест
Введение в информатику: программирование на Python
Python 2   |   Дата: 03.07.2019   |   Вопросов: 7   |   Автор: Babulya
Вопрос № 1
Вопрос № 2
Вопрос № 3
Вопрос № 4
Вопрос № 5
Вопрос № 6
Вопрос № 7

Практические задания

Задание 1

Входные данные : 3 действительных числа — аргументы командной строки.

Выходные данные : результат вычисления формулы:

Аргументы передаются в порядке, указанном в формуле, названия переменных могут использоваться любые.

Пример

Входные данные: 1 января 0.25 
Пример вызова: python lab2_1.py 1 января 0.25 
Результат: 1.59576912161

Подсмотреть правильное решение можно здесь:

Ответ

Задание 2

Входные данные : 3 числа x, y и z. x, y — неотъемлемые целые числа, z равен 0 или 1. x не равно 0 Передаются в качестве аргументов командной строки.

Выходные данные : строка «Everybody sing a song <текст песенки>.», Где <текст песенки> формируется в куплетов, разделенных пробелами. Все куплеты одинаковы и состоят из x ‘la’ через дефис. Если z равен единице, в конце ставится восклицательный знак, иначе точка. При отсутствии куплетов пробел перед точкой / восклицательным знаком не ставится.

Подсказка: для этого можно применить умножение строк.

Пример
Входные данные: 2 3 1 
Пример вызова: python lab2_2.py 2 3 1 
Результат: Everybody sing a song: la-la la-la la-la! 
Входные данные: 1 0 0 
Пример вызова: python lab2_2.py 1 0 0 
Результат: Everybody sing a song :

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

Ответ

Читайте больше по теме:

Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments
Просмотры: 727

Популярные записи