[英]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.