Числа Python, перетворення типів та математика

У цій статті ви дізнаєтеся про різні числа, що використовуються в Python, про те, як перетворити один тип даних в інший, і про математичні операції, що підтримуються в Python.

Номер типу даних у Python

Python підтримує цілі числа, числа з плаваючою крапкою та комплексні числа. Вони визначаються як int, floatі complexкласи в Python.

Цілі числа та плаваючі крапки розділяються наявністю або відсутністю десяткової коми. Наприклад, 5 - ціле число, тоді як 5.0 - число з плаваючою комою.

Складні числа записуються у вигляді, x + yjде x - дійсна частина, а y - уявна частина.

Ми можемо використовувати type()функцію, щоб дізнатись, до якого класу належить змінна чи значення, а isinstance()функція перевірити, чи належить вона до певного класу.

Давайте розглянемо приклад:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Коли ми запускаємо вищезазначену програму, ми отримуємо такий результат:

 (8 + 3j) Правда

Хоча цілі числа можуть бути будь-якої довжини, число з плаваючою комою є точним лише до 15 знаків після коми (16-те місце є неточним).

Числа, з якими ми маємо справу щодня, мають десяткову (базу 10) систему числення. Але комп'ютерні програмісти (як правило, вбудовані програмісти) повинні працювати з двійковою (база 2), шістнадцятковою (база 16) та вісімковою (база 8) системами числення.

У Python ми можемо представляти ці числа, розміщуючи префікс перед цим числом. У наступній таблиці перелічені ці префікси.

Система числення Префікс
Двійкові "0b" або "0B"
Вісімкові '0o' або '0O'
Шістнадцяткова "0x" або "0X"

Ось кілька прикладів

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Коли ви запускаєте програму, результат буде:

 107 253 13

Перетворення типу

Ми можемо перетворити один тип числа в інший. Це також відомо як примус.

Такі операції, як додавання, віднімання, примусове ціле число, яке плаває неявно (автоматично), якщо один з операндів є плаваючим.

 >>> 1 + 2.0 3.0

Вище ми бачимо, що 1 (ціле число) примусове до 1,0 (плаваюче) для додавання, і результат також є числом із плаваючою точкою

Ми також можемо використовувати вбудовані функції, такі як int(), float()і complex()для явного перетворення між типами. Ці функції можуть навіть перетворюватись із рядків.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

При перетворенні з плаваючого в ціле число число скорочується (десяткові частини видаляються).

Десятковий десятковий Python

Вбудований в Python клас float виконує деякі обчислення, які можуть нас вразити. Ми всі знаємо, що сума 1.1 та 2.2 дорівнює 3.3, але Python, схоже, не погоджується.

 >>> (1.1 + 2.2) == 3.3 False

Що відбувається?

Виявляється, числа з плаваючою комою реалізовані в апаратному забезпеченні комп'ютера як двійкові дроби, оскільки комп'ютер розуміє лише двійкові (0 і 1). З цієї причини більшість відомих нам десяткових дробів не можуть бути точно збережені в нашому комп’ютері.

Візьмемо приклад. Ми не можемо представити дріб 1/3 як десяткове число. Це дасть 0,33333333 … що нескінченно довго, і ми можемо лише наблизити його.

Виявляється, десятковий дріб 0,1 отримає нескінченно довгий двійковий дріб 0,000110011001100110011 … і наш комп'ютер зберігає його лише кінцеве число.

Це лише приблизно 0,1, але ніколи не буде рівним. Отже, це обмеження нашого комп'ютерного обладнання, а не помилка в Python.

 >>> 1.1 + 2.2 3.3000000000000003

Щоб подолати цю проблему, ми можемо використовувати десятковий модуль, який постачається з Python. У той час як числа з плаваючою комою мають точність до 15 знаків після коми, десятковий модуль має точність, що встановлюється користувачем.

Побачимо різницю:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Вихідні дані

 0,1 0,1000000000000000055511151231257827021181583404541015625

Цей модуль використовується, коли ми хочемо проводити десяткові обчислення, як ми дізналися в школі.

Це також зберігає значення. Ми знаємо, що 25,50 кг є більш точним, ніж 25,5 кг, оскільки він має два значущих десяткових знака порівняно з одним.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Вихідні дані

 3,3 3 000

Notice the trailing zeroes in the above example.

We might ask, why not implement Decimal every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal operations.

When to use Decimal instead of float?

We generally use Decimal in the following cases.

  • When we are making financial applications that need exact decimal representation.
  • When we want to control the level of precision required.
  • When we want to implement the notion of significant decimal places.

Python Fractions

Python provides operations involving fractional numbers through its fractions module.

A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.

We can create Fraction objects in various ways. Let's have a look at them.

 import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))

Output

 3/2 5 1/3

While creating Fraction from float, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.

Fortunately, Fraction allows us to instantiate with string as well. This is the preferred option when using decimal numbers.

 import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))

Output

 2476979795053773/2251799813685248 11/10

This data type supports all basic operations. Here are a few examples.

 from fractions import Fraction as F print(F(1, 3) + F(1, 3)) print(1 / F(5, 6)) print(F(-3, 10)> 0) print(F(-3, 10) < 0)

Output

 2/3 6/5 False True

Python Mathematics

Python offers modules like math and random to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.

 import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6))

Output

 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720

Here is the full list of functions and attributes available in the Python math module.

 import random print(random.randrange(10, 20)) x = ('a', 'b', 'c', 'd', 'e') # Get random choice print(random.choice(x)) # Shuffle x random.shuffle(x) # Print the shuffled x print(x) # Print random element print(random.random())

Коли ми запускаємо вищезазначену програму, ми отримуємо результат наступним чином (значення можуть бути різними через випадкову поведінку)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Ось повний перелік функцій та атрибутів, доступних у випадковому модулі Python.

Цікаві статті...