Приостановка азбуки Морзе Python

Я пытаюсь понять, как сделать паузу в моей программе. Метод encodeMesssage работает нормально и превращает каждую букву в соответствующую букву азбуки Морзе. Как только он достигает конца буквы, он поворачивается и дает буквенную паузу [lpause]. Затем, после того, как он закончит полное слово, он даст паузу в слове [wpause].

Мой второй метод должен превратить это сообщение в настоящие звуки с помощью модуля Windsound. Звуковые сигналы работают нормально, моя проблема в том, что я не могу заставить [lpause] и [wpause] работать.

morseCode = {'A':'.-','B':'-..','C':'-.-.','D':'-..','E':'.', 'F':'..-.','G':'--.','H':'....','I':'..','J':'.---', 'K':'-.-.','L':'.-..','M':'--','N':'-.','O':'---', 'P':'.--.','Q':'--.-','R':'.-.','S':'...','T':'-', 'U':'..-','V':'...-','W':'.--','X':'-..-','Y':'-.--', 'Z':'--..','1':'.----','2':'..---','3':'...--', '4':'....-','5':'.....','6':'-....','7':'--...', '8':'---..','9':'----.','0':'-----' }

def encodeMessage(m):
    message = m.upper().strip()
    encodedMessage =''
    isInWord = False

    for ch in message:
        if isInWord:
            if ch in morseCode:
                encodedMessage += '[lpause]'+ morseCode[ch]
            else:
                encodedMessage += '[wpause]'
                isInWord = False
       else: # not in word
            if ch in morseCode:
                encodedMessage +=  morseCode[ch]
                isInWord = True
            else:
                pass    # nothing to do
    return encodedMessage

def sendMoreCodedMessage(message):
    for ch in message:
        if ch == '.':
            winsound.Beep(200, 100)
        elif ch == '-':
            winsound.Beep(370, 100)
        else:
            time.sleep(1)
return None

вот пример вывода из encodeMessage ....[lpause].[lpause]-.--[wpause]-.[lpause]---[lpause].--[wpause]-.--[lpause ]--‌​-[lpause]..-[wpause].-[wpause]-..[lpause].-.[lpause]---[lpause].--[lpause]-.[wpause‌​se ]-.-.[lpause]---[lpause].--' –


person Crunch    schedule 25.01.2015    source источник
comment
Вы должны добавить эту дополнительную информацию в текст вопроса, а не в комментарий.   -  person manecosta    schedule 26.01.2015
comment
моя проблема в том, что я не могу заставить [lpause] и [wpause] работать. ‹-- Это очень расплывчатая информация. Можете ли вы подробно описать желаемое и действительное поведение?   -  person Carsten    schedule 26.01.2015
comment
Да, [lpause] должен сделать паузу, может быть, на 1 секунду, а затем цикл for должен продолжать выполняться. и - гудки. Затем он должен сделать паузу для слова [wpause] примерно на 3 секунды, чтобы различать 2. Однако на данный момент у меня есть lpause и wpause, работающие в одно и то же время в 1 секунду ... за исключением того, что они делают паузу для каждой отдельной буквы в фраза [лпауза].. Например ..-[ пауза л пауза п пауза а пауза у пауза с пауза е пауза. Я хочу, чтобы он брал [lpause] в целом и делал паузу, а не букву за буквой.. поэтому, если он читал [lpause] pause, он продолжался.   -  person Crunch    schedule 26.01.2015


Ответы (1)


Я думаю, что вам, вероятно, следует использовать односимвольные идентификаторы для ваших букв и словесных пауз, поскольку вы используете проверки для каждого символа, чтобы выяснить, какой звук должен быть издан. Я заменил идентификаторы паузы на «l» и «w» и соответствующим образом скорректировал вашу функцию SendMoreCodedMessage:

def encodeMessage(m):
    message = m.upper().strip()
    encodedMessage =''
    isInWord = False

    for ch in message:
        if isInWord:
            if ch in morseCode:
                encodedMessage += 'l'+ morseCode[ch]
            else:
                encodedMessage += 'w'
                isInWord = False
       else: # not in word
            if ch in morseCode:
                encodedMessage +=  morseCode[ch]
                isInWord = True
            else:
                pass    # nothing to do
    return encodedMessage

def sendMoreCodedMessage(message):
    for ch in message:
        if ch == '.':
            winsound.Beep(200, 100)
        elif ch == '-':
            winsound.Beep(370, 100)
        elif ch == 'w':
            time.sleep(3)
        elif ch == 'l':
            time.sleep(1)

    return None
person zehnpaard    schedule 25.01.2015
comment
Спасибо, это имеет больше смысла для меня. Мой инструктор включал длинные фразы, и они казались мне бессмысленными. Спасибо за помощь! - person Crunch; 26.01.2015