2010-05-19 21 views
3

Je travaille sur une application de musique 'en Python et je voudrais utiliser le module fractions pour gérer les signatures temporelles entre autres choses. Mon problème est que les fractions se simplifiée, à savoir:Python: éviter la simplification de la fraction

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

Cependant, il est important d'un point de vue musical que 4/4 4/4 séjours même si elle est égale à 1. Est-il possible intégré pour éviter ce comportement?

Merci!

Répondre

3

Vous devez utiliser une structure de données autre que Fraction. Juste un simple tuple serait le plus simple, mais vous pourriez aussi faire votre propre classe. Si vous avez besoin de faire des calculs, faites-les sur les entiers individuels qui constituent la signature temporelle.

9

Oui: créez une classe personnalisée pour cela.

Les signatures temporelles musicales ne sont pas des fractions, il n'est donc pas logique de les représenter avec une classe mathématique.

+0

Pas de problème, je pensais que ce était mieux de demander avant de réinventer la roue. Et en effet, ils ne sont pas des fractions, mais il aurait simplifié les choses pour les traiter comme tels dans d'autres parties de l'application. –

+0

Ne même pas inventer une classe pour cela. Utilisez un 'namedtuple'. –

+2

En fait, je le ferais ... mais c'est une question de théorie musicale. Ce n'est pas seulement une paire de chiffres, il y a des opérations raisonnables que vous pourriez vouloir faire sur une signature de temps; ajoutez ou enlevez des battements en prenant par exemple 3/4 à 4/4, faites un 3 contre 2 en prenant 4/4 à 12/8, divisez la barre en prenant 5/4 à 3/4 et 2/4, et plusieurs autres. Il est logique d'avoir des méthodes pour ceux-ci. –

0

Non, il n'y a pas – la division par le GCD est intégrée dans les opérations de la classe de fraction. D'autres raisons que vous auriez probablement eu envie de créer une classe personnalisée de toute façon, au moins si vous travaillez avec la notation musicale, sont:

  • pour pouvoir gérer le temps commun (C) et le temps coupé (slash-C) substitutions pour 4/4 et 2/4 – ou mieux encore, de faire que
  • en option
  • pour être en mesure de représenter les signatures de temps composés (par exemple 2 + 3 + 2/8)