因为计算调式很麻烦,自己有时候又懒得想,所以想用python来实现自动计算调式音阶和判断级数
先是通过if控制流的知识写了个脚本,这个可以基本判断级数(不带升降号),比如E大调的F就是2级(虽然实际是F#)。
Key = {'C':1, 'D':2, 'E':3, 'F':4, 'G':5, 'A':6, 'B':7}
def keyCount(key_f, key_l):
try:
kf_v = Key[key_f]
kl_v = Key[key_l]
except KeyError:
return f'输入的调式"{key_f}"或音名"{key_l}"不在字典中'
if kf_v > kl_v:
result = kl_v + 7 - kf_v +1
elif kf_v < kl_v:
result = kl_v - kf_v +1
elif kf_v == kl_v:
result = key_f
return result
key_f = input('请输入调式').upper()
key_l = input('请输入音名').upper()
result = keyCount(key_f,key_l)
print(f'{key_l}在调式{key_f}里是{result}级')
后面又想了想,我是不是可以写一个大调和小调的字典
natural_major = ['C':1, 'C#':1.5,'D':2,'D#':2.5, 'E':3, 'F':4, 'F#':4.5,'G':5, 'G#':5.5,'A':6,'A#':6.5, 'B':7]
natural_miner = [....pass]
然后将大调音阶的品排列方式“全全半全全全半”与小调“全半全全半全全”写成一个方法,然后这个字典通过这个方法就可以得到大小调的音阶?
思考中...(持续更新)