Скачать презентацию Программирование на Python е Введение в информатику Глава 3 Скачать презентацию Программирование на Python е Введение в информатику Глава 3

Глава 3 Работа с числами.ppt

  • Количество слайдов: 42

Программирование на Python’е: Введение в информатику Глава 3 Работа с числами Python Programming, 2/e Программирование на Python’е: Введение в информатику Глава 3 Работа с числами Python Programming, 2/e 1

Задачи n n n Понять концепцию типов данных. Познакомиться с основными числовыми типами данных Задачи n n n Понять концепцию типов данных. Познакомиться с основными числовыми типами данных в Python’е. Понять фундаментальные принципы того, как числа представляются в компьютере. Python Programming, 2/e 2

Задачи (продолжение) n n n Научиться использовать математическую библиотеку Python’а. Понять накопительный шаблон программ. Задачи (продолжение) n n n Научиться использовать математическую библиотеку Python’а. Понять накопительный шаблон программ. Научиться читать и писать программы, которые обрабатывают числовые данные. Python Programming, 2/e 3

Числовой тип данных n n Информацию, которая вводится и преобразовывается компьютерными программами, более точно Числовой тип данных n n Информацию, которая вводится и преобразовывается компьютерными программами, более точно называть данными. Существует два различных типа чисел. n n (5, 4, 3, 6) примеры целых чисел – у них нет дробной части (. 25, . 10, . 05, . 01) – примеры десятичных дробей Python Programming, 2/e 4

Числовой тип данных n n n В компьютере целые числа и десятичные дроби представляются Числовой тип данных n n n В компьютере целые числа и десятичные дроби представляются совершенно по-разному. Мы говорим, что десятичные дроби и целые числа два разных типа данных. Тип данных определяет какие значения может принимать соответствующий объект и какие операции с ним можно делать. Python Programming, 2/e 5

