繁体   English   中英

需要帮助制作莫尔斯电码到文本翻译器 | Python

[英]Need help making a Morse Code to Text Translator | 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")

任何帮助将不胜感激

我认为不需要2个单独的字典。 您可以使用一个 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")

Output:

莫尔斯转文字:

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
.... ..  . ...- . .-. -.-- --- -. .

我认为这是当你有两个直接相邻的空间时。 如果这应该意味着单词之间的空格,那么只需在mtt_dict中添加一个包含空格字符值的空字符串键,它应该可以工作。

然后我认为你应该移动检查 key 是否在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 告诉您,您必须构建一个编码器/解码器,您的问题是用字符明确区分单词。

如果字符和单词的合同分别是单的和双的,您可以以这种方式使用 split :

<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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM