понедельник, 2 сентября 2019 г.

ЛМНты Python, 16 - 20

>>> Больше, чем гугол

Целое число в Python ограничено только памятью компьютера:

>>> from math import factorial
>>> factorial(100)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

А число класса float следует стандарту для хранения чисел с плавающей точкой двойной точности. Если преобразовать 100! в число float, а затем обратно в int, это будет уже другое число из-за потери значащих цифр при преобразовании в float:

>>> float(factorial(100))
9.332621544394415e+157
>>> int(float(factorial(100)))
93326215443944150965646704795953882578400970373184098831012889540582227238570431295066113089288327277825849664006524270554535976289719382852181865895959724032

Как видим, неизменными сохранились только старшие 16 десятичных знаков. Кстати, число 100! намного больше знаменитого числа гугол:

>>> factorial(100) > 10**100
True

четверг, 1 августа 2019 г.

ЛМНты Python, 11 - 15

>>> or else

Часто, когда полученное значение пусто, нужно использовать значение по умолчанию, чтобы программа продолжила работу. В этой ситуации можно использовать тернарный оператор:

name = user_name()
name = name if name else 'User'

Но можно написать более компактный код, используя оператор or:

name = user_name() or 'User'

Оператор or работает по короткой схеме (short-sircuit) и возвращает первое же значение, которое оценивается как True. Хотя выражение выглядит как логическое, его результатом является не булево значение!

понедельник, 1 июля 2019 г.

ЛМНты Python, 6 - 10

>>> is [not]

Недавно мы сравнивали id объектов, чтобы показать, что булевы значения True, полученные разными способами, представлены одним и тем же объектом:

>>> id(1 == 1) == id(True)
True
>>> id(bool(1)) == id(not False)
True

Чтобы проверить, что за двумя значениями или именами стоит один и тот же объект, в Python имеется оператор is (который, на самом деле, сравнивает id двух объектов).

суббота, 1 июня 2019 г.

ЛМНты Python, 1 - 5

>>> Выражения – это предложения

Выражения – полноценные предложения языка Python:

python
>>> 3.14
3.14
>>> [1,2] + [3]
[1, 2, 3]
>>> 'Привет, Python'
'Привет, Python'
>>> """Можно написать скрипт из одних выражений,
... и он выполнится без ошибок.
... """
'Можно написать скрипт из одних выражений,\nи он выполнится без ошибок.\n'
>>>

Документирующие строки Python (docstrings) – это выражения, состоящие из строкового литерала, а не особая конструкция, требующая специальной обработки.

пятница, 22 марта 2019 г.

Вероятность выиграть в Спортлото, или Введение в комбинаторику

Моя мама играла в Спортлото, когда я был школьником. Тогда было два вида билетов: 5 из 36 и 6 из 49. Надеюсь, вы видели фильм "Спортлото-82" и вам не нужно объяснять, как работает эта лотерея :)

Давайте посмотрим, какова вероятность выиграть максимальный приз, угадав все выпавшие номера в Спортлото 5 из 36.