需要帮助制作莫尔斯电码到文本转换器| Python吗

2024-05-23 16:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在制作莫尔斯电码到文本转换器时遇到了一些麻烦。我给莫尔斯发了短信,然而,当我试着让莫尔斯发短信时,却没有成功。我在网上查了一下,因为我是python新手,所以我不能真正理解它的大部分内容,所以我决定自己制作一个。只要没有空格,它就可以工作,但当有空格时,我会得到这个错误

Text to Morse or Morse to Text
Please type ttm for text to morse or type mtt for morse to text.
mtt
What would you like to have be translated to English?
.... ..  . ...- . .-. -.-- --- -. .
hiTraceback (most recent call last):
 File "main.py", line 61, in <module>
   print(mtt_dict[words], end="")
KeyError: ''

我翻译了“大家好”,但它并没有真正起作用

代码如下:

ttm_dict = { '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':'-----', ', ':'--..--', '.':'.-.-.-', 
                    '?':'..--..', '/':'-..-.', '-':'-....-', 
                    '(':'-.--.', ')':'-.--.-'}

mtt_dict = {'-.--.-':')' ,'.--.-':'('                    
 ,'-....-':'-' ,'.-..-':'/' ,'..--..':'?'                    
 ,'-.-.-.':'.' ,'--..--':' ,' ,'-----':'0'                    
 ,'.----':'9' ,'..---':'8' ,'...--':'7'                    
 ,'....-':'6' ,'.....':'5' ,'-....':'4'                    
 ,'--...':'3' ,'---..':'2' ,'----.':'1'                    
 ,'..--':'z' ,'--.-':'y' ,'-..-':'x'                    
 ,'--.':'w' ,'-...':'v' ,'-..':'u'                    
 ,'-':'t' ,'...':'s' ,'.-.':'r'                    
 ,'-.--':'q' ,'.--.':'p' ,'---':'o'                    
 ,'.-':'n' ,'--':'m' ,'..-.':'l'                    
 ,'-.-':'k' ,'---.':'j' ,'..':'i'                    
 ,'....':'h' ,'.--':'g' ,'.-..':'f'                    
 ,'.':'e' ,'..-':'d' ,'.-.-':'c'                    
 ,'...-':'b' ,'-.':'a'
}
question = input("Text to Morse or Morse to Text\nPlease type ttm for text to morse or type mtt for morse to text.\n")

#Text to Morse
if question == "ttm":
  encrypt_q = input("What would you like have be translated to Morse Code\n")
  encrypt = encrypt_q.lower()
  morse = "" 
  for letter in encrypt: 
    encrypt.lower()
    if letter != ' ': 

            morse += ttm_dict[letter] + ' '
    else: 

            morse += ' '
  print(morse) 
  #Morse to Text
elif question == "mtt":
  decrypt = input("What would you like to have be translated to English?\n")
  lenword = len(decrypt)
  words = ''
  for i in decrypt:
    if i != ' ':
        words=words+i
        if i not in mtt_dict:
            print('Data not formatted properly')
            break
    else:
        print(mtt_dict[words], end="")
        words = ''

    #If they are cannot read
else:
  print("Invalid option")

任何帮助都将不胜感激


Tags: ortotextinformorsetypedict
3条回答

我想是两个空格紧跟在一起的时候。如果这意味着单词之间有空格,那么只需在mtt_dict中添加一个包含空格字符值的空字符串键,就可以了

然后,我认为您应该将检查键是否位于mtt_dict的代码移动到else部分,然后再打印字符

  for i in decrypt:
    if i != ' ':
        words += i
    else:
        if words not in mtt_dict:
            print('Data not formatted properly')
            break
        print(mtt_dict[words], end="")
        words = ''

@Jolbas告诉我们,你必须建立一个编码器/解码器,你的问题是要将中的单词明确地按字符分开

如果合同的文字和文字分别为单份和双份 您可以通过以下方式使用拆分:

