Python: избегая упрощения дроби

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

>>> from fractions import Fraction
>>> x = Fraction(4, 4)
>>> x
Fraction(1, 1)

Однако с музыкальной точки зрения важно, чтобы 4/4 оставалось 4/4, даже если оно равно 1. Есть ли какой-нибудь встроенный способ избежать такого поведения?

Спасибо!

3 ответа

Да, сделать для него специальный класс.

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

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

Нет, нет - деление по GCD встроено в операции класса Fraction. Другими причинами, по которым вы, возможно, захотите создать собственный класс, по крайней мере, если вы работаете с музыкальной нотацией, являются:

  • чтобы иметь возможность обрабатывать замены общего времени (C) и сокращения времени (косая черта) на 4/4 и 2/4 - или даже лучше, чтобы сделать это необязательным
  • иметь возможность представлять составные временные подписи (например, 2+3+2/8)
Другие вопросы по тегам