Числовой тип данных n n Целые числа относятся к целому (integer) типу данных (сокращенно Числовой тип данных n n Целые числа относятся к целому (integer) типу данных (сокращенно int). Значениями типа int могут быть положительные и отрицательные целые числа. Python Programming, 2/e 6

Числовой тип данных n n Числа с дробной частью представляются как значения с плавающей Числовой тип данных n n Числа с дробной частью представляются как значения с плавающей точкой (floating point ) или значения типа float. Как определить какого типа у нас число? n n Численный литерал без десятичной точки задаёт значение типа int Литерал, в котором есть десятичная точка, представляется типом float (даже если дробная часть равна 0) Python Programming, 2/e 7

Числовой тип данных n У Python’а есть специальная функция type, которая выдаёт нам тип Числовой тип данных n У Python’а есть специальная функция type, которая выдаёт нам тип любого значения. >>> type(3) >>> type(3. 1) >>> type(3. 0) >>> my. Int = 32 >>> type(my. Int) >>> Python Programming, 2/e 8

Числовой тип данных n Для чего нам нужны два типа чисел? n n Число Числовой тип данных n Для чего нам нужны два типа чисел? n n Число целых объектов не может быть дробным (не может быть 3 ½ стороны света) Большинство математических алгоритмов очень эффективны с целыми числами. Плавающий тип (float) обычно даёт только приближения к заданным действительным числам. Так как тип float не точен, то используйте целые когда это возможно! Python Programming, 2/e 9

Числовой тип данных n Операции на целых (int) дают целые числа, операции на дробных Числовой тип данных n Операции на целых (int) дают целые числа, операции на дробных (float) дают дробные числа (деление / всегда даёт дробное число). >>> 3. 0+4. 0 7. 0 >>> 3+4 7 >>> 3. 0*4. 0 12. 0 >>> 3*4 12 >>> 10. 0/3. 0 3. 333333335 >>> 10/3 3. 333333335 >>> 10 // 3 3 >>> 10. 0 // 3. 0 Python Programming, 2/e 10

Числовой тип данных n n n Деление нацело даёт целые числа. Вот почему 10//3 Числовой тип данных n n n Деление нацело даёт целые числа. Вот почему 10//3 = 3. Думайте об этом в терминах “содержится“, например, 10//3 = 3, так как 3 содержится в 10 ровно 3 раза (с остатком 1) 10%3 = 1 остаток от деления нацело 10 на 3. a = (a/b)(b) + (a%b) Python Programming, 2/e 11

Использование математической библиотеки n n Кроме операций (+, -, *, /, //, **, %, Использование математической библиотеки n n Кроме операций (+, -, *, /, //, **, %, abs), у нас еще есть много математических функций в математических библиотеках. Библиотека это модуль с некоторыми полезными определениями и функциями. Python Programming, 2/e 12

Использование математической библиотеки Давайте напишем программу для вычисления корней квадратного уравнения. Единственная часть формулы, Использование математической библиотеки Давайте напишем программу для вычисления корней квадратного уравнения. Единственная часть формулы, выражение для которой на Python’е мы не знаем, это квадратный корень. Функция, вычисляющая квадратный корень положительного действительного числа есть в математической библиотеке math. Python Programming, 2/e 13

Использование математической библиотеки n Чтобы воспользоваться библиотекой, нужно написать строку в нашей программе: import Использование математической библиотеки n Чтобы воспользоваться библиотекой, нужно написать строку в нашей программе: import math n Импорт библиотеки делает любую функцию из библиотеки доступной в нашей программе. Python Programming, 2/e 14

Использование математической библиотеки n n n Для получения доступа к подпрограмме sqrt из библиотеки, Использование математической библиотеки n n n Для получения доступа к подпрограмме sqrt из библиотеки, нужно указать на неё math. sqrt(x). Использование точечной нотации говорит Python’у использовать функцию sqrt из библиотечного модуля math. Чтобы вычислить корень, можно написать disc. Root = math. sqrt(b*b – 4*a*c) Python Programming, 2/e 15

Использование математической библиотеки # quadratic. py # Программа вычисляет действительные корни квадратного уравнения. # Использование математической библиотеки # quadratic. py # Программа вычисляет действительные корни квадратного уравнения. # Демонстрирует применение библиотеки math. # Замечание: Программа перестаёт работать, если у уравнения нет действительных корней. import math # Делает доступной библиотеку math. def main(): print("Эта программа находит действительные корни квадратного уравнения") print() a, b, c = eval(input("Пожалуйста введите коэффициенты (a, b, c): ")) disc. Root = math. sqrt(b * b - 4 * a * c) root 1 = (-b + disc. Root) / (2 * a) root 2 = (-b - disc. Root) / (2 * a) print("Решениями являются: ", root 1, root 2 ) main() Python Programming, 2/e 16

Использование математической библиотеки Запускаем программу I раз: Эта программа находит действительные корни квадратного уравнения Использование математической библиотеки Запускаем программу I раз: Эта программа находит действительные корни квадратного уравнения Пожалуйста введите коэффициенты (a, b, c): 3, 4, -1 Решениями являются : 0. 215250437022 -1. 54858377035 Запускаем программу II раз: Эта программа находит действительные корни квадратного уравнения Пожалуйста введите коэффициенты (a, b, c): 1, 2, 3 Traceback (most recent call last): File "", line 1, in -toplevelmain() File "C: Documents and SettingsTerryMy DocumentsTeachingW 04CS 120Textbookcodechapter 3quadratic. py", line 14, in main disc. Root = math. sqrt(b * b - 4 * a * c) Value. Error: math domain error >>> Как вы думаете, что это значит? Python Programming, 2/e 17

Использование математической библиотеки n n Если a = 1, b = 2, c = Использование математической библиотеки n n Если a = 1, b = 2, c = 3, то мы пытаемся найти квадратный корень из отрицательного числа! Применение функции sqrt более эффективно, чем применение функции **. Как можно с помощью ** вычислить квадратный корень? Python Programming, 2/e 18

Накапливание результатов: факториал n n Предположим, что вы ждёте в очереди с пятью другими Накапливание результатов: факториал n n Предположим, что вы ждёте в очереди с пятью другими людьми. Сколько способов расположить в очереди шесть человек? 720 -- 720 это факториал числа 6 (сокращенно 6!) Факториал числа n определяется формулой: n! = n(n-1)(n-2)…(1) Поэтому, 6! = 6*5*4*3*2*1 = 720 Python Programming, 2/e 19

Накапливание результатов: факториал n n Как написать программу, которая проделывает такие вычисления? Начинаем с Накапливание результатов: факториал n n Как написать программу, которая проделывает такие вычисления? Начинаем с модели: n n n Ввести число, факториал которого вычисляем, пусть число равно n Вычислить факториал от n, в переменной fact Вывести переменную fact Python Programming, 2/e 20

Накапливание результатов: факториал n n n Как мы вычисляем 6!? 6*5 = 30 Берём Накапливание результатов: факториал n n n Как мы вычисляем 6!? 6*5 = 30 Берём предыдущее 30, и 30 * 4 = 120 Берём предыдущее 120, и 120 * 3 = 360 Берём предыдущее 360, и 360 * 2 = 720 Берём предыдущее 720, и 720 * 1 = 720 Python Programming, 2/e 21

Накапливание результатов: факториал n n n Что в действительности происходит? Мы повторно делаем умножения Накапливание результатов: факториал n n n Что в действительности происходит? Мы повторно делаем умножения используя всякий раз ранее полученное произведение. Такие алгоритмы называются накопительными, потому что мы наращиваем или накапливаем ответ в переменной, называемой переменной накопления. Python Programming, 2/e 22

Накапливание результатов: факториал n Общая форма накопительного алгоритма выглядит следующим образом: n n Инициализируем Накапливание результатов: факториал n Общая форма накопительного алгоритма выглядит следующим образом: n n Инициализируем накопительную переменную Выполняем цикл до получения окончательного результата n В цикле актуализируем на каждом шаге переменную накопления Python Programming, 2/e 23

Накапливание результатов: факториал Таким образом, нам нужен цикл. fact = 1 for factor in Накапливание результатов: факториал Таким образом, нам нужен цикл. fact = 1 for factor in [6, 5, 4, 3, 2, 1]: fact = fact * factor n n Давайте проверим, что эта программа действительно работает. Python Programming, 2/e 24

Накапливание результатов: факториал n Почему мы должны инициализировать переменную fact в 1? Для этого Накапливание результатов: факториал n Почему мы должны инициализировать переменную fact в 1? Для этого существует пара причин… n n Всякий раз в цикле предыдущее значение fact используется для получения следующего значения fact. При инициализации переменная fact должна получить начальное значение. Если не присвоить значение переменной fact, то что сделает Python? Python Programming, 2/e 25

Накапливание результатов: факториал Так как умножение ассоциативно и коммутативно, то нашу программу можно переписать Накапливание результатов: факториал Так как умножение ассоциативно и коммутативно, то нашу программу можно переписать следующим образом: fact = 1 for factor in [2, 3, 4, 5, 6]: fact = fact * factor n Великолепно! Но что, если мы захотим найти факториал другого числа? n Python Programming, 2/e 26

Накапливание результатов: факториал n n Что возвращает функция range(n)? Ответ: 0, 1, 2, 3, Накапливание результатов: факториал n n Что возвращает функция range(n)? Ответ: 0, 1, 2, 3, …, n-1 У функции range есть необязательный параметр! Функция range(start, n) возвращает start, start + 1, …, n-1 На самом деле параметров может быть больше! Функция range(начало, n, шаг) возвращает начало, начало+шаг, …, начало+шаг*(n-1) Функция list(<последовательность>) делает из последовательности список Python Programming, 2/e 27

Накапливание результатов: факториал Давайте попробуем примеры! >>> list(range(10)) [0, 1, 2, 3, 4, 5, Накапливание результатов: факториал Давайте попробуем примеры! >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(5, 10)) [5, 6, 7, 8, 9] >>> list(range(5, 10, 2)) [5, 7, 9] Python Programming, 2/e 28

Накапливание результатов: факториал n Используя улучшенный оператор range, мы можем создать диапазон чисел для Накапливание результатов: факториал n Используя улучшенный оператор range, мы можем создать диапазон чисел для нашего цикла двумя различными способами. n n Мы можем считать от 2 до n: range(2, n+1) (Почему следует использовать число n+1? ) Мы можем считать от n до 2: range(n, 1, -1) Python Programming, 2/e 29

Накапливание результатов: факториал Завершенная программа «факториал» : # factorial. py # Программа вычисляет факториал Накапливание результатов: факториал Завершенная программа «факториал» : # factorial. py # Программа вычисляет факториал числа # Иллюстрирует цикл for и идею накопления def main(): n = eval(input("Пожалуйста, введите целое число: ")) fact = 1 for factor in range(n, 1, -1): fact = fact * factor print("Факториал числа ", n, " равен", fact) main() Python Programming, 2/e 30

Границы значений для типа Int n Чему равно 100!? >>> main() Пожалуйста, введите целое Границы значений для типа Int n Чему равно 100!? >>> main() Пожалуйста, введите целое число: 100 Факториал числа 100 равен 9332621544394415268169923885626670049071596826438162 1468592963895217599993229915608941463976156518286253 69792082722375825118521091686400000000000 00 n Ого! Огромное число. Python Programming, 2/e 31

Границы значений для типа Int Более новые версии Python’а могут обработать такие числа, но… Границы значений для типа Int Более новые версии Python’а могут обработать такие числа, но… Python 1. 5. 2 (#0, Apr 13 1999, 10: 51: 12) [MSC 32 bit (Intel)] on win 32 Copyright 1991 -1995 Stichting Mathematisch Centrum, Amsterdam >>> import fact >>> fact. main() Please enter a whole number: 13 13 12 11 10 9 8 7 6 5 4 Traceback (innermost last): File "", line 1, in ? fact. main() File "C: PROGRA~1PYTHON~1. 2fact. py", line 5, in main fact=fact*factor Overflow. Error: integer multiplication Python Programming, 2/e 32

Границы значений для типа int n Что происходит? n n Существует бесконечно много целых Границы значений для типа int n Что происходит? n n Существует бесконечно много целых чисел и конечное число целых типа int, которые могут быть представлены в компьютере. Этот диапазон зависит от числа бит, которое конкретное ЦПУ использует для представления целого числа. Типичное ЦПУ использует для этого 32 бита. Python Programming, 2/e 33

Границы значений для типа int n n Типичный ПК использует для представления целого числа Границы значений для типа int n n Типичный ПК использует для представления целого числа 32 бита Это значит, что существует 232 возможных целых значений с центром в точке 0. Эта область от – 231 до 231 -1. Верхняя граница уменьшена на единицу, которая соответствует 0. Но наше число 100! Значительно больше чем 231. Как Python это делает? Python Programming, 2/e 34

Обработка больших чисел n n Переключается ли он на плавающий тип данных, чтобы избавить Обработка больших чисел n n Переключается ли он на плавающий тип данных, чтобы избавить нас от границ типа int ? Если мы инициализируем накопитель 1. 0, то получим >>> main() Пожалуйста, введите целое число: 15 Факториал числа 15 равен 1. 307674368 e+012 n Мы больше не получаем точный ответ. Python Programming, 2/e 35

Обработка больших чисел: Long Int n n n Очень большие и очень маленькие числа Обработка больших чисел: Long Int n n n Очень большие и очень маленькие числа выражаются в научной или экспоненциальной нотации. 1. 307674368 e+012 означает 1. 307674368 * 1012 Десятичную точку нужно сдвинуть вправо на 12 позиций, чтобы получить первоначальное число. Но у нас только 9 значащих цифр, поэтому при таком подходе 3 значащие цифры числа теряются. Python Programming, 2/e 36

Обработка больших чисел n n Числа типа float являются приближениями Числа типа float позволяют Обработка больших чисел n n Числа типа float являются приближениями Числа типа float позволяют нам представлять числа из большего интервала, но с меньшей точностью. Python способен расширить границы типа int! Целые числа в Python’е не ограничены заранее. Python обрабатывает целые числа какое бы значение (в разумных пределах) у этих чисел ни было. Python Programming, 2/e 37

Обработка больших чисел n n Более новые версии Python’а автоматически преобразуют целые числа к Обработка больших чисел n n Более новые версии Python’а автоматически преобразуют целые числа к расширенной форме, когда возникает угроза переполнения. Мы получаем практически бесконечно большие числа (например, 100!) за счет уменьшения скорости вычислений и большей загрузки памяти. Python Programming, 2/e 38

Преобразование типов n n n Мы знаем, что соединение в выражении целого с целым Преобразование типов n n n Мы знаем, что соединение в выражении целого с целым даёт целое, а плавающего с плавающим даёт плавающее. Что произойдёт, если смешать целое и плавающее число в одном выражении? x = 5. 0 + 2 Как вы думаете, что произойдёт? Python Programming, 2/e 39

Преобразование типов n n n Чтобы Python вычислил это выражение, он должен то ли Преобразование типов n n n Чтобы Python вычислил это выражение, он должен то ли преобразовать 5. 0 к 5 и выполнить целое сложение, то ли преобразовать 2 к 2. 0 и выполнить сложение с плавающей точкой. Преобразование плавающего к целому выполняется с потерей данных. Целые преобразовываются к плавающим путём добавления ". 0" (то есть взаимно однозначно) Python Programming, 2/e 40

Преобразование типов n n В выражениях со смешанными типами чисел Python преобразовывает целые (int) Преобразование типов n n В выражениях со смешанными типами чисел Python преобразовывает целые (int) в плавающие (float). Иногда мы явно управляем преобразованием типов. Это называется явным типизированием. Python Programming, 2/e 41

Преобразование типов >>> 4. 0 >>> 4 >>> 3 float(22//5) int(4. 5) int(3. 9) Преобразование типов >>> 4. 0 >>> 4 >>> 3 float(22//5) int(4. 5) int(3. 9) round(3) Python Programming, 2/e 42