我在python中做了一个morse_code解码器,作为一个赋值,如下所示。它处理morse_code中可用的所有字符。虽然我的方法奏效了,但它似乎是一种非常业余的在python中做事的方法。发送莫尔斯码的格式:
”分隔
在下面的代码中,我创建了一个空列表,其中包含一个列表,其中每个项代表一个morse代码字符,然后替换为实际字符。最后,将列表中的列表连接起来,并将结果列表连接起来,以便将其作为字符串值返回。我使用列表的原因是字符串在python中是不可变的。我无法创建空字符串,进入for循环,并将其追加到字符串中。我也不能在for循环中创建一个新的字符串,因为变量在离开for循环作用域时会丢失。
我已经尝试过先用替换方法来完成它,但是我遇到了麻烦,因为替换没有解码morse代码所需的灵活性。
decode_morse(morse_code):
morse_code_q = " "+morse_code+" "
morse_code_r = morse_code_q.replace(" .- ", ' A ').replace(" -... ", ' B ').replace(' -.-. ', ' C ').replace(' -.. ', 'D ').replace(' . ', ' E ').replace(' ..-. ', ' F ').replace(' --. ', ' G ').replace(' .... ', ' H ').replace(' .. ', ' I ').replace(' .--- ', ' J ').replace(' .-. ', ' K ').replace(' .-.. ', ' L ').replace(' -- ', ' M ').replace(' -. ', ' N ').replace(' --- ', ' O ').replace(' .--. ', ' P ').replace(' --.- ', ' Q ').replace(' .-. ', ' R ').replace(' ... ', ' S ').replace(' - ', ' T ').replace(' ..- ', ' U ').replace(' ...- ', ' V ').replace(' .--', ' W ').replace(' -..- ', ' X ').replace(' -.-- ', ' Y ').replace(' --.. ', ' Z ').replace(' ----- ', '0').replace(' .---- ', '1').replace(' ..--- ', '2').replace(' ...-- ', '3').replace(' ....- ', '4').replace(' ..... ', '5').replace(' -.... ', '6').replace(' --... ', '7').replace(' ---.. ', '8').replace(' ----. ', '9').replace(' .-.-.- ', '.').replace(' --..-- ', ',').replace(' ..--.. ', '?')
return morse_code_r.strip()
print(decode_morse('.... . -.-- .--- ..- -.. .'))它返回HEY,而不是HEY。忽略这些空间不会有多大好处。替换字符后,下一个替换函数将找不到字符,因为它需要空格来确定字符的开始和结束(否则.因为他会下决心的,因为。= E)
所以,这是我非常丑陋但工作的方法:
def decode_morse(morse_code):
result=[]
words = morse_code.split(" ")
for j in range(0,len(words)):
reverser = words[j].split(" ")
for i in range(0,len(reverser)):
if reverser[i]==".-":
reverser[i]='A'
elif reverser[i]=="-...":
reverser[i]='B'
elif reverser[i]=="-.-.":
reverser[i]='C'
elif reverser[i]=="-..":
reverser[i]='D'
elif reverser[i]==".":
reverser[i]='E'
elif reverser[i]=="..-.":
reverser[i]='F'
elif reverser[i]=="--.":
reverser[i]='G'
elif reverser[i]=="....":
reverser[i]='H'
elif reverser[i]=="..":
reverser[i]='I'
elif reverser[i]==".---":
reverser[i]='J'
elif reverser[i]==".-.":
reverser[i]='K'
elif reverser[i]==".-..":
reverser[i]='L'
elif reverser[i]=="--":
reverser[i]='M'
elif reverser[i]=="-.":
reverser[i]='N'
elif reverser[i]=="---":
reverser[i]='O'
elif reverser[i]==".--.":
reverser[i]='P'
elif reverser[i]=="--.-":
reverser[i]='Q'
elif reverser[i]==".-.":
reverser[i]='R'
elif reverser[i]=="...":
reverser[i]='S'
elif reverser[i]=="-":
reverser[i]='T'
elif reverser[i]=="..-":
reverser[i]='U'
elif reverser[i]=="...-":
reverser[i]='V'
elif reverser[i]==".--":
reverser[i]='W'
elif reverser[i]=="-..-":
reverser[i]='X'
elif reverser[i]=="-.--":
reverser[i]='Y'
elif reverser[i]=="--..":
reverser[i]='Z'
elif reverser[i]=="-----":
reverser[i]='0'
elif reverser[i]==".----":
reverser[i]='1'
elif reverser[i]=="..---":
reverser[i]='2'
elif reverser[i]=="...--":
reverser[i]='3'
elif reverser[i]=="....-":
reverser[i]='4'
elif reverser[i]==".....":
reverser[i]='5'
elif reverser[i]=="-....":
reverser[i]='6'
elif reverser[i]=="--...":
reverser[i]='7'
elif reverser[i]=="---..":
reverser[i]='8'
elif reverser[i]=="----.":
reverser[i]='9'
elif reverser[i]==".-.-.-":
reverser[i]='.'
elif reverser[i]=="--..--":
reverser[i]=','
elif reverser[i]=="..--..":
reverser[i]='?'
result.append(reverser)
final =[]
for h in range(0,len(result)):
final.append("".join(result[h])+" ")
return "".join(final)
print(decode_morse('.... . -.-- .--- ..- -.. .')) #returns HEY JUDE有人想要解决这个问题吗?对于本练习,我们不允许使用regexp库。提前谢谢。
发布于 2022-02-13 11:02:29
只要有可能,始终将代码转换为数据。
# Full table at bottom of answer.
encode_table = {
"A": ".-",
"B": "-...",
"C": "-.-.",
...
" ": "SPACE", # Special "sentinel" value to simplify decoder.
}
# Reverse of encode_table.
decode_table = {v: k for k, v in encode_table.items()}现在,简单地:
def encode(s):
enc = " ".join(encode_table[x] for x in s)
return enc.replace(" SPACE ", " ")
def decode(encoded):
symbols = encoded.replace(" ", " SPACE ").split(" ")
return "".join(decode_table[x] for x in symbols)测试:
>>> encode("HEY JUDE")
'.... . -.-- .--- ..- -.. .'
>>> decode(".... . -.-- .--- ..- -.. .")
'HEY JUDE'全表:
encode_table = {
"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": "--..",
"0": "-----",
"1": ".----",
"2": "..---",
"3": "...--",
"4": "....-",
"5": ".....",
"6": "-....",
"7": "--...",
"8": "---..",
"9": "----.",
".": ".-.-.-",
",": "--..--",
"?": "..--..",
" ": "SPACE",
}https://stackoverflow.com/questions/71099952
复制相似问题