2014-11-19 3 views
-2

Я пытаюсь узнать, какие заметки находятся на гитаре, поэтому я хочу, чтобы иметь возможность вводить то, на что настроена строка, и на какой лад я играю и что программа говорит мне, что это примечание, или введите примечание и верните все разные места, в которые я могу играть.Написание программы преобразует гитарные вкладки в заметки

До сих пор у меня есть программа, которая подсказывает мне, что примечание основано на строке и ладу, но я просто написал ее до конца, и она требует большой вычислительной мощности. Основываясь на том, что пользователь вводит для того, для чего настроена строка, он открывает функцию для этой строки, которая спрашивает, какой лад используется, затем, основываясь на том, что он работает с одним из многих elif, которые я индивидуально напечатал.

Например:

elif fret == '3': 
    print('That note is E') 

Я знаю, что есть способ сделать это с не так много кода, но я действительно новым для программирования четко и не может вполне подойти с логикой.

+1

Каноническая замена для многих 'elif's является ['dict'] (https://docs.python.org/2/tutorial/datastructures.html#dictionaries), например '{'3': 'E', ...}'. – jonrsharpe

+0

Как на что намекнули другие, вы пытаетесь решить «вопрос с данными» с помощью «ответа на программирование» ... Поскольку строки D и F-sharps не будут меняться в ближайшее время, вы можете предварительно вычислить ответы на _all_ возможные вопросы и сохранить их в структуре данных (пара bgporter 'dict's) или файл (возможно,' notes.json' или что-то еще). Тогда только _programming_ часть задания принимает пользовательские вопросы, просматривает предварительно рассчитанный ответ и выплевывает его. Намного легче. –

ответ

2

Построить пару dicts, что имена на карте примечание к Pitch номера и обратно, и вы можете построить простую функцию, чтобы сделать это, как:

NOTES = {"C" : 0, "C#" : 1, "D": 2, "D#" : 3, "E": 4, "F": 5, 
    "F#" : 6, "G": 7, "G#" : 8, "A": 9, "A#" : 10, "B": 11} 


NAMES = dict([(v, k) for (k, v) in NOTES.items()]) 


def GetNote(stringNote, fretNum): 
    baseNote = NOTES[stringNote] 
    fretNoteNum = (baseNote + fretNum) % 12 
    return NAMES[fretNoteNum] 

>>> GetNote("E", 0) 
'E' 
>>> GetNote("E", 1) 
'F' 
>>> GetNote("A", 7) 
'E' 
>>> GetNote("G", 6) 
'C#'