使用全局变量使用莫尔斯电码列表对莫尔斯进行编码和解码

using global variables to encode and decode morse using a list of morsecode

基本上我必须使用两个函数制作莫尔斯电码编码器和解码器。我教授的模板(当然我已经在第一个函数和主函数中添加了代码)包含一个全局变量,我不知道如何使用它。此外,我收到当前代码的错误,因为该字母不知何故是一个整数而不是字符串字母。有人可以解释一下我如何在此程序中使用全局变量,因为我现在不担心这些错误吗?

MORSE_CODES=[' .- ',' -... ',' -.-. ',' -.. ',' . ',' ..-. ',' --. ',' .... ',' .. ',
' .--- ',' -.- ',' .-.. ',' -- ',' -. ',' --- ',' .--. ',' --.- ',' .-. ',
' ... ',' - ',' ..- ',' ...- ',' .-- ',' -..- ',' -.-- ',' --.. ']

ASCII_A=65 #global var




def encode_Morse(my_msg):
  my_msg_Morse=(my_msg.upper())
  my_msg_Morse=my_msg_Morse.replace(" ","   ")
 
  
  for letter in range(0, len(my_msg_Morse)):
    
    if ord(letter)>=65 and ord(letter)<=90:
      my_msg_Morse=my_msg_Morse.replace(letter, MORSE_CODES[letter])
    else:
      my_msg_Morse=my_msg_Morse.replace(letter,'*')
    my_msg_Morse=my_msg_Morse+" "+letter
  return my_msg_Morse

**#def decode_Morse(my_msg):
my_msg_Morse=my_msg.split("    ")
  string=""
  for word in my_msg_Morse:**


def main():
  my_msg=input("Enter your message: ")
  my_msg=my_msg.upper()
  print("Your message in plain text: ", my_msg)
  
  my_msg_Morse=encode_Morse(my_msg)
  print("Your message in Morse Code: ", my_msg_Morse)

问题

  1. for letter in range(0, len(my_msg_Morse)): 不循环消息中的字母
  2. my_msg_Morse=my_msg_Morse.replace(letter, MORSE_CODES[letter]) 导致用空格替换消息中的摩尔斯电码字母(即多字消息)
  3. 关于全局变量——如果你只需要使用它们的值(你在这里)就使用它们

代码

MORSE_CODES=[' .- ',' -... ',' -.-. ',' -.. ',' . ',' ..-. ',' --. ',' .... ',' .. ',
' .--- ',' -.- ',' .-.. ',' -- ',' -. ',' --- ',' .--. ',' --.- ',' .-. ',
' ... ',' - ',' ..- ',' ...- ',' .-- ',' -..- ',' -.-- ',' --.. ']

ASCII_A=65 #global var

def encode_Morse(my_msg):
  result = ''
  for letter in my_msg_Morse:
    if 65 <= ord(letter) <= 90:
      if not result:
          result = MORSE_CODES[ord(letter)-ASCII_A]          # first Morse character
      else:
          result += ' ' + MORSE_CODES[ord(letter)-ASCII_A] # space between Morse character
    else:
      result += '*' 
    
  return result

def decode_Morse(my_msg):
    for i, code in enumerate(MORSE_CODES):
        my_msg = my_msg.replace(code, chr(i+65))
  
    return my_msg.replace('*', ' ')

def decode_Morse_using_counter(my_msg):
    ' Version using counter rather than enumerate to track index '
    i = 0
    for code in MORSE_CODES:
        my_msg = my_msg.replace(code, chr(i+65))
        i += 1
  
    return my_msg.replace('*', ' ')

def main():
  my_msg = input("Enter your message: ")
  my_msg = my_msg.upper().replace(' ', '   ')  # upper case with 3 letters between words
  print("Your message in plain text: ", my_msg)
  encode_msg = encode_Morse(my_msg)
  print("Your message in Morse Code: ", encode_msg)
  print("Decoded Morse Code: ", decode_Morse(encode_msg))

main()

例子运行

Enter your message: This is a simple message
Your message in plain text:  THIS   IS   A   SIMPLE   MESSAGE
Your message in Morse Code:   -  ....  ..  ... *** ..  ... *** .- *** ...  ..  --  .--.  .-..  . *** --  .  ...  ...  .-  --.  . 
Decoded Morse Code:  THIS   IS   A   SIMPLE   MESSAGE

函数重写

使用列表理解和 Walrus 运算符,encode_Morse 函数可以简化为:

def encode_Morse(my_msg):
  my_msg_Morse = my_msg.upper()
  return ''.join(MORSE_CODES[p-ASCII_A] if 65 <=(p:=ord(letter))<= 90 else '*' for letter in my_msg_Morse)