Comments 18
Спасибо, за интересный материал. Я бы еще добавил абзац про работу с натуальными дробями с помощью модуля fractions для полноты картины.
«Вот — интересный метод .as_integer_ratio()»
Этот метод -- натуральная и ненужная ерунда. У меня, когда я его проверял, кажется, не было ни одного совпадения, когда я создавал вещественное число на основе дроби двух целых чисел, а потом пытался провести обратную операцию методом 'as_integer_ratio'. Пришлось писать собственную функцию на основе классического бесконечного алгоритма представления вещественного числа дробью из целых чисел.
Если под "создавал вещественное число" имеется ввиду float, то он по своему представлению может иметь в знаменателе только степени двойки. Соответственно все дроби с другим знаменателем будут представлены с округлением, с потерей точности. И любой алгоритм подбора дроби целых чисел из float, который даст в знаменателе не степень двойки - тоже округление и потеря точности от значения float.
Круто, мне понравилось. Узнал немного нового
Если обойтись без скобок — при попытке вызова метода на целочисленном литерале будет выдана ошибка SyntaxError.
>>> 255 .to_bytes(2, 'big')
b'\x00\xff'
Например, у дроби 13 нет конечного десятичного представления (после десятичной точки идёт бесконечное множество троек). А у дроби 110 нет конечного представления в виде двоичной дроби.
Наверное, этот нумерованный список дробей тоже не вошёл в статью...
числа с плавающей точкой, представляющие суммы в некоей валюте
ОМГ, никогда не храните суммы в валюте в числах с плавающей точкой
Кроме float("inf"), также есть float("-inf").
Еще в двух местах знак деления потерялся: "у дроби 13" -> "у дроби 1/3", и дальше аналогично про 1/10.
Один из способов представления числа 1729 в виде суммы двух кубов — это 13 + 123. Можете отыскать второй способ?
print([(x,y) for x in range(13) for y in range(x) if x*x*x+y*y*y==1729])
[(10, 9), (12, 1)]
Интересно, как ведёт себя функция равная минимальному числу, разлагающемуся в сумму 2-х кубовразными способами. Знаем, что
так, а что нового-то? всё это более подробно, в более сжатой и простой форме есть в документации.
>>> # Объекты Fractions - это не наследники Rational
>>> from fractions import Fraction
>>> isinstance(Fraction(1, 2), numbers.Rational)
True
Наверное, имелось ввиду противоположное — "являются наследниками Rational"?
Метод from_bytes() штука, конечно, интересная (есть, например, возможность менять порядок байт), но питон достаточно умен и запись n = 0xff тоже воспринимает и запишет в n число 255, операция обратного перевода также легко реализуется
n = 0xff
print(n) # 255
s = hex(255)
print(s) # '0xff'
3 особенности чисел в Python, о которых вы, возможно, не знали