- •§0.1. Базовые знания
- •§0.2. Где достать интерпретатор языка Питон?
- •§0.3. Установка интерпретатора языка Питон в unix
- •§0.3.1. Установка/обновление Питона из грт-пакета
- •§0.3.2. Установка Питона из исходного кода
- •§0.4. Установка Питона в ос Windows
- •§0.5. Запуск программ, написанных на Питоне
- •§0.6. Среда разработки
- •§1.1. Алгоритмы и программы
- •§1.2. Языки программирования и уровни абстракции
- •Глава 1. Базовые понятия
- •§1.3. Формальные и естественные языки
- •§1.4. Интерпретаторы и компиляторы
- •§1.5. Первая программа
- •§1.6. Что такое отладка?
- •§1.6.1. Синтаксические ошибки (syntax errors)
- •§1.6.2. Ошибки выполнения (runtime errors)
- •§1.6.3. Семантические ошибки (semantic errors)
- •§1.6.4. Процесс отладки
- •Глава 2. Переменные, операции и выражения
- •§2.1. Значения и типы
- •§2.2. Преобразование типов
- •§2.3. Переменные
- •§2.4. Имена переменных и ключевые слова
- •§2.5. Выражения
- •§2.6. Выполнение выражений
- •§2.7. Операторы и операнды
- •§2.8. Порядок операций
- •§2.9. Простейшие операции над строками
- •§2.10. Композиция
- •Глава 3. Функции §3.1. Подпрограммы
- •§3.2. Вызовы функций
- •§3.3. Справочная система
- •§3.4. Импорт модулей и математические функции
- •§3.5. Композиция
- •§3.6. Создание функций
- •§3.7. Параметры и аргументы
- •§3.8. Локальные переменные
- •§3.9. Поток выполнения
- •§3.10. Стековые диаграммы
- •§3.11. Функции, возвращающие результат
- •Глава 4. Компьютерная графика
- •Глава 5. Логические выражения, условия и рекурсия §5.1. Комментарии в программах
- •§5.2. Простые логические выражения и логический тип данных
- •§5.3. Логические операторы
- •§5.4. Выполнение по условию и «пустота»
- •§5.5. Ввод данных с клавиатуры
- •§5.6. Альтернативные ветки программы (Chained conditionals)
- •§5.7. Пустые блоки
- •§5.8. Вложенные условные операторы (Nested conditionals)
- •§5.9. Рекурсия
- •§5.10. Стековые диаграммы рекурсивных вызовов
- •§5.11. Максимальная глубина рекурсии
- •§5.12. Числа Фибоначчи
- •Глава 6. Циклы
- •§6.1. Оператор цикла while
- •§6.2. Счетчики
- •§6.3. Бесконечные циклы
- •§6.4. Альтернативная ветка цикла while
- •§6.5. Табулирование функций
- •§6.6. Специальные и экранируемые символы
- •§6.7. Числа Фибоначчи и оператор цикла while
- •§6.8. Вложенные операторы цикла и двумерные таблицы
- •§6.9. Классификация операторов цикла
- •§6.10. Управляющие структуры
- •Глава 7. Строки
- •§7.1. Оператор индексирования
- •§7.2. Длина строки и отрицательные индексы
- •§7.3. Перебор и цикл for
- •§7.4. Срезы строк
- •§7.5. Сравнение строк
- •§7.6. Строки нельзя изменить
- •§7.7. Функция find
- •§7.8. Циклы и счётчики
- •§7.9. Модуль string
- •§7.10. Классификация символов
- •§10.2. Операции над словарями
- •§10.3. Методы словарей
- •§10.4. Использование псевдонимов и копирование
- •§10.5. Разряженные матрицы
- •§10.6. Подсказки
- •§10.7. Тип «длинное целое число»
- •§10.8. Подсчет букв
§6.5. Табулирование функций
С помощью оператора цикла while удобно строить таблицы значений различных функций. Большинство учебников по высшей математике имеют приложения с такими таблицами значений. До того, как появились компьютеры, математикам приходилось составлять таблицы значений тригонометрических, логарифмических и других функций вручную - это очень трудоемкий и утомительный процесс, что, в свою очередь, увеличивает вероятность возникновения ошибки в расчетах12.
12 Конечно, таблицам, имеющимся в учебниках, доверять можно, т.к. они перепроверялись множество раз.
67
Ревизия: 170
Циклы
По сути такие таблицы представляют собой список значений функции при различных значениях ее параметра. Поэтому, когда науке стали доступны вычислительные машины, первой реакцией было желание автоматизировать табулирование функций (т.е. процесс построения таблиц значений функции). Логично для этих целей использовать циклы.
Рассмотрим такую программу:
import math |
|
|
х = 1.0 |
|
|
while x < 10 |
0: |
|
print x, |
"\t", |
math.log(x) |
x += 1.0 |
|
|
Результат ее работы будет выглядеть так:
1.0 |
0.0 |
||
2 |
0 |
0.69314718056 |
|
3 |
0 |
1.09861228867 |
|
4 |
0 |
1.38629436112 |
|
5 |
0 |
1.60943791243 |
|
6 |
0 |
1.79175946923 |
|
7 |
0 |
1.94591014906 |
|
8 |
0 |
2.07944154168 |
|
9 |
0 |
2.19722457734 |
|
Строка "\t" обозначает знак табуляции. Благодаря нему значения выстраиваются в два столбца.
Разберем, как эта программа работает. Параметр х изменяется от 1. 0 с шагом 1.0, пока он меньше 10.0. В теле цикла выводится текущее значение параметра х, затем знак табуляции и результат вычисления функции math, log (x), т.е. натуральный логарифм от х (
logex = ln(x) ). При необходимости вычисления логарифма по основанию 2 мы можем
воспользоваться формулой:
, 1пх
l0g2X=lnT
Наша программа будет выглядеть так:
import math |
|
х = 1.0 |
|
while x < 10.0: |
|
print x, "\t", |
math.log(x)/math.log(2) |
x += 1.0 |
|
Результат будет таким:
1.0 0.0
2.0 1.0
68
Ревизия: 170
Циклы
3.0 |
1.58496250072 |
4.0 |
2.0 |
5.0 |
2.32192809489 |
6.0 |
2.58496250072 |
7.0 |
2.80735492206 |
8.0 |
3.0 |
9.0 |
3.16992500144 |
Как видите, 7, 2, 4 и 8 являются степенями 2. Модифицируем нашу программу, чтобы найти другие степени 2:
import math |
|
х = 1.0 |
|
while x < 100.0: |
|
print x, "\t", |
math.log(x)/math.log(2) |
x *= 2.0 |
|
Таким образом, мы получили:
1.0 0.0
2.0
4.0
8.0
16.0
32.0
64.0
Благодаря символу табуляции позиция второй колонки не зависит от ширины первой -это хорошо видно на последних трех значениях.
Современные математики редко используют таблицы значений, но современным компьютерным специалистам (и программистам, в частности) полезно знать степени двойки, т.к. компьютер работает в двоичной арифметике, и это является причиной некоторых особенностей хранения и обработки данных.
Упражнение. Измените программу так, чтобы программа вывела все степени 2 до 10-й включительно. Постарайтесь запомнить результаты. Почему в килобайте не 1000 байт, а 1024?
