okpython.net
Все для начинающих

Числа в Python

Типы чисел в Python

Когда мы хотим представить информацию о количестве деревьев в саду, остатке на банковской карте или же провести какие-либо математические расчеты, мы используем числа. В Python числа представлены сразу несколькими родственными категориями типов. Сюда относятся целые (int), вещественные (float) и комплексные (complex) числа. Если возможностей базовых типов не хватает, всегда можно воспользоваться числовыми расширениями в виде модулей decimal или fractions. Все перечисленные числовые типы довольно легко преобразуются между собой, а математические операции с ними интуитивно понятны и производятся по общепринятым правилам математики.

Целые числа в Python

По умолчанию для записи литералов целых чисел в Python используется десятичная система счисления, однако разрешается записывать их в двоичной, восьмеричной и шестнадца­теричной системах счисления. При этом следует помнить, что вне зависимости от использу­емого формата представления, результат все равно будет отображаться в десятич­ном виде (см. пример №1).

Код Результат pythonCodes
# Присвоили целое положительное число.
int_1 = 5
# Выведет 5.
print(int_1)
 
# Присвоили целое отрицательное число в двоичной СС (-25 в 10-й СС).
int_2 = -0b11001
# Выведет -25.	
print(int_2)	

# Присвоили целое отрицательное число в 8-ной СС (-29 в 10-й СС).
int_3 = -0o35
# Выведет -29.	
print(int_3)	

# Присвоили целое положительное число в 16-ной СС (254 в 10-й СС).
int_4 = 0xFE
# Выведет 254.	
print(int_4)	

# Результат все равно отобразится в 10-й СС.
res = int_1 + int_2 + int_3 + int_4
# Выведет 205.	
print(res)			
5
-25
-29
254
205	

















		
			

Пример №1. Литералы целых чисел в Python.

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

  • В десятичной системе счисления целые числа записываются в виде привычной нам последовательности цифр от нуля до десяти, например, 0, -33, +127.
  • В двоичной системе счисления запись целого числа должна начинаться с нуля и латинской буквы B в верхнем или нижнем регистре (т.е. 0b или 0B), после чего должна идти последовательность нулей и единиц. Например, 0b01101, 0B1011, -0b1001. Если будут использованы другие цифры, интерпретатор сгенерирует сообщение об ошибке.
  • В восьмеричной системе счисления целое число должно начинаться с нуля и латинской буквы O в верхнем или нижнем регистре (т.е. 0o или 0O), после чего должна идти последовательность цифр от нуля до семи (01234567). Например, 0o77, 0O35, -0O174. Если будут использованы цифры не входящие в данный диапазон, интерпретатор сгенерирует сообщение об ошибке.
  • В шестнадцатеричной системе счисления запись целого числа должна начинаться с нуля и латинской буквы X в верхнем или нижнем регистре (т.е. 0x или 0X), после чего должны идти символы последовательности 0123456789ABCDEF, представляющих данную систему счисления. При этом буквы также разрешается использовать в любом регистре. Например, 0x7F, 0XDD5A, -0xfF9. Если будут использованы символы не входящие в данный диапазон, интерпретатор сгенерирует сообщение об ошибке.

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

  • bin(int_num) – преобразует целое число в двоичную систему счисления, возвращая строку с представлением литерала числа в этой системе.
  • oct(int_num) – преобразует целое число в восьмеричную систему счисления, возвращая строку с представлением литерала числа в этой системе.
  • hex(int_num) – преобразует целое число в шестнадцатеричную систему счисления, возвращая строку с представлением литерала числа в этой системе.
  • int(obj) – конструктор типа int может использоваться как с одним, так и с двумя аргументами. Когда указан только один аргумент, функция пытается преобразовать объект в целое число в десятичной системе счисления, а в случае невозможности такого преобразования возбуждает соответствующее исключение. При этом, если объект obj является вещественным числом, оно преобразуется в целое путем усечения дробной части, например, int(21.302) вернет 21.
  • int(num_str, base=10) – если указано два аргумента, то первый аргумент должен быть строковым представлением целого числа в системе счисления с указанным основанием base. Разрешается использовать системы счисления с основаниями от 2 до 36. При этом префикс 0b, 0o или 0x у строкового представления числа можно опускать. Если же точно известно, что в строковом представлении числа присутствует соответствующий префикс, второму аргументу разрешается передавать ноль, т.к. интерпретатор сможет определить систему счисления переводимого числа по указанному префиксу. В случае невозможности преобразования строки в целое число функция возбуждает соответствующее исключение (см. пример №2).
Код Результат pythonCodes
# Присвоили переменной целое положительное число.
int_dec = 45

# Преобразовали 45 в двоичную СС (строковое представление с префиксом).
int_bin_str = bin(int_dec)
# Выведет 0b101101.
print('45 в 2-ной СС:', int_bin_str)
	
# Преобразовали 45 в 8-ную СС (строковое представление с префиксом).
int_oct_str = oct(int_dec)
# Выведет 0o55.
print('45 в 8-ной СС:', int_oct_str)

# Преобразовали 45 в 16-ную СС (строковое представление) с префиксом.
int_hex_str = hex(int_dec)
# Выведет 0x2d.
print('45 в 16-ной СС:', int_hex_str)	

# Преобразуем 0x2d обратно в 10-ю СС (числовое представление).
int_dec = int(int_hex_str, base=16)	
# Выведет 45.
print('0x2d в 10-ной СС:', int_dec)	

# Т.к. литерал 0x2d содержит префикс, то можно и так.
int_dec = int(int_hex_str, base=0)	
# Опять же выведет 45.
print('0x2d в 10-ной СС:', int_dec)			
45 в 2-ной СС:  0b101101
45 в 8-ной СС: 0o55
45 в 16-ной СС: 0x2d
0x2d в 2-ной СС: 0b101101
0x2d в 10-ной СС: 45
0x2d в 10-ной СС: 45



















		
			

Пример №2. Перевод целых чисел между СС.

Итак, функции bin(int_num), oct(int_num) и hex(int_num) принимают целые числа и возвращают строковые представления этих чисел в соответствующих системах счисления. Если же требуется обратное преобразование в десятичную систему, то следует передавать числа функции int(num) или, для их строковых представлений, функции int(num_str, base=10), предварительно указав основание системы счисления base переводимого числа.

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

Далее. Целые числа в Питоне отличаются тем, что их размер в принципе ограничивается лишь доступной памятью. Т.е. они поддерживают длинную арифметику и могут быть сколь угодно большими (см. пример №3). При этом следует помнить, что при обработке очень больших чисел приходится жертвовать скоростью их обработки.

Код Результат pythonCodes

# Возводим число в степень 99.
num = 257849**99
# Выведем результат на экран.
print(num, end='\n\n')

