我目前正在尝试制作一个程序,该程序以小提琴为乐谱,并将给定的音符转换成字符串上的一个位置,但我的问题是,当我询问某个键是尖的还是平的,以及该键的签名中有多少尖利或平调时,我发现我正在做一堆乏味的if / to语句,例如:
if keysig == sharp and signum == 2:
note['LE'] == 'D4'
note['SC'] == 'A4'
elif keysig == sharp and signum == 3:
note['LE'] == 'D5'
note['SC'] == 'G2'
您将看到,返回并在稍有更改的情况下进行另一次声明会变得非常烦人。我怎么才能解决这个问题?
对于那些不看乐谱的人,基本上我想说的是,这个算法会记录下用户的输入,比如A、G或D,然后把它们转换成小提琴手指板上的精确位置,这样你就不用手动搜索音符了。这个课程是为那些缺乏阅读乐谱经验的初学小提琴的人而设计的。
发布于 2016-03-20 17:28:13
你可以用字典:
transpositions = {
(sharp, 2): {'LE': 'D4', 'SC': 'A4'},
(sharp, 3): {'LE': 'D5', 'SC': 'G2'},
# etc.
}
note.update(transpositions.get((keysig, signum), {}))
这使用(keysig, signum)
的一个元组作为键,映射到特定的便笺转换。如果没有找到此类签名,则不会进行任何更新(使用空字典进行更新)。
https://stackoverflow.com/questions/36116988
复制相似问题