Python:避免分数简化

4 投票
3 回答
1083 浏览
提问于 2025-04-15 22:52

我正在用Python开发一个音乐应用,想用分数模块来处理乐谱中的拍号等问题。我的困扰是,分数会被简化,比如:

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

但是从音乐的角度来看,4/4这个拍号应该保持为4/4,尽管它的值是1。有没有什么内置的方法可以避免这种情况呢?

谢谢!

3 个回答

0

不,确实没有这样的功能——在分数类的操作中,已经内置了通过最大公约数(GCD)进行除法的功能。如果你在处理音乐符号时,可能还有其他原因需要创建一个自定义类,至少包括:

  • 能够处理常见的四分之四拍(C)和切分四拍(斜杠C)替代,或者更好的是,让这个功能可选
  • 能够表示复合拍号(例如 2+3+2/8)
3

你应该使用其他的数据结构,而不是Fraction。最简单的方式就是用一个普通的元组,不过你也可以自己创建一个类。如果你需要进行计算,就对构成时间签名的每个整数进行计算。

9

没错:你可以为它创建一个自定义的类。

音乐的拍号并不是简单的分数,所以用数学类来表示它们并不合适。

撰写回答