Python:避免分数简化
我正在用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
没错:你可以为它创建一个自定义的类。
音乐的拍号并不是简单的分数,所以用数学类来表示它们并不合适。