Я хочу взять обратную величину Fraction
в Python и сделать это на месте. Класс Fraction
не предоставляет метода для этого (насколько мне известно). Я попытался просто поменять местами числитель и знаменатель:
f = Fraction(2, 3)
f.numerator, f.denominator = f.denominator, f.numerator
Но это привело к AttributeError: can't set attribute
.
Я также использовал метод создания нового Fraction
:
f = Fraction(2, 3)
f = Fraction(f.denominator, f.numerator)
Что на самом деле работает, но создание нового объекта и удаление старого не кажется очень «питоническим», т.е. излишне сложным. Есть ли лучший способ получить ответ?
3 ответа
from fractions import Fraction
spam = Fraction(2, 3)
eggs = spam ** -1
print(repr(eggs))
Выход
Fraction(3, 2)
РЕДАКТИРОВАТЬ:
Как указано в комментариях @martineau 1 / spam
, также работает:
from fractions import Fraction
spam = Fraction(2, 3)
eggs = 1 / spam
print(repr(eggs))
Я думаю f**-1
это сработает
Fractions
неизменны, как и многие (все?) Числа Python, поэтому вы не можете изменять их атрибуты. Обходной путь - определить функцию, которая создает и возвращает новые экземпляры класса на основе атрибутов переданного ему. Ниже показаны два способа сделать это.
from fractions import Fraction
def reciprocal(f):
""" Return reciprocal of argument (an instance of Fraction). """
return Fraction(f.denominator, f.numerator)
# Alternative implementation.
reciprocal = lambda f: Fraction(f.denominator, f.numerator)
f = Fraction(2, 3)
print(f) # -> 2/3
print(repr(f)) # -> Fraction(2, 3)
r = reciprocal(f)
print(r) # -> 3/2
print(repr(r)) # -> Fraction(3, 2)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.