python - 如何循环一个乏味​​的 if 语句

标签 python if-statement translate music-notation

我目前正在尝试制作一个程序,该程序采用 fiddle 乐谱并将给定的音符转换为弦乐上的位置,但我的问题是当我询问琴键是升调还是降调,以及有多少次升调时或降号在调号中 我发现我在做一堆乏味的 if/then 语句,例如:

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,并将它们转换为 fiddle 指板上的确切位置,这样您就不必手动搜索音符.该程序适用于缺乏乐谱阅读经验的 fiddle 初学者。

最佳答案

你可以使用字典:

transpositions = {
    (sharp, 2): {'LE': 'D4', 'SC': 'A4'},
    (sharp, 3): {'LE': 'D5', 'SC': 'G2'},
    # etc.
}

note.update(transpositions.get((keysig, signum), {}))

这使用 (keysig, signum) 的元组作为键,映射到特定的音符转换。如果没有找到这样的签名,则不进行更新(使用空字典更新)。

关于python - 如何循环一个乏味​​的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116988/

相关文章:

python - 在多个内核上运行 python 线程

javascript - 生成具有易于区分的类型/组的实体 ID

python - 如何在 Python3 上安装 Bob?

if-statement - 需要重构 Arrow 反模式的想法

java - 如果弹出基于 jTable 对象的对话框,如何放置条件?

Java arraylist 添加数量

java - Microsoft 翻译 API Java IncludeMultipleMTAlternatives

使用 Microsoft Translate API 将文本从一种语言转换为另一种语言的 Python 代码

ios - 在iOS中解析Google翻译JSON

python - 给定日期后的 DatetimeField 过滤器