2016-03-20 9 views
2

私は現在、バイオリンのために楽譜を取り、指定された音符を文字列上の位置に変換するプログラムを作りようとしていますが、私の問題は、退屈なif文をループする方法

if keysig == sharp and signum == 2: 
    note['LE'] == 'D4' 
    note['SC'] == 'A4' 

elif keysig == sharp and signum == 3: 
    note['LE'] == 'D5' 
    note['SC'] == 'G2' 

あなたはそれがに超迷惑になっていることがわかります。私のような/ then文があれば、私は退屈なの束を作っていることがわかり、そのキーの署名にシャープやフラット、そしてどのように多くのシャープまたはフラットですわずかな変更を加えて別のステートメントを作成します。これをどうすれば解決できますか?

楽譜を読んでいない人のために: 基本的に私が言うことは、このアルゴリズムはA、G、Dなどのユーザーの入力を正確な位置に変換することですヴァイオリンの指板の上に置いてください。手動でノートを検索する必要はありません。このプログラムは、読書の経験が不足している初心者のためのものです。

+1

私たちは、楽譜を読んでいない人のために、ここでアルゴリズムを説明できますか? – Mureinik

+2

'{(シャープ、3):{'LE': 'D5'、 'SC': 'G2'}} [keysig、signum]' – jonrsharpe

答えて

10

あなたは辞書を使用することができます。

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

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

これは、特定のノート転位の鍵、マッピングとして(keysig, signum)のタプルを使用しています。そのような署名が見つからない場合、更新は行われません(空の辞書で更新)。

+0

を試してください。さらなる使用のためにそれを念頭に置いておきます。 :) – pixis

関連する問題