簡體   English   中英

使用循環和字典來解碼莫爾斯電碼程序

[英]using loops and dictionaries for decoding a morse code program

我正在為莫爾斯電碼編寫編碼和解碼函數。 編碼 function 正在工作,但解碼 function 多次給出相同的 output。 有人可以看到我如何將 for 循環修復為只打印一次。 順便說一句,它正在向后打印,因為我讓它像那樣打印

用於解碼 function 的樣本輸入

....  .  .-..  .-..  --- 

預計 output

HELLO

output

OLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEHOLLEH

我的代碼

MORSE_CODES={'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':'--..'}


def decode_Morse(my_msg): 
 
  string=" "
  
  for morsecode in my_msg:
    wordsplit=my_msg.split()

    for ch in wordsplit:
      if ch!="  ":
        string=string+ list(MORSE_CODES.keys())[list(MORSE_CODES.values()).index(ch)] 
      else:
        ch=" "
      
  return string

def main()
     my_msg_reverse_Morse_plain=decode_Morse(my_msg_reverse_Morse)
     print("Plaintext of the previous Morse Code:",

簡單的這個怎么樣?

MORSE_DECODES = {v:k for k,v in MORSE_CODES.items()}
def decode_Morse(my_msg):
    return "".join(MORSE_DECODES[ch] for ch in my_msg.split())

您自己的代碼使用了太多循環,試試這個:

def decode_Morse(my_msg): 
 
  string=""
  
  for morsecode in my_msg.split():
      string=string+list(MORSE_CODES.keys())[list(MORSE_CODES.values()).index(morsecode)]
      
  return string

如果您有多個單詞,那么您必須對字母和單詞使用不同的分隔符。 例如,字母空間,單詞 3,那么這將起作用:

def decode_Morse(my_msg): 
  string = ""
  for word in my_msg.split("   "):
      for ch in word.split():
          string=string+list(MORSE_CODES.keys())[list(MORSE_CODES.values()).index(ch)]
      string = string + " "
  return string

我認為最好定義一個反向字典,將莫爾斯電碼映射到字符,然后將 map 映射到代碼:

# Reversed dictionary: 
my_msg = '....  .  .-..  .-..  --- '
rkey = {v:k for k,v in MORSE_CODES.items()}
answer = "".join(map(lambda x: rkey[x], my_msg.split()))
print(answer)
# HELLO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM