0 |
|
Програмування мовою Python: основи та практика Електронний посібник |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ТЕМА 3. ЧИСЛОВІ
ДАНІ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Математичні та бітові операції Математичні операції
Якщо як операнди деякого
арифметичного виразу використовують тільки цілі числа, то результат теж буде
ціле число, винятком є операція ділення, результатом якої буде дійсне число.
У разі спільного використання цілих і дійсних чисел результатом буде дійсне
число.
Бітові операції над цілими числами
Короткий запис математичних та бітових операцій Часто виникає
потреба змінювати значення змінної як результат математичних або бітових
операцій. У мові Python
є коротка форма запису для таких випадків, наприклад: замість запису a = a + 3, можна використовувати більш
компактний варіант a += 3. Така
скорочена форма працює і для інших математичних або бітових операцій, даючи
змогу спростити код і зробити його більш зрозумілим. Як у математиці, так і в мові програмування Python, оператори мають різний пріоритет. Наприклад, у виразі 2 + 3 * 4, операція множення виконається першою, оскільки
має вищий пріоритет, ніж операція додавання. Така сама логіка
визначення пріоритету застосовується і в мові Python, де оператори
обчислюються у порядку їхнього пріоритету. Нижче наведено таблицю, що відображає пріоритет операторів в мові Python, починаючи з найнижчого (у верхній частині таблиці) і
закінчуючи найвищим (у нижній частині таблиці).
У таблиці оператори з рівним пріоритетом розміщені в одному рядку (наприклад, + та – мають рівний пріоритет). Оператори, які ще не було розглянуто,
будуть описані в наступних розділах. Так само, як і в
математиці, в мові Python під час формування математичних виразів для зміни порядку обчислень можна
використовувати дужки. Наприклад (2 + 3) * 4. Мова Python дає
змогу створювати дуже елегантні програмні коди. Тут ми скористаємося можливістю, щоб проілюструвати це твердження.
У мові Python, окрім вбудованих типів даних, є вбудовані функції, які
доступні без додаткових налаштувань і включені до стандартної бібліотеки.
Розгляньмо деякі з цих функцій, які можна використовувати з цілими та
дійсними числами. abs(X) – повертає абсолютне значення
(модуль) числа. divmod(A, B) – повертає пару
чисел (P, R), які є цілою частиною P та остачею R за виконання цілочисельного ділення. Для цілих чисел результат буде таким самим, як і
за (A // B, A % B). Для дійсних чисел
результатом є (Q, A % B), де Q, зазвичай, math.floor(A / B), але може бути і на 1 менше. Незважаючи на це значення за
виразом Q * B + A % B дуже близьке до A,
якщо A % В не рівне нулю, то має
такий самий знак, як і B, 0 <= abs(A%B) < abs(B).
pow(X, Y[, Z]) – повертає X в степені Y
за модулем Z (обчислюється
більш ефективно, ніж pow (X, Y) % Z). Двоаргументна
форма pow(X, Y) – еквівалент
використання оператора піднесення
до степеня: X**Y.
Якщо параметр Z заданий, то X та Y
мають бути цілочисельними,
окрім того, Y має бути невід’ємним.
round(number[, ndigits]) – повертає
число number,
округлене до ndigits знаків після десяткової точки. Проте поведінка round() для дійсних чисел може бути несподіваною, це результат факту, що деякі
десяткові дроби не можуть бути представлені точно як дійсні числа.
Якщо параметр ndigits не
заданий, то округлення відбувається до найближчого цілого числа. Проте, якщо
дробова частина = 0.5, то
виконується «Банківське округлення», тобто округлення до найближчого парного
числа.
max(arg1, arg2, *args,
*[, key=func]) – повертає найбільше значення з
двох чи більше аргументів. Ця функція має ширші можливості, але про них
пізніше. min(arg1, arg2, *args,
*[, key=func]) – повертає найменше значення з
двох чи більше аргументів. Ця функція має ширші можливості, але про них
пізніше. int([object], [osn]) – повертає перетворене значення object
до цілого десяткового
числа. osn визначає
систему числення задання object (osn від
2 до 36 включно). Стандартно object=0, osn=10.
float([X])
– повертає перетворене
X
до дійсного числа.
bin(X) – повертає рядковий запис цілого
числа X у двійковій формі.
hex(X) – повертає рядковий
запис цілого числа X в шістнадцятковій формі. Для перетворення дійсного числа використовується метод float.hex(X).
oct(X) – повертає рядковий запис цілого
числа X у вісімковій формі.
bool([X]) – повертає приведене значення X до логічного
типу (bool),
використовуючи стандартну
процедуру перевірки істинності.
Повертає логічне значення True або False.
Крім вбудованої стандартної бібліотеки з багатим спектром функцій, у мові Python є чимало додаткових бібліотек, які можна використовувати під час написання програм.
Для користування
цим модулем його потрібно імпортувати, використовуючи команду import
math. Погляньмо на константи
та функції, які доступні у бібліотеці math. Після того,
як модуль підключено, описані в ньому функції, змінні й інші корисні конструкції можна використовувати в
програмному коді. Але при
цьому щоразу необхідно явно зазначати ім’я модуля, в якому описано змінну або
функцію. Використовується так званий крапковий синтаксис: спочатку зазначаємо ім’я модуля, і через
крапку ім’я змінної або назву
функції (з усіма належними аргументами). Наприклад, якщо ми хочемо
використовувати змінну, яку описано
в модулі, то відповідна
інструкція матиме вигляд як модуль.змінна. До того ж попередньо за допомогою команди import
модуль необхідно імпортувати модуль. Більш
конкретно, у модулі math є змінна pi зі значенням сталої p ≈ 3,14159265. Якщо ми хочемо побачити значення цієї
змінної, то спочатку за допомогою
команди import
math підключаємо модуль math, а потім за допомогою
команди print(math.pi) відображаємо значення змінної pi із модуля math. Замість
того щоб використовувати ім’я модуля під час звернення до його «вмісту», можемо для модуля створити
«псевдонім». Модуль підключаємо за допомогою команди у форматі import
модуль as
ім’я.
Інакше кажучи, в інструкції підключення модуля після імені модуля через
ключове слово as можна вказати ідентифікатор,
який використовуватиметься
замість імені модуля.
Тобто модуль все одно підключається, але коли ми звертаємося до змінних і функцій цього модуля, то вказуємо
не ім’я модуля, а ідентифікатор
(той, який після ключового слова as). Наприклад, якщо
ми підключаємо модуль за допомогою команди import модуль as ім’я, то звертатися
до змінної з модуля потрібно у форматі ім’я.змінна. Якщо згадати про модуль math і підключити
його за допомогою команди import math as
m, то роздрукувати значення
змінної pi можна за допомогою команди print(m.pi).
Впадає в
око незручність, пов’язана з необхідністю вказувати в явному вигляді ім’я
модуля (або його «псевдонім») у разі звертання до змінних і функцій модуля. Але тут приховано й
головну перевагу: безпосередньо в програмному коді ми можемо визначити змінну (функцію або щось іще)
з таким самим іменем, як і в модулі,
який підключається. У цьому разі наявність або відсутність імені модуля під
час звертання до змінної (або
функції) дає змогу однозначно ідентифікувати, про яку
програмну конструкцію йдеться. Водночас
можна підключати не весь модуль, а тільки деякі його утиліти (змінні або
функції). Скажімо, якщо з модуля нас цікавить тільки одна змінна, то можемо скористатися командою from
модуль import
змінна.
Після цього змінну можна
використовувати без посилання на ім’я модуля. Зокрема, щоб використовувати в програмному коді змінну pi без зазначення перед її
іменем назви модуля math, застосовуємо інструкцію імпорту from math import
pi. Якщо ми
хочемо підключити всі утиліти
з деякого модуля, корисною буде інструкція from
модуль import * (тобто після інструкції
import
вказуємо зірочку *).
Ця функція повертає значення True,
якщо числа A
та B є достатньо близькими одне до
одного, і False
у протилежному разі. Щоб
визначити, чи є числа близькими, використовується абсолютне і відносне
відхилення.
Наприклад, rel_tol=0.05 встановлює відхилення в 5%.
Початкове значення rel_tol=1e-09 гарантує, що два значення вважаються однаковими
приблизно в 9 десяткових цифрах. rel_tol має бути більшим за нуль.
Застосовується до порівнянь значень,
близьких до нуля. abs_tol має бути не менше
нуля.
Значення NaN не вважається близьким до будь-якого іншого значення (навіть до себе). Значення math.inf та
-math.inf
вважаються близькими лише до самих себе. math.isfinite(X). Повертає True,
якщо X не
є ні нескінченністю (math.inf та –math.inf), ні NaN, і False в іншому разі. Зауважимо,
що 0.0
вважається скінченним. math.isinf(X). Повертає True, якщо X є нескінченністю, і False в іншому
разі. math.isnan(X). Повертає True, якщо X є NaN, і False в іншому
разі.
math.ceil(X). Повертає
найближче ціле число, більше ніж X
(округлення вгору).
math.floor(X). Повертає найближче
ціле число, менше ніж X
(округлення вниз).
math.trunc(X). Повертає усічене значення X до
цілого.
math.copysign(X, Y). Повертає
дійсне число, що має абсолютне значення таке саме, як і у числа X, а знак ‒ як у числа Y.
math.fabs(X). Повертає абсолютне значення числа.
math.frexp(X). Повертає мантису і експоненту числа у
формі пари (M, E), таким чином, що,
X=M*2E. M – дійсне число (0,5 <= abs(M) < 1), а E –
ціле число.
math.ldexp(X, I) – повертає X*2I. Функція, зворотна функції math.frexp().
math.modf(X). Повертає дробову і цілу частину числа X у формі пари (D, C). Обидва числа є дійсними і мають той самий знак, що і X.
math.fmod(X, Y). Повертає залишок від ділення X на Y.
Для додатних чисел аналогічно оператору X % Y. Якщо серед чисел X, Y є від’ємні, то залишок обчислюється для абсолютних величин чисел X та Y,
а результат матиме такий самий знак, що і X.
Окрім того, більш точно працює з дійсними числами.
math.factorial(X). Повертає факторіал числа X.
math.fsum(iterable). Повертає суму всіх членів з iterable. Аналог вбудованої функції sum(), але math.fsum()точніша для дійсних чисел.
math.gcd(A, B). Повертає найбільший спільний дільник цілих чисел A та B
(найбільше натуральне число, на яке ці числа діляться без остачі). math.gcd(0, 0) повертає 0.
math.exp(X). Повертає значення eX.
Аналогічно до math.e**X. math.expm1(X). Повертає значення eX – 1. Якщо X → 0 точніше, ніж math.exp(X)–1. math.log(X, [base]). Повертає
значення логарифма числа X за
основою base.
Якщо base не вказано, обчислюється значення
натурального логарифма.
math.log10(X). Повертає значення логарифма числа X за основою Аналогічно
до log (x, 10).
math.log2(X). Повертає значення логарифма числа X за основою 2.
Аналогічно до log (x, 2).
math.log1p (X). Повертає значення натурального логарифма для (1 + X). При X → 0 точніше, ніж math.log (1 + X). math.pow (X, Y). Повертає
дійсне значення XY. Для pow (1.0, A) та pow (A, 0.0) завжди повертається 1.0,
навіть якщо A рівне нулю або NaN. Якщо X та Y скінченні, X від’ємне, а Y не
є цілим числом, тоді
результат pow (X, Y) невизначений.
math.sqrt(X). Повертає значення квадратного кореня
числа X.
math.degrees(X). Конвертує
радіани в градуси.
math.radians(X). Конвертує
градуси в радіани.
math.cos(X). Повертає
значення косинуса числа (X
вказується в радіанах). math.sin(X). Повертає значення синуса числа (X вказується в радіанах). math.tan(X). Повертає
значення тангенса числа (X
вказується в радіанах). math.acos(X). Повертає
значення арккосинуса числа в радіанах. math.asin(X). Повертає
значення арксинуса числа в радіанах. math.atan(X). Повертає
значення арктангенса числа в радіанах. math.atan2(Y, X). Повертає
значення арктангенса Y/X в радіанах. З урахуванням чверті, в якій
розташована точка (X, Y), тобто результат
в межах від –pi до pi.
math.hypot(X, Y). Повертає значення гіпотенузи трикутника з катетами X та Y (аналогічно до math.sqrt(x * x + y * y)).
math.cosh(X). Повертає
значення гіперболічного косинуса числа. math.sinh(X). Повертає значення
гіперболічного синуса числа. math.tanh(X). Повертає
значення гіперболічного тангенса числа. math.acosh(X). Повертає
значення оберненого гіперболічного косинуса числа. math.asinh(X). Повертає
значення оберненого гіперболічного синуса числа. math.atanh(X). Повертає
значення оберненого гіперболічного тангенсу числа.
Ідеальна вага для чоловіка = (зріст
в сантиметрах – 100) * 1,15. Ідеальна
вага для жінки = (зріст в
сантиметрах – 110) * 1,15. zrist=int(input(‘Ваш зріст в сантиметрах:’)) v_men=(zrist-100)*1.15 v_women=(zrist-110)*1.15 print(‘Ідеальна вага для чоловіка = ‘, v_men) print(‘Ідеальна вага для жінки = ‘, v_women) Для задання комплексного числа можна
використати запис A + Bj.
Іншим способом задати комплексне число є використання функції complex([real[, imag]]),
яка створює число у вигляді
real + imag*j. Якщо перший параметр це рядок (а другого
параметра немає), то він розглядається як запис комплексного числа. Функція complex() утворить комплексне число, що відповідає цьому рядковому значенню.
Під час перетворення з рядка, важливо, щоб навколо центрального оператора + або – не
було пробілів.
З комплексного числа можна виокремити
дійсну та уявну частини.
Для виконання математичних операцій з
комплексними числами може
бути використана бібліотека
cmath. Завдання для самоперевірки
Ø Основні оператори
мови Python
можна розподілити на чотири групи: арифметичні, побітові, логічні й оператори
порівняння. Ø Арифметичні оператори: + (додавання), ‒ (віднімання), * (множення), / (ділення), // (цілочислове ділення), % (остача від цілочислового
ділення), **
(піднесення до степеня). Ø Побітові оператори: ~ (побітова
інверсія), & (побітове і), | (побітове або), ^ (побітове виняткове або), << (побітовий
зсув ліворуч), >> (побітовий зсув праворуч). Ø Логічні оператори:
or (логічне
або), and (логічне і),
not (логічне
заперечення). Ø Оператори порівняння: > (більше), < (менше), <= (не більше), >= (не менше), == (дорівнює), != (не дорівнює). Також до операторів порівняння зазвичай відносять оператор перевірки ідентичності об’єктів is і оператор перевірки неідентичності об’єктів is not. Ø
Оператор присвоювання
має скорочені форми: наприклад, команду вигляду
x=x+y можна записати
у вигляді x+=y. Такого типу скорочені вирази можна
використовувати для всіх арифметичних і побітових операторів. Ø Функція eval() дає змогу розрахувати
вираз, який у формі тексту передано аргументом
функції. Ø Для підключення модулів
використовується інструкція import, після якої вказується ім’я модуля, який підключають. Під час використання змінних (функцій) із підключеного модуля ім’я
модуля (через крапку) зазначається перед іменем змінної (функції). Ø Тернарний оператор має три операнди і повертає значення залежно від істинності або хибності певної умови (один із операндів тернарного оператора).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||