<phrase>.split('  ') for word # 2 spaces
<word>.split(' ') for characters # 1 space

点击:

因此,所有这些都可以使用嵌套列表理解来完成

[ [c for c in word] for word in phrase]

使用这个技巧,大部分问题都解决了

这是一个简洁的版本(并非所有人都喜欢嵌套理解…无论如何,它也不太糟糕)

代码

ttm_dict = { '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':'  -', ', ':' .. ', '.':'.-.-.-', '?':'.. ..', '/':'-..-.', '-':'-....-',
            '(':'-. .', ')':'-. .-'}

mtt_dict = {v:k for k,v in ttm_dict.items()}
question = input("Text to Morse or Morse to Text\nPlease type ttm for text to morse or type mtt for morse to text.\n")
if question == "ttm":
  encrypt_q = input("What would you like have be translated to Morse Code\n")
  # ' ' (single space, char separator
  # '  ' (double space) word separator
  morse = '  '.join([ ' '.join([ttm_dict[c] for c in word]) for word in encrypt_q.lower().split(' ')])
  print(morse)

elif question == "mtt":
  decrypt = input("What would you like to have be translated to English?\n")
  print(' '.join([''.join([mtt_dict[c] for c in word.split(' ')]) for word in decrypt.split('  ')]))

else:
  print("Invalid option")

结果如下所示:

Please type ttm for text to morse or type mtt for morse to text.
ttm
What would you like have be translated to Morse Code
ciao da glauco
-.-. .. .-  -  -.. .-   . .-.. .- ..- -.-.  -

Please type ttm for text to morse or type mtt for morse to text.
mtt
What would you like to have be translated to English?
-.-. .. .-  -  -.. .-   . .-.. .- ..- -.-.  -
ciao da glauco

我认为不需要2个速率dict。您可以通过一个dict.PFB代码实现转换:

MORSE_CODE_DICT = { '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':'  -', ', ':' .. ', '.':'.-.-.-',
                    '?':'.. ..', '/':'-..-.', '-':'-....-',
                    '(':'-. .', ')':'-. .-'
}
question = input("Text to Morse or Morse to Text\nPlease type 'ttm' for text to morse or type 'mtt' for morse to text.\n")

#Text to Morse
if question == "ttm":
    encrypt_q = input("What would you like have be translated to Morse Code\n")
    message = encrypt_q.upper()
    cipher = ''
    for letter in message:
        if letter != ' ':
            # Looks up the dictionary and adds the correspponding morse code along with a space to separate morse codes for different characters
            cipher += MORSE_CODE_DICT[letter] + ' '
        else:
            # 1 space indicates different characters and 2 indicates different words
            cipher += ' '
    print(cipher)
#Morse to Text
elif question == "mtt":
    message = input("What would you like to have be translated to English?\n")
    # extra space added at the end to access the last morse code
    message += ' '
    decipher = ''
    citext = ''
    for letter in message:
        # checks for space
        if (letter != ' '):
            # counter to keep track of space
            i = 0
            # storing morse code of a single character
            citext += letter
            # in case of space
        else:
            # if i = 1 that indicates a new character
            i += 1
            # if i = 2 that indicates a new word
            if i == 2:
                # adding space to separate words
                decipher += ' '
            else:
                # accessing the keys using their values (reverse of encryption)
                decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT.values()).index(citext)]
                citext = ''
    print(decipher)
else:
    print("Invalid option")

输出:

摩尔斯电文:

Text to Morse or Morse to Text
Please type 'ttm' for text to morse or type 'mtt' for morse to text.
mtt
What would you like to have be translated to English?
.... ..  . ...- . .-. -.   - -. .
HI EVERYONE

摩尔斯电文:

Text to Morse or Morse to Text
Please type 'ttm' for text to morse or type 'mtt' for morse to text.
ttm
What would you like have be translated to Morse Code
HI EVERYONE
.... ..  . ...- . .-. -.   - -. .

相关问题 更多 >