1

我试图弄清楚如何让我的程序暂停。该方法encodeMesssage运行良好,并将每个字母转换为相应的摩尔斯电码字母。一旦它到达一个字母的结尾,它就会转动一个字母暂停[lpause]。然后在它完成一个完整的单词后,它会给出一个单词 pause [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]-.[wpau‌​se] -.-.[lpause]---[lpause].--' –

4

1 回答 1

0

我认为您可能应该为您的字母和单词停顿使用一个字符的标识符,因为您使用每个字符的检查来确定要发出什么声音。我已将暂停标识符替换为“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
于 2015-01-25T22:45:47.963 回答