# Узнаем длину числа (сначала преобразовав к строке).
digits = len(str(num))
# Выведем количество разрядов числа на экран.
print('Количество разрядов в числе:', digits)



				
53110414805516436628782613106463688464079613392
90447528079607511823736565350014611025443154896
27726813291692085262103437221067464647506417416
07778199506769145842776821168682784291830600062
86303063083619862322533843849251477935592078479
30305203144960374852804267532735290335532384187
05881391054962063739410884715991946981994179461
21320508944648974559217660898526107319208466368
91703990849387344330955755287354442030313290102
11894758515138083425792270523021017010636394801
14389695020775150902061702144736277123301356708
2485335161339404649

Количество разрядов в числе: 536

Пример №3. Пример очень большого целого числа.

Также следует отметить, что в отличие от других типов чисел над целыми числами в Python можно производить битовые операции, перечень которых представлен для ознакомления в порядке возрастания их приоритета в таблице №4. Подробнее данный вопрос мы рассмотрим позже, когда будем рассматривать битовые операции.

Операция Описание
x | y Битовое or (ИЛИ). Отрицательные числа представляются как двоичное дополнение.
x ^ y Битовое xor (исключающее ИЛИ).
x & y Битовое and (И).
x << n Побитовый сдвиг влево (сдвигает значение x влево на n битов аналогично операции x*(2* *n) без проверки на переполнение).
x >> y Побитовый сдвиг вправо (сдвигает значение x вправо на n битов аналогично операции x//(2**n) без проверки на переполнение ).
~x Инверсия битов числа.

Таблица №4. Список битовых операций, применимых к целым числам.

Также у типа int имеется несколько дополнительных методов:

  • int.bit_length() – метод возвращает количество бит, которое необходимо для представления числа в памяти в двоичном виде, без учета знака и незначащих (лидирующих) нулей;
  • int.to_bytes(length, byteorder, *, signed=False) – метод возвращает массив байтов, который соответствует данному числу;
  • int.from_bytes(bytes, byteorder, *, signed=False) – метод класса, который возвращает целое число, соответствующее указанному массиву байтов.

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

Вещественные числа в Python

Что касается записи литералов вещественных чисел (по-другому чисел с плавающей точкой), то в Python для них используется привычный нам математический синтаксис: сперва записывается знак числа (плюс можно не указывать), затем последовательность цифр целой части, разделительная точка и последовательность цифр дробной части. Например, 0.33, .33, 0.0, .0, -123.45, -.123. Также допустима запись вещественных чисел в экспоненциальной форме. При этом для представления степени 10n используется латинская буква E в верхнем или нижнем регистре (т.е. e или E), следующий за ней необязательный знак плюс или обязательный знак минус, а также сам показатель степени в виде положительного целого числа или нуля (см. пример №5).

Код Результат pythonCodes
# Положительное вещественное число.
float_num_1 = 123.45
# Выведет 123.45.
print(float_num_1)
	 
# Отрицательное вещественное число.
float_num_2 = -123.45
# Выведет -123.45.
print(float_num_2)
	
# Тоже самое, что и -0.45, т.к. 
# ноль разрешается опускать.
float_num_3 = -.45  
# Выведет -0.45.
print(float_num_3)
	 
# Тоже самое, что и 123.45.
float_num_4 = 1.2345e2 
# Выведет 123.45.
print(float_num_4)  
  
# Тоже самое, что и 0.0012345.
float_num_5 = 1.2345E-3 
# Выведет 0.0012345.
print(float_num_5)
123.45
-123.45
-0.45
123.45
0.0012345


















		
			

Пример №5. Литералы вещественных чисел в Python.

В отличие от целых чисел вещественные не поддерживают длинную арифметику. В обычных условиях их точность ограничивается максимум 17 значащими цифрами. Поэтому для очень маленьких и очень больших вещественных чисел получаются весьма неточные результаты (см. пример №6). Если же в расчетах необходима высокая точность представления вещественных чисел, следует использовать, например, модуль decimal, позволяющий задавать требуемую точность результата (опять же, за счет снижения скорости обработки таких чисел).

Код Результат pythonCodes
# Импортируем модуль чисел с фиксированной точностью.
import decimal
	
# Возведем вещественное число в 15 степень.
# Результат будет грубо округлен до 17 значащих цифр.
res = 52.93**15
# Выведет 7.170152784187784e+25.
print(res)

# Проблема решается при помощи модуля decimal.
res = decimal.Decimal('52.93')**15
# Выведет 71701527841877847666492396.31.
print(res)	

# Тоже самое касается и очень маленьких чисел.
res = 0.0002777775793/993
# Выведет 2.7973572940584086e-07.
print(res)

# Установим точность в 35 значащих цифр.
decimal.getcontext().prec = 35
# Разделим при помощи модуля decimal.
res = decimal.Decimal('0.0002777775793')/993
# Выведет 2.7973572940584088620342396777442095E-7.
print(res)			
7.170152784187784e+25

71701527841877847666492396.31

2.7973572940584086e-07

2.7973572940584088620342396777442095E-7
















		
			

Пример №6. Точность представления вещественных чисел в Python.

Неточное представление вещественных чисел в Python, впрочем как и в других языках программирования, может иногда приводить к неожиданным результатам (см. пример №7). Это связано с тем, что мы в основном привыкли вести расчеты в десятичной системе счисления, а компьютер перед вычислениями преобразует все числа в двоичную систему. Но не все вещественные числа могут быть точно преобразованы из десятичной системы счисления в двоичную, что и приводит к некоторой потере точности при хранении десятичных чисел в памяти компьютера.

Код Результат pythonCodes
# Сравним сумму 0.1 + 0.7 с числом 0.8.
res = 0.1 + 0.7

# Если результат больше 0.8.
if res > 0.8:
    print('0.1 + 0.7 > 0.8')
# Если результат меньше 0.8.
elif res < 0.8:
    print('0.1 + 0.7 < 0.8')	
# Если результат равен 0.8.
else:
    print('0.1 + 0.7 = 0.8')		
0.1 + 0.7 < 0.8









		
			

Пример №7. Побочные эффекты сложения вещественных чисел в Python.

Как видим, на первый взгляд результат действительно получился неожиданным (не забываем про кнопку «Результат»). Однако все верно. Ведь в данном случае при переводе десятичных чисел в двоичную систему компьютер не смог перевести их точно, округлив результат так, чтобы получившееся двоичное число поместилось в пределах выделяемого для хранения вещественного числа объема памяти. В результате у нас получилось число несколько меньшее, чем 0.8. Но, повторимся, это не проблема Python, это проблема математики и невозможности во всех случаях осуществить точный перевод чисел из одной системы счисления в другую.

Не стоит сравнивать вещественные числа, доверяя их точности до последнего знака.

В заключение данного пункта перечислим дополнительные методы типа float.

  • float.as_integer_ratio() – метод возвращает кортеж из пары целых чисел, которые представляют собой числитель и знаменатель наименьшей дроби, равной данному вещественному числу. Если вещественное число отрицательное, то первое число в возвращаемом кортеже будет со знаком минус. При этом второе число всегда положительное (см. пример №8).
  • float.is_integer() – метод возвращает True, если дробная часть вещественного числа равна нулю.
  • float.hex() – метод возвращает строковое представление числа с плавающей точкой в шестнадцатеричной системе счисления. При этом следует иметь в виду, что экспонента в таком представлении обозначается буквой p, т.к. буква e представляет собой допустимый символ в 16-ной системе счисления.
  • float.fromhex(float_num_str) – этот метод класса осуществляет преобразование строкового представления вещественного числа float_num_str в шестнадца­теричной системе счисления обратно в вещественное число в десятичной системе счисления.
Код Результат pythonCodes
# Получим соответствующий кортеж.
fract = float.as_integer_ratio(15.63)
# Выведет (8798907771975107, 562949953421312).
print('Числ. и знамен. дроби для 15.63:', fract, end='\n\n')

# Проверим, равна ли нулю дробная часть.
is_int = float.is_integer(15.63)
# Выведет 2-й вариант.
if is_int == True:
    print('Дробная часть равна нулю.', end='\n\n')	
else:
    print('Дробная часть не равна нулю.', end='\n\n')	

# Переведем наше число в 16-ю систему счисления.
float_hex = (15.63).hex()
# Выведет 0x1.f428f5c28f5c3p+3.
print('15.63 в 16-й СС:', float_hex)

# Можно и так.
float_hex = float.hex(15.63)
# Выведет тот же результат.
print('15.63 в 16-й СС:', float_hex, end='\n\n')

# Переведем обратно в 10-ю СС (получим числовое представление).
float_dec = float.fromhex(float_hex)
# Выведет 15.63.
print('0x1.f428f5c28f5c3p+3 в 10-й СС:', float_dec)			
Числ. и знамен. дроби для 15.63: (8798907771975107, 562949953421312)

Дробная часть не равна нулю.

15.63 в 16-й СС: 0x1.f428f5c28f5c3p+3
15.63 в 16-й СС: 0x1.f428f5c28f5c3p+3

0x1.f428f5c28f5c3p+3 в 10-й СС: 15.63

















		
			

Пример №8. Дополнительные методы типа float.

Комплексные числа в Python

Комплексные числа в Python представлены типом complex, который хранит два вещественных числа: первое представляет собой действительную часть комплексного числа, а второе – мнимую. Как и принято в математике, действительная и мнимая части литерала комплексного числа объединяются знаком плюс или минус (см. пример №9). Однако за мнимой частью в Python следует символ j, как это принято в инженерии (в математике мнимая единица обозначается через i).

Код Результат pythonCodes
# Присвоим переменной комплексное число.
compl_1 = 2.4+3j
print('Комплексное число', compl_1)

# Атрибут real представляет действительную часть, т.е. 2.4.
print('Действительная часть числа 2.4+3j:', compl_1.real)
# Атрибут imag представляет мнимую часть числа, т.е. 3.0.
print('Мнимая часть числа 2.4+3j:', compl_1.imag)

# Изменим знак мнимой части числа.
compl_2 = compl_1.conjugate()
# Выведем полученное сопряженное комплексное число, т.е. 2.4-3j.
print('Сопряженное к 2.4+3j - это', compl_2)

# Комплексное число с нулевой действительной частью.
compl_3 = 0-4.7j
# Нулевую действительную часть можно опускать.
compl_4 = -4.7j

# Сравним их (получим равенство).
if compl_3 == compl_4:
   	print('0-4.7j = -4.7j')
Комплексное число (2.4+3j)
Действительная часть числа 2.4+3j: 2.4
Мнимая часть числа 2.4+3j: 3.0
Сопряженное к 2.4+3j - это (2.4-3j)
0-4.7j = -4.7j















		
			

Пример №9. Литералы комплексных чисел в Python.

Как видно из примера, если действительная часть комплексного числа равна 0, ее можно опустить. Кроме того, отдельные части комплексного числа доступны в виде атрибутов real и imag, а получить сопряженное данному комплексное число можно изменив знак мнимой части при помощи метода complex.conjugate().

Вполне возможно, что сталкиваться с комплексными числами вам придется довольно редко, однако иметь представление о наличии такого типа все-таки не помешает.

Математические операции в Python

Все известные нам со школы математические операции полностью поддерживаются в Python. Перечислим их и рассмотрим примеры.

  • x + y – сложение двух чисел.
  • x - y – вычитание двух чисел.
  • x * y – умножение двух чисел.
  • x / y – деление двух чисел. При делении вещественных и целых чисел (даже без остатка) результат всегда является вещественным числом. Если же в делении присутствуют комплексные числа, интерпретатор возвращает комплексный результат (см. пример №10).
  • x // y – деление с округлением вниз. Например, 1//2 = 0, -1//2 = -1, 1//-2 = -1, -1//-2 = 0.
  • x % y – операция возвращает остаток от деления целых и вещественных чисел. Если оба числа целые, то возвращается целочисленный остаток (тип int). Например, 5%3 = 2, -5%3 = 1 (т.к. -5 = 3*(-2) + 1), 6%3 = 0. Если хотя бы одно число вещественное, остаток от деления также возвращается в вещественном виде (тип float), при чем из-за неточности представления вещественных чисел результат может оказаться неточным. Например, 5.2%3 = 2.2 (все в порядке), -5.2%3 = 0.7999999999999998 (получили неточный результат, хотя ожидали 0.8, т.к. -5.2 = 3*(-2) + 0.8). Что касается комплексных чисел, то для них операция неприменима.
  • +x – операция используется в основном для повышения удобочитаемости кода, т.к. по факту она ничего не делает.
  • -x – инверсия знака числа отличного от нуля, т.е. изменение плюса на минус или наоборот. Для нуля ничего не происходит.
  • x ** y – возведение в степень. Отметим, что 0**0 = 1.
Код Результат pythonCodes
# Сложение вещественных чисел.
res_1 = 3.46 + 1.22
# Получим 4.68.
print('3.46 + 1.22 =', res_1, end='\n\n')

# Вычитание комплексных чисел.
res_2 = 2.7+2.1j - 1.3+3.5j
# Получим 1.4+5.6j.
print('2.7+2.1j - 1.3+3.5j =', res_2, end='\n\n')

# Деление вещественных  чисел.
res_3 = 3.4/1.7
# Получим 2.0.
print('3.4/1.7 =', res_3, end='\n\n')	

# Деление целых  чисел.
res_4 = 12/3
# Получим вещественный результат 4.0.
print('12/3 =', res_4, end='\n\n')

# Возведение в степень.
res_5 = 0.5**3
# Получим 0.125.
print('0.5**3 =', res_5, end='\n\n')
3.46 + 1.22 =  4.68
			
2.7+2.1j - 1.3+3.5j = (1.4000000000000001+5.6j)

3.4/1.7 = 2.0

12/3 = 4.0

0.5**3 = 0.125




















		
			

Пример №10. Базовые математические операции в Python.

Что касается математических выражений, в которых используются сразу несколько операций, то для их группировки предназначены круглые скобки (см. пример №11). При этом внутри скобок приоритет отдается сперва возведению в степень (x**y), затем равносильно умножению (x*y), делению (x/y), делению с округлением вниз (x//y) и получению остатка от деления (x%y); в конце равнозначно выполняются сложение (x + y) и вычитание (x - y). Более подробно о приоритете операторов в Python (и не только математических) мы поговорим позже.

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

Код Результат pythonCodes
# Используем для суммы круглые скобки.
res_1 = (3.46 + 1.22)*3 - 0.4
# Получим 13.639999999999999.
print('(3.46 + 1.22)*3 + 0.4 =', res_1, end='\n\n')

# Используем вложенные скобки.
res_2 = ((5/3.2 + 8*2)*3 - 0.4)/(4 - 2**3)
# Получим -13.071875.
print('((5/3.2 + 8*2)*3 - 0.4)/(4 - 2**3) =', res_2)
(3.46 + 1.22)*3 + 0.4 =  13.639999999999999

((5/3.2 + 8*2)*3 - 0.4)/(4 - 2**3) =  -13.071875




		
			

Пример №11. Математические выражения в Python.

Обратите внимание, что при наличии в одном выражении целых и вещественных чисел, интерпретатор при необходимости осуществляет приведение целых чисел к типу float, т.е. к более объемлющему типу (в математике целые числа являются подмножеством вещест­вен­ных, а те в свою очередь принадлежат множеству комплексных чисел).

В дополнение к математическим операторам Python предоставляет и ряд полезных встроенных функций, позволяющих, например, найти модуль числа или округлить его (см. пример №12). Опять же, перечислим их и приведем краткое описание.

  • divmod(x, y) – возвращает кортеж (x//y, x%y). При этом для комплексных чисел она не предназначена.
  • pow(x, y) – возвращает x в степени y (аналог x ** y).
  • abs(x) – возвращает абсолютное значение (модуль) числа x.
  • round(x, n) – округляет число до n-го разряда после запятой. Если аргумент n не указан, то число округляется до ближайшего целого.
  • max(num_1, num_2, ..., num_n) – возвращает максимальное из двух и более чисел.
  • min(num_1, num_2, ..., num_n) – возвращает минимальное из двух и более чисел.
  • sum(num_1, num_2, ..., num_n) – возвращает сумму двух и более чисел.
  • int(x) – приведение числа к типу int.
  • float(x) – приведение числа к типу float.
  • complex(re, im=0) – приведение к типу complex. Аргумент im (мнимая часть будущего комплексного числа) можно не передавать, тогда он по умолчанию будет равен нулю.
Код Результат pythonCodes
# Возведение в степень.
res_1 = pow(16, 0.5)
# Получим 4.0.
print('pow(16, 0.5) ->', res_1, end='\n\n')

# Найдем модуль числа.
res_2 = abs(-0.33)
# Получим 0.33.
print('abs(-0.33) ->', res_2, end='\n\n')	

# Получим кортеж частного и остатка.
res_3 = divmod(45, 7)
# Выведет кортеж (6, 3).
print('divmod(45, 7) ->', res_3, end='\n\n')		

# Найдем максимальное из трех чисел.
res_4 = max(45, 7.5, 23.8)
# Получим 45.
print('max(45, 7.5, 23.8) ->', res_4, end='\n\n')	

# Найдем минимальное среди этих чисел.
res_5 = min(45, 7.5, 23.8)
# Получим 7.5.
print('min(45, 7.5, 23.8) ->', res_5, end='\n\n')		

# Округлим число до трех знаков после запятой.
res_6 = round(45.532917, 3)
# Получим 45.533.
print('round(45.532917, 3) ->', res_6, end='\n\n')	
	
# Используем встроенные функции в выражении.
res_7 = abs(pow(-2, 3) + round(27.321, 1))
# Получим 19.3.
print('abs(pow(-2, 3) + round(27.321, 1)) = ', res_7)
pow(16, 0.5) -> 4.0

abs(-0.33) -> 0.33

divmod(45, 7) -> (6, 3)

max(45, 7.5, 23.8) -> 45

min(45, 7.5, 23.8) -> 7.5

round(45.532917, 3) -> 45.533

abs(pow(-2, 3) + round(27.321, 1)) =  19.3



















		
			

Пример №12. Встроенные математические функции в Python.

Конечно же данный перечень встроенных функций довольно мал, но не стоит забывать про математические расширения и даже целые библиотеки, которые вполне смогут удовлетворить даже самых привередливых математиков. В частности, в следующем пункте мы познакомимся с модулем math стандартной библиотеки Python. Но сперва давайте закончим рассмотрение оставшейся части операторов, использующихся с числами.

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

  • x < y – выражение вернет True, если x строго меньше y.
  • x > y – выражение вернет True, если x строго больше y.
  • x <= y – выражение вернет True, если x меньше или равно y.
  • x >= y – выражение вернет True, если x больше или равно y.
  • x == y – выражение вернет True, если x равно y (в программировании один знак равно означает присвоить, поэтому для обозначения равенства используются два знака равно).
  • x != y – выражение вернет True, если x не равно y.

Использование операторов сравнения показано в примере №13.

Код Результат pythonCodes
# Проверим равенство чисел.
if 5 == 5.0:
    print('5 равно 5.0', end='\n\n')
else:
    print('5 не равно 5.0', end='\n\n')	

# Проверим какой из результатов больше.
if 5**7 > 4**8:
    print('5**7 > 4**8', end='\n\n')
elif 5**7 < 4**8:
    print('5**7 < 4**8', end='\n\n')	
else:
    print('5**7 равно 4**8', end='\n\n')
5 равно 5.0

5**7 > 4**8









			

Пример №13. Операторы сравнения чисел в Python.

В дополнение к базовому оператору присваивания = в Python применяется целый ряд комбинированных операторов присваивания, которые объединяют операцию присваивания с другой операцией. В общем случае выражение присваивания с комбини­рованным оператором x op= y можно считать сокращенной записью выражения x = x op y, где вместо op следует подставлять один из арифметических операторов. Например, x += y является сокращенной записью выражения x = x + y, в котором к значению переменной x прибавляется значение переменной y, после чего результат присваивается переменной x. Использование некоторых комбинированных операторов присваивания показано в примере №14.

Код Результат pythonCodes
# Присвоили начальное значение.
a = 3   
print('Начальное значение:', a, end='\n\n')
 
# Равнозначно a = a + 6.
a += 6   
# Теперь a == 9.
print('a += 6 <=> a = a + 6 -> a ==', a, end='\n\n')
 
# Равнозначно a = a*2.
a *= 2  
# Теперь a == 18.
print('a *= 2 <=> a = a*2 -> a ==', a, end='\n\n')
 
# Равнозначно a = a/2.
a /= 2  
a = int(a)
# Теперь a == 9.
print('a /= 2 <=> a = a/2 -> a ==', a, end='\n\n')
 
# Равнозначно a = a**2.
a **= 2
# Теперь a == 81.
print('a **= 2 <=> a = a**2 -> a ==', a, end='\n\n')
 
# Равнозначно a = a%2.
a %= 2
# Теперь a == 1.
print('a %= 2 <=> a = a%2 -> a ==', a, end='\n\n')
 
# Равнозначно a = a//2.
a //= 2
# Теперь a == 0.
print('a //= 2 <=> a = a//2 -> a ==', a, end='\n\n')
Начальное значение: 3

a += 6 <=> a = a + 6 -> a == 9

a *= 2 <=> a = a*2 -> a == 18

a /= 2 <=> a = a/2 -> a == 9

a **= 2 <=> a = a**2 -> a == 81

a %= 2 <=> a = a%2 -> a == 1

a //= 2 <=> a = a//2 -> a == 0



















		
			

Пример №14. Комбинированные операторы присваивания в Python.

Конечно же мы перечислили не все комбинированные операторы присваивания, имеющиеся в Python. Весь перечень будет представлен в таблице в следующей главе, посвященной выражениям и операторам. Сейчас же мы рассмотрим ряд математических функций модуля math, поставляющегося в комплекте стандартной библиотеки Python.

Модуль math в Python

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

Для начала давайте рассмотрим представленные в модуле math математические константы и функции проверки чисел на принадлежность к ним.

  • math.pi – представляет значение числа π с точностью, которая зависит от конкретной платформы. Мы его помним, как число 3.14.
  • math.tau (чит. тау) – представляет удвоенное значение числа π с точностью, которая зависит от конкретной платформы. Т. о. τ – это отношение радиуса окружности к ее длине. Прибли­зительно оно равно 6.28.
  • math.e – представляет значение числа e с точностью, которая зависит от конкретной платформы. Мы его помним, как число 2.72.
  • math.inf (от англ. infinity) – представляет положительную бесконечность. Отметим, что значение является типом float и может быть получено вызовом конструктора float('inf'). Для получения отрицательной бесконечности следует использовать унарный оператор - (см. пример №15). К значению inf в математике приводит, например, операция деления на 0.
  • math.nan (от англ. not a number) – представляет значение не число, которое также является типом float и может быть получено вызовом конструктора float('nan'). К значению nan приводят недопустимые математические операции (например, извлечение корня четной степени из отрицательного числа на множестве вещественных чисел) или выход за допустимый диапазон значений для данной математической функции.
  • math.isinf(x) – возвращает True, если x является отрицательной или положительной бесконечностью, или False в противном случае.
  • math.isnan(x) – возвращает True, если x является значением nan, или False в противном случае.
  • math.isfinite(x) – возвращает False, только если x является nan, inf или -inf. Во всех остальных случаях функция возвращает True.
Код Результат pythonCodes
# Не забываем импортировать модуль.
import math
		 
# Выведем число pi.
print('Число pi =', math.pi, end='\n\n')

# Выведем число тау.
print('Число tau =', math.tau, end='\n\n')

# Выведем число e.
print('Число e =', math.e, end='\n\n')

# Выведем inf.
print('Положит. бесконечность - это:', math.inf, end='\n\n')	
# Можно и через float('inf').
print('Положит. бесконечность - это:', float('inf'), end='\n\n')

# Выведем nan.
print('Не число - это', math.nan, end='\n\n')	
# Можно и через float('nan').
print('Не число - это', float('nan'), end='\n\n')
	
# Получим бесконечность?
if math.isinf(math.inf/100) == True:
    print('math.inf/100 =', math.inf, end='\n\n')	

# Разделим, а затем проверим результат. 
num = 1/345000

# Получим число или бесконечность?
if math.isfinite(num) == True:
    print('1/345000 =', num)	
else:
    print('Получили бесконечность.')
Число pi = 3.141592653589793

Число tau = 6.283185307179586

Число e = 2.718281828459045

Положит. бесконечность - это: inf

Положит. бесконечность - это: inf

Не число - это nan

Не число - это nan

math.inf/100 = inf

1/345000 = 2.898550724637681e-06















		
			

Пример №15. Математические константы модуля math.

Что касается конкретно функций модуля math, то в нем представлены различные функции теории чисел, степенные, логарифмические, тригонометрические, гиперболические и ряд других функций. Все мы их здесь рассматривать не будем, однако краткое описание некоторых из них приведем в списке ниже. Остальные в случае необходимости всегда можно с легкостью найти в разделе «Numeric and Mathematical Modules» справочника стандартной библиотеки в описании модуля math (или cmath для комплексных чисел). Итак.

  • math.ceil(x) – возвращает x, округленное вверх до ближайшего целого (см. пример №16).
  • math.floor(x) – возвращает x, округленное вниз до ближайшего целого.
  • math.trunc(x) – возвращает целую часть x, полностью отсекая дробную.
Код Результат pythonCodes
# Не забываем импортировать модуль.
import math
		 
# В обоих случаях получим 2.
print('math.ceil(1.03) ->', math.ceil(1.03))
print('math.ceil(1.93) ->', math.ceil(1.93), end='\n\n')	
		 
# В обоих случаях получим -1.
print('math.ceil(-1.03) ->', math.ceil(-1.03))
print('math.ceil(-1.93) ->', math.ceil(-1.93), end='\n\n')	

		 
# В обоих случаях получим 1.
print('math.floor(1.03) ->', math.floor(1.03))
print('math.floor(1.93) ->', math.floor(1.93), end='\n\n')	
		 
# В обоих случаях получим -2.
print('math.floor(-1.03) ->', math.floor(-1.03))
print('math.floor(-1.93) ->', math.floor(-1.93), end='\n\n')	

		 
# Получим 1.
print('math.trunc(1.03) ->', math.trunc(1.03))
# Получим -1.
print('math.trunc(-1.03) ->', math.trunc(-1.03), end='\n\n')
math.ceil(1.03) -> 2
math.ceil(1.93) -> 2

math.ceil(-1.03) -> -1
math.ceil(-1.93) -> -1

math.floor(1.03) -> 1
math.floor(1.93) -> 1

math.floor(-1.03) -> -2
math.floor(-1.93) -> -2

math.trunc(1.03) -> 1
math.trunc(-1.03) -> -1









		
			

Пример №16. Функции модуля math (часть 1).

  • math.factorial(x) – возвращает факториал неотрицательного целого числа x. Отметим, что факториалы чисел 0 и 1 принимаются равными 1.
  • math.sqrt(x) – возвращает квадратный корень из неотрицательного числа x (см. пример №17).
  • math.log(x[, base]) – возвращает логарифм числа x по основанию base. Аргумент base можно опустить, тогда функция вернет натуральный логарифм числа x.
Код Результат pythonCodes
# Не забываем импортировать модуль.
import math
		 
# Получим 5040.
print('math.factorial(7) ->', math.factorial(7), end='\n\n')
		 
# Получим 7.0.
print('math.sqrt(49) ->', math.sqrt(49), end='\n\n')		
		 
# Возьмем логарифм числа 16 по основанию 2 (получим 4.0).
print('math.log(16, 2) ->', math.log(16, 2))		
# Возьмем натуральный логарифм числа 16 (т.е. по основанию e).
# Получим 2.772588722239781.
print('math.log(16) ->', math.log(16), end='\n\n')		
math.factorial(7) -> 5040

math.sqrt(49) -> 7.0

math.log(16, 2) -> 4.0
math.log(16) -> 2.772588722239781






		
			

Пример №17. Функции модуля math (часть 2).

  • math.sin(x) – возвращает синус угла x, значение которого задано в радианах. Отметим, что для косинуса угла функция имеет вид math.cos(x) (см. пример №18).
  • math.tan(x) – возвращает тангенс угла x, значение которого задано в радианах.
  • math.asin(x) – возвращает арксинус числа x. Для аркосинуса нужно использовать функцию math.acos(x), а для арктангенса – math.atan(x).
  • math.degrees(x) – преобразует угол x из радиан в градусы.
  • math.radians(x) – преобразует угол x из градусов в радианы.
Код Результат pythonCodes
# Не забываем импортировать модуль.
import math
		 
# Вспомним синусы углов.
# Получим 1.0.
print('math.sin(math.pi/2) ->', math.sin(math.pi/2))	
# Получим 0.0.
print('math.sin(0) ->', math.sin(0), end='\n\n')

# Найдем значения косинусов углов.
# Получим 6.123233995736766e-17.
print('math.cos(math.pi/2) ->', math.cos(math.pi/2))
# Получим 1.0.
print('math.cos(0) ->', math.cos(0), end='\n\n')

# Найдем значения тангенсов углов.
# Получим 1.633123935319537e+16.
print('math.tan(math.pi/2) ->', math.tan(math.pi/2))
# Получим 0.0.
print('math.tan(0) ->', math.tan(0), end='\n\n')	

# Найдем арксинус и аркосинус числа.
# Получим 0.5235987755982989.
print('math.asin(0.5) ->', math.asin(0.5))	
# Получим 1.0471975511965979.
print('math.acos(0.5) ->', math.acos(0.5), end='\n\n')

'''
Как видим, при значениях углов, в которых функции должны 
принимать ±inf, интерпретатор выдает либо очень большие, 
либо очень маленькие значения типа float, но не бесконечности. 
'''

# Перевод из радиан в градусы и обратно.
# Получим 90.0.
print('math.degrees(math.pi/2) ->', math.degrees(math.pi/2))	
# Получим 1.5707963267948966.
print('math.radians(90) ->', math.radians(90), end='\n\n')
math.sin(math.pi/2) -> 1.0
math.sin(0) -> 0.0

math.cos(math.pi/2) -> 6.123233995736766e-17
math.cos(0) -> 1.0

math.tan(math.pi/2) -> 1.633123935319537e+16
math.tan(0) -> 0.0

math.asin(0.5) -> 0.5235987755982989
math.acos(0.5) -> 1.0471975511965979

math.degrees(math.pi/2) -> 90.0
math.radians(90) -> 1.5707963267948966












		
			

Пример №18. Функции модуля math (часть 3).

Обязательно откройте модуль math в справочнике стандартной библиотеки и хотя бы бегло просмотрите весь список доступных функций. Кстати, не забываем, что получить его можно и программно через dir(math).

Модуль decimal в Python

Как мы уже знаем, числа типа float имеют весьма ограниченную точность. И хотя во многих случаях это не существенно, бывают ситуации, когда требуется повышенная точность вычислений, пусть даже и в ущерб производительности. В таких случаях нам на помощь приходит модуль decimal, который реализует неизменяемый числовой тип Decimal, представляющий числа с фиксированной точностью (см. пример №19).

Код Результат pythonCodes
# Импортируем числа типа Decimal.
from decimal import Decimal
		 
# Вычисляем выражение с числами типа Decimal.
res = Decimal('0.1')*Decimal('5') - Decimal(str(1.33))
# Выведет -0.83.
print(res)
-0.83




		
			

Пример №19. Создание чисел фиксированной точности.

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

В принципе, конструктору Decimal можно передавать не только строковые представления чисел, но и сами целые и вещественные числа, а также их кортежи. Однако преобразование вещественных чисел в числа фиксированной точности иногда может порождать большое число десятичных знаков.

Числа типа Decimal обычно используются в определенном контексте, который подразумевает использование установленной точности представления, методики округления (вверх, вниз и т.д.) и некоторых других настроек (см. пример №20).

Код Результат pythonCodes
# Импортируем модуль decimal.
import decimal
		 
# Разделим числа типа Decimal.
res_1 = decimal.Decimal(1)/decimal.Decimal(52)
# Выведет 0.01923076923076923076923076923.
print(res_1)
		 
# Сохраним текущую глобальную точность в переменной.
p = decimal.getcontext().prec
# Установим глобальную точность в 5 значащих цифр.
decimal.getcontext().prec = 5
			
# Разделим числа повторно.
res_2 = decimal.Decimal(1)/decimal.Decimal(52)
# Выведет округленный результат 0.019231.
print(res_2)	

# Восстановим исходную глобальную точность.
decimal.getcontext().prec = p	

# Повторяем деление.
res_3 = decimal.Decimal(1)/decimal.Decimal(52)
# Выведет 0.01923076923076923076923076923.
print(res_3)
0.01923076923076923076923076923
0.019231
0.01923076923076923076923076923




















		
			

Пример №20. Изменение точности представления чисел Decimal.

Все настройки среды для арифметических операций получаемые при помощи метода decimal.getcontext() доступны для изменения. Кроме того, для установки нового контекста можно использовать метод decimal.setcontext(). С этим и некоторыми другими методами для работы с контекстами вы можете ознакомиться в модуле decimal стандартной библиотеки (см. раздел «Numeric and Mathematical Modules»).

Отметим, что все арифметические операции, включая комбинированные, применимы и к числам Decimal. Однако модуль math для них неприменим. В тоже время некоторые функции, присутствующие в модуле math, реализованы как методы типа Decimal (см. пример №21).

Код Результат pythonCodes
# Импортируем класс Decimal модуля decimal.
from decimal import Decimal as dcl
# Импортируем метод getcontext() модуля decimal.
from decimal import getcontext

# Установим глобальную точность в 3 значащие цифры.
getcontext().prec = 3		     

# Возведение в степень.
res_1 = pow(dcl(16), dcl(0.5))
# Получим 4.00.
print('pow(dcl(16), dcl(0.5)) ->', res_1, end='\n\n')

# Найдем модуль числа.
res_2 = abs(dcl(-0.33))
# Получим 0.330.
print('abs(dcl(-0.33)) ->', res_2, end='\n\n')	

# Получим кортеж частного и остатка.
res_3 = divmod(dcl(45), dcl(7))
# Выведет кортеж (Decimal('6'), Decimal('3')).
print('divmod(dcl(45), dcl(7) ->', res_3, end='\n\n')		

# Найдем максимальное из трех чисел.
res_4 = max(dcl(45), dcl(7.5), dcl(23.8))
# Получим 45.
print('max(dcl(45), dcl(7.5), dcl(23.8) ->', res_4, end='\n\n')	

# Метод класса Decimal.
res_5 = dcl.sqrt(dcl(49))
# Получим 7.
print('dcl.sqrt(dcl(49)) ->', res_5, end='\n\n')
pow(dcl(16), dcl(0.5)) -> 4.00

abs(dcl(-0.33)) -> 0.330

divmod(dcl(45), dcl(7) -> (Decimal('6'), Decimal('3'))

max(dcl(45), dcl(7.5), dcl(23.8) -> 45

dcl.sqrt(dcl(49)) -> 7




















		
			

Пример №21. Операции с числами Decimal.

Модуль fractions в Python

Еще одним числовым типом в Python является тип Fraction. Он реализует объекты рациональных чисел, которые явным образом хранят числитель и знаменатель рациональной дроби (см. пример №22), что опять же при необходимости помогает избежать недостатков вещественных чисел.

Код Результат pythonCodes
# Импортируем числа типа Fraction.
from fractions import Fraction
		 
# Вычисляем выражение с числами типа Fraction.
res_1 = Fraction(1, 5) + Fraction(2, 5)
# Выведет 3/5.
print(res_1, end='\n\n')	

# Выведем тип (<class 'fractions.Fraction'>).
print('Тип res_1:', type(res_1), end='\n\n')
		 
# Создаем Fraction из типа float.
res_2 = Fraction(0.3) - Fraction('2.5')
# Выведет 50440315826549555/18014398509481984.
print(res_2)	
3/5

Тип res_1: <class 'fractions.Fraction'>

-39631676720860365/18014398509481984








		
			

Пример №22. Создание рациональных чисел.

В примере мы создали объекты рациональных чисел, указав в конструкторе Fraction в первом выражении числитель и знаменатель, а во втором передав ему вещественное число и строковое представление вещественного числа. Кроме того, рациональную дробь можно создать и конвертацией типа Decimal. В любом случае после создания объекты рациональных чисел могут участвовать в арифметических операциях, как обычные числа (см. пример №23).

Код Результат pythonCodes
# Импортируем числа типа Fraction.
from fractions import Fraction as frn
		 
# 1/3 в 4 степени.
res_1 = pow(frn(1, 3), 4)
# Получим 1/81.
print('pow(frn(1, 3), 4) ->', res_1, end='\n\n')

# Найдем модуль дроби.
res_2 = abs(frn(-1, 3))
# Получим 1/3.
print('abs(frn(-1, 3)) ->', res_2, end='\n\n')	

# Найдем максимальное из двух чисел.
res_4 = max(frn(2, 3), frn(4, 5))
# Получим 4/5.
print('max(frn(2, 3), frn(4, 5)) ->', res_4, end='\n\n')		

# Вычислим.
res_5 = frn(2, 3)*2 - frn(7.8)
# Получим -21842458192746905/3377699720527872.
print('frn(2, 3)*2 - 7.8 =', res_5, end='\n\n')
pow(frn(1, 3), 4) -> 1/81

abs(frn(-1, 3)) -> 1/3

max(frn(2, 3), frn(4, 5)) -> 4/5

frn(2, 3)*2 - 7.8 = -21842458192746905/3377699720527872













		
			

Пример №23. Операции с рациональными числами.

Познакомиться с рациональными числами и их методами более подробно вы можете в модуле fractions стандартной библиотеки Python (см. раздел «Numeric and Mathematical Modules»).

Краткие итоги параграфа

  • Числа в Python представлены тремя базовыми типами: целые числа int, числа с плавающей точкой float и комплексные числа complex. Также посредством стандартной библиотеки доступны два расширения в виде чисел с фиксированной точностью Decimal и рациональных чисел Fraction.
  • Для записи литералов целых чисел используется десятичная система счисления, однако разрешается записывать их в двоичной (например, 0b101), восьмеричной (например, -0o175) и шестнадцатеричной (например, 0xF5A) системах счисления. Для перевода целых чисел из одной системы счисления в другую предназначены встроенные функции bin(int_num), oct(int_num), hex(int_num), int(num_str, base=10).
  • Целые числа поддерживают длинную арифметику и могут быть сколь угодно большими. При этом следует помнить, что при обработке очень больших чисел приходится жертвовать скоростью их обработки.
  • Для записи литералов вещественных чисел используется привычный нам математический синтаксис, например, -2.57, 0.0, .28 (ноль перед точкой можно опускать). Также допустима запись вещественных чисел в экспоненциальной форме, например, 1.2345e2 (т.е. 1.2345*102) или -1.2345E-3 (т.е. -1.2345*10-3).
  • В обычных условиях точность вещественных чисел ограничивается максимум 17 значащими цифрами. Поэтому не стоит сравнивать их, доверяя точности до последнего знака.
  • Комплексные числа в Python хранят два вещественных числа: первое представляет собой действительную часть комплексного числа, а второе – мнимую. Например, -0.4+7j, 2-1.45j или 3.1j (нулевую действительную часть можно опускать).
  • В Python поддерживаются все известные нам со школы математические операции: сложение x + y, вычитание x - y, умножение x*y, деление x/y, деление с округлением вниз x//y, получение остатка от деления x%y, возведение в степень x**y. Стоит помнить, что некоторые операции не применимы к комплексным числам.
  • В дополнение к базовому оператору присваивания = в Python применяется целый ряд комбинированных операторов присваивания, которые объединяют операцию присваивания с другой операцией. Например, +=, -=, *=, /=, //=, %=, **=. Как видим, в общем случае выражение присваивания с комбини­рованным оператором x op= y можно считать сокращенной записью выражения x = x op y, где вместо op следует подставлять один из арифметических операторов.
  • Для сравнения чисел используются операторы <, >, <=, >=, == (равно), != (не равно).
  • Помимо стандартных арифметических операций имеется и ряд полезных встроенных функций для работы с числами: divmod(x, y) – возвращает кортеж (x//y, x%y), pow(x, y) – возвращает x в степени y, abs(x) – возвращает модуль числа x, round(x, n) – округляет число до n-го разряда после запятой, max(num_1, num_2, ..., num_n), min(num_1, num_2, ..., num_n) и sum(num_1, num_2, ..., num_n) – соответственно возвращают максимальное, минимальное и сумму из двух и более чисел.
  • Если встроенных функций недостаточно, можно воспользоваться расширением math стандартной библиотеки, которое обеспечивает доступ к широкому кругу математических функций и констант, которые определены стандартом языка C. Для комплексных чисел следует использовать модуль cmath.
  • Для случаев, когда требуется повышенная точность вычислений, в Python предусмотрены дополнительные типы числовых объектов: числа с фиксированной точностью Decimal, которые позволяют устанавливать требуемую точность вычислений, способ округления и некоторые другие параметры, а также рациональные числа Fraction, которые явным образом хранят числитель и знаменатель рациональной дроби. Оба модуля доступны в стандартной библиотеке Python в разделе «Numeric and Mathematical Modules».

Вопросы и задания для самоконтроля

1. Какие из представленых литералов чисел относятся к типу int, а какие к типу float: 3.4, 0, 5.0, 0.0, 123+4.1j, 795? Проверьте типы программно. Показать решение.

Ответ. Тип int: 0 и 795. Тип float: 3.4, 5.0, 0.0.

Решение Результат pythonCodes
# Выводим типы представленных литералов.
print('Тип 3.4:', type(3.4))
print('Тип 0:', type(0))
print('Тип 5.0:', type(5.0))
print('Тип 0.0:', type(0.0))	
print('Тип 123+4.1j:', type(123+4.1j))		
print('Тип 795:', type(795))
Тип 3.4: <class 'float'>
Тип 0: <class 'int'>
Тип 5.0: <class 'float'>
Тип 0.0: <class 'float'>
Тип 123+4.1j: <class 'complex'>
Тип 795: <class 'int'>
			

2. Определите системы счисления целых чисел 0x1101, 0b1101, 0o755, 0X755 и 755, записанные в исходном коде программы. Показать решение.

Ответ. Двоичная СС: 0b1101; восьмеричная СС: 0o755; десятичная СС: 755, шестнадцатеричная СС: 0x1101 и 0X755.

3. Какая операция над целыми числами никогда не дает в результате целое число? Показать решение.

Ответ. Результат деления целых чисел всегда имеет тип float, даже при делении без остатка. Например, 15/5 вернет 3.0, а не 3.

4. Как можно получить действительную и мнимую части комплексного числа? А как получить число, сопряженное к данному комплексному числу? Показать решение.

Ответ. Отдельные части комплексного числа доступны в виде атрибутов real и imag, а получить сопряженное данному комплексное число можно изменив знак мнимой части при помощи метода complex.conjugate().

5. Вычислите устно и программно значения выражений 2*(3 + 4) и 2*3 + 4. Объясните результаты. Показать решение.

Ответ. В Python как и в математике первыми выполняются действия в скобках, поэтому 2*(3 + 4) = 14. Если скобки отсутствуют, то первыми выполняются операции с более высоким приоритетом. А так как приоритет умножения выше приоритета сложения, то 2*3 + 4 = 10.

Решение Результат pythonCodes
# Выводим результаты вычислений.
print('2*(3 + 4) =', 2*(3 + 4))
print('2*3 + 4 =', 2*3 + 4)
2*(3 + 4) = 14
2*3 + 4 = 10
			

6. Каким будет тип результата вычисления выражения 7 - 3 + 2.0 и почему? Проверьте свой ответ программно. Показать решение.

Ответ. Результатом будет вещественное число, т.к. интерпретатор всегда преобразует числа к более сложному числовому типу, который встречается в выражении.

Решение Результат pythonCodes
# Найдем результат.
res = 7 - 3 + 2.0
# Проверим тип.
print('Тип результата:', type(res))
				
Тип результата: <class 'float'>

			

7. Каким будет остаток от деления числа 63 на число 5? Проверьте свой ответ программно. Показать решение.

Решение Результат pythonCodes
print('Остаток от деления 63 на 5:', 63%5)
Остаток от деления 63 на 5: 3

8. Как получить доступ к функциям модуля math? Показать решение.

Ответ. Нужно импортировать его при помощи инструкции import math.

9. Исправьте в коде пять ошибок (по одной в каждом блоке). Показать решение.

Условие pythonCodes
Импортируем модуль math.
import math

# Присвоим переменной вещественное число.
num_float = 375,44

# Округлим его до целых.
num_float = math.round(num_float)	

# Извлекаем корень из числа.
num_sqrt = sqrt(num_float)

# Выводим результат на экран.
input(num_sqrt)	
Условие Решение pythonCodes
Импортируем модуль math.
import math

# Присвоим переменной вещественное число.
num_float = 375,44

# Округлим его до целых.
num_float = math.round(num_float)	

# Извлекаем корень из числа.
num_sqrt = sqrt(num_float)

# Выводим результат на экран.
input(num_sqrt)	





# Оформляем комментарий правильно.
# Импортируем модуль math.
import math

# Исправляем на десятичную точку.
# Присвоим переменной вещественное число.
num_float = 375.44

# round - это встроенная функция.
# Округлим его до целых.
num_float = round(375.44)	

# sqrt расположена в math.
# Извлекаем корень из числа.
num_sqrt = math.sqrt(num_float)

# input - ввод, print - вывод.
# Выводим результат на экран.
print(num_sqrt)	

10. Дополнительные тесты по теме расположены в разделе «Числа и математические выражения» нашего сборника тестов.

11. Дополнительные упражнения и задачи по теме расположены в разделе «Числа и математические выражения» нашего сборника задач и упражнений.

Быстрый переход к другим страницам