Python — конвертер азбуки Морзе и назад

Казалось бы, 21 век, оптоволокно, 3/4G и прочие прелести прогресса —
какая азбука Морзе, и уж тем более конвертер азбуки Морзе в текст, и из текста в азбуку Морзе, да еще на Python? Но нет, мы против спокойствия 🙂

Совсем недавно рассказывал своему сыну о истории связи, и вспомнил азбуку Морзе. Учитывая, что он с дочкой ходит на курсы по роботехнике, а так же недавний разговор быстренько накропал конвертатор (в планах сделать с детьми на Arduino аналог радиостанции на азбуке Морзе).

Устроен он крайне просто: if — elif, причем сконвертированный код складывается в список, который после окончания обработки выводится в полном виде.

  1. def morse_text():
  2.     print('q - выход')
  3.     morse_table = []
  4.     while True:
  5.         string = str(input('Введите код Морзе (1 символ): '))
  6.         if string == ('q'):
  7.             break
  8.         elif string == '.-':
  9.             morse_code = ('а')
  10.             print(morse_code)
  11.             morse_table.append(morse_code)
  12.         elif string == '.......':
  13.             morse_code = (' ')
  14.             print(morse_code)
  15.             morse_table.append(morse_code)
  16.         elif string == '-...':
  17.             morse_code = ('б')
  18.             print(morse_code)
  19.             morse_table.append(morse_code)
  20.         elif string == '.--':
  21.             morse_code = ('в')
  22.             print(morse_code)
  23.             morse_table.append(morse_code)
  24.         elif string == '--.':
  25.             morse_code = ('г')
  26.             print(morse_code)
  27.             morse_table.append(morse_code)
  28.         elif string == '-..':
  29.             morse_code = ('д')
  30.             print(morse_code)
  31.             morse_table.append(morse_code)
  32.         elif string == '.':
  33.             morse_code = ('е')
  34.             print(morse_code)
  35.             morse_table.append(morse_code)
  36.         elif string == '...-':
  37.             morse_code = ('ж')
  38.             print(morse_code)
  39.             morse_table.append(morse_code)
  40.         elif string == '--..•':
  41.             morse_code = ('з')
  42.             print(morse_code)
  43.             morse_table.append(morse_code)
  44.         elif string == '..':
  45.             morse_code = ('и')
  46.             print(morse_code)
  47.             morse_table.append(morse_code)
  48.         elif string == '-.-':
  49.             morse_code = ('к')
  50.             print(morse_code)
  51.             morse_table.append(morse_code)
  52.         elif string == '.-..':
  53.             morse_code = ('л')
  54.             print(morse_code)
  55.             morse_table.append(morse_code)
  56.         elif string == '--':
  57.             morse_code = ('м')
  58.             print(morse_code)
  59.             morse_table.append(morse_code)
  60.         elif string == '-.':
  61.             morse_code = ('н')
  62.             print(morse_code)
  63.             morse_table.append(morse_code)
  64.         elif string == '---':
  65.             morse_code = ('о')
  66.             print(morse_code)
  67.             morse_table.append(morse_code)
  68.         elif string == '.--.':
  69.             morse_code = ('п')
  70.             print(morse_code)
  71.             morse_table.append(morse_code)
  72.         elif string == '.-.':
  73.             morse_code = ('р')
  74.             print(morse_code)
  75.             morse_table.append(morse_code)
  76.         elif string == '...':
  77.             morse_code = ('с')
  78.             print(morse_code)
  79.             morse_table.append(morse_code)
  80.         elif string == '-':
  81.             morse_code = ('т')
  82.             print(morse_code)
  83.             morse_table.append(morse_code)
  84.         elif string == '..-':
  85.             morse_code = ('у')
  86.             print(morse_code)
  87.             morse_table.append(morse_code)
  88.         elif string == '..-.':
  89.             morse_code = ('ф')
  90.             print(morse_code)
  91.             morse_table.append(morse_code)
  92.         elif string == '....':
  93.             morse_code = ('х')
  94.             print(morse_code)
  95.             morse_table.append(morse_code)
  96.         elif string == '-.-.':
  97.             morse_code = ('ц')
  98.             print(morse_code)
  99.             morse_table.append(morse_code)
  100.         elif string == '---':
  101.             morse_code = ('ц')
  102.             print(morse_code)
  103.             morse_table.append(morse_code)
  104.         elif string == '----':
  105.             morse_code = ('ш')
  106.             print(morse_code)
  107.             morse_table.append(morse_code)
  108.         elif string == '--.-':
  109.             morse_code = ('щ')
  110.             print(morse_code)
  111.             morse_table.append(morse_code)
  112.         elif string == '--.--':
  113.             morse_code = ('ъ')
  114.             print(morse_code)
  115.             morse_table.append(morse_code)
  116.         elif string == '-.--':
  117.             morse_code = ('ы')
  118.             print(morse_code)
  119.             morse_table.append(morse_code)
  120.         elif string == '..--':
  121.             morse_code = ('ю')
  122.             print(morse_code)
  123.             morse_table.append(morse_code)
  124.         elif string == '.-.-':
  125.             morse_code = ('я')
  126.             print(morse_code)
  127.             morse_table.append(morse_code)
  128.         elif string == '.----':
  129.             morse_code = ('1')
  130.             print(morse_code)
  131.             morse_table.append(morse_code)
  132.         elif string == '..---':
  133.             morse_code = ('2')
  134.             print(morse_code)
  135.             morse_table.append(morse_code)
  136.         elif string == '...--':
  137.             morse_code = ('3')
  138.             print(morse_code)
  139.             morse_table.append(morse_code)
  140.         elif string == '....-':
  141.             morse_code = ('5')
  142.             print(morse_code)
  143.             morse_table.append(morse_code)
  144.         elif string == '.....':
  145.             morse_code = ('5')
  146.             print(morse_code)
  147.             morse_table.append(morse_code)
  148.         elif string == '-....':
  149.             morse_code = ('6')
  150.             print(morse_code)
  151.             morse_table.append(morse_code)
  152.         elif string == '--...':
  153.             morse_code = ('7')
  154.             print(morse_code)
  155.             morse_table.append(morse_code)
  156.         elif string == '---..•':
  157.             morse_code = ('8')
  158.             print(morse_code)
  159.             morse_table.append(morse_code)
  160.         elif string == '----.':
  161.             morse_code = ('9')
  162.             print(morse_code)
  163.             morse_table.append(morse_code)
  164.         elif string == '-----':
  165.             morse_code = ('0')
  166.             print(morse_code)
  167.             morse_table.append(morse_code)
  168.         elif string == '......':
  169.             morse_code = ('. ')
  170.             print(morse_code)
  171.             morse_table.append(morse_code)
  172.         elif string == '.-.-.-':
  173.             morse_code = (', ')
  174.             print(morse_code)
  175.             morse_table.append(morse_code)
  176.         elif string == '---...':
  177.             morse_code = (':')
  178.             print(morse_code)
  179.             morse_table.append(morse_code)
  180.         elif string == '-.-.-':
  181.             morse_code = (';')
  182.             print(morse_code)
  183.             morse_table.append(morse_code)
  184.         elif string == '-.--.-':
  185.             morse_code = ('(')
  186.             print(morse_code)
  187.             morse_table.append(morse_code)
  188.         elif string == '-.--.-':
  189.             morse_code = (')')
  190.             print(morse_code)
  191.             morse_table.append(morse_code)
  192.         elif string == '.-..-.':
  193.             morse_code = ('"')
  194.             print(morse_code)
  195.             morse_table.append(morse_code)
  196.         elif string == '..--..':
  197.             morse_code = ('?')
  198.             print(morse_code)
  199.             morse_table.append(morse_code)
  200.         elif string == '--..--':
  201.             morse_code = ('!')
  202.             print(morse_code)
  203.             morse_table.append(morse_code)
  204.         elif string == '.--.-.':
  205.             morse_code = ('@')
  206.             print(morse_code)
  207.             morse_table.append(morse_code)
  208.         elif string == '-....-':
  209.             morse_code = ('-')
  210.             print(morse_code)
  211.             morse_table.append(morse_code)
  212.         elif string == '.......':
  213.             morse_code = (' ')
  214.             print(morse_code)
  215.             morse_table.append(morse_code)
  216.  
  217.     print(morse_table)
  218.     morse_table = ''.join(morse_table)
  219.     print('Единой строкой: ', morse_table)
  220.  
  221. def text_morse():
  222.     text = []
  223.     text = str(input('Введите текст: ')).lower()
  224.     print(text)
  225.     morse = []
  226.     for string in text:
  227.         if string == 'а':
  228.             morse_code = ('• —')
  229.             print(morse_code)
  230.             morse.append(morse_code)
  231.         elif string == 'б':
  232.             morse_code = ('— • • •')
  233.             print('— • • •')
  234.             morse.append(morse_code)
  235.         elif string == 'в':
  236.             morse_code = ('• — —')
  237.             print('• — —')
  238.             morse.append(morse_code)
  239.         elif string == 'г':
  240.             morse_code = ('— — •')
  241.             print('— — •')
  242.             morse.append(morse_code)
  243.         elif string == 'д':
  244.             morse_code = ('— • •')
  245.             print('— • •')
  246.             morse.append(morse_code)
  247.         elif string == 'е':
  248.             morse_code = ('• ')
  249.             print('• ')
  250.             morse.append(morse_code)
  251.         elif string == 'ё':
  252.             morse_code = ('• ')
  253.             print('• ')
  254.             morse.append(morse_code)
  255.         elif string == 'ж':
  256.             morse_code = ('• • • —')
  257.             print('• • • —')
  258.             morse.append(morse_code)
  259.         elif string == 'з':
  260.             morse_code = ('— — • •')
  261.             print('— — • •')
  262.             morse.append(morse_code)
  263.         elif string == 'и':
  264.             morse_code = ('• •')
  265.             print('• •')
  266.             morse.append(morse_code)
  267.         elif string == 'к':
  268.             morse_code = ('— • —')
  269.             print('— • —')
  270.             morse.append(morse_code)
  271.         elif string == 'л':
  272.             morse_code = ('• — • •')
  273.             print('• — • •')
  274.             morse.append(morse_code)
  275.         elif string == 'м':
  276.             morse_code = ('— —')
  277.             print('— —')
  278.             morse.append(morse_code)
  279.         elif string == 'н':
  280.             morse_code = ('— •')
  281.             print('— •')
  282.             morse.append(morse_code)
  283.         elif string == 'о':
  284.             morse_code = ('— — —')
  285.             print('— — —')
  286.             morse.append(morse_code)
  287.         elif string == 'п':
  288.             morse_code = ('• — — •')
  289.             print('• — — •')
  290.             morse.append(morse_code)
  291.         elif string == 'р':
  292.             morse_code = ('• — •')
  293.             print('• — •')
  294.             morse.append(morse_code)
  295.         elif string == 'с':
  296.             morse_code = ('• • •')
  297.             print('• • •')
  298.             morse.append(morse_code)
  299.         elif string == 'т':
  300.             morse_code = ('—')
  301.             print('—')
  302.             morse.append(morse_code)
  303.         elif string == 'у':
  304.             morse_code = ('• • —')
  305.             print('• • —')
  306.             morse.append(morse_code)
  307.         elif string == 'ф':
  308.             morse_code = ('• • — •')
  309.             print('• • — •')
  310.             morse.append(morse_code)
  311.         elif string == 'х':
  312.             morse_code = ('• • • •')
  313.             print('• • • •')
  314.             morse.append(morse_code)
  315.         elif string == 'ц':
  316.             morse_code = ('— • — •')
  317.             print('— • — •')
  318.             morse.append(morse_code)
  319.         elif string == 'ч':
  320.             morse_code = ('— — — ')
  321.             print('— — — •')
  322.             morse.append(morse_code)
  323.         elif string == 'ш':
  324.             morse_code = ('— — — —')
  325.             print('— — — —')
  326.             morse.append(morse_code)
  327.         elif string == 'щ':
  328.             morse_code = ('— — • —')
  329.             print('— — • —')
  330.             morse.append(morse_code)
  331.         elif string == 'ъ':
  332.             morse_code = ('— — • — —')
  333.             print('— — • — —')
  334.             morse.append(morse_code)
  335.         elif string == 'ы':
  336.             morse_code = ('— • — —')
  337.             print('— • — —')
  338.             morse.append(morse_code)
  339.         elif string == 'ь':
  340.             morse_code = ('— • • —')
  341.             print('— • • —')
  342.             morse.append(morse_code)
  343.         elif string == 'ю':
  344.             morse_code = ('• • — —')
  345.             print('• • — —')
  346.             morse.append(morse_code)
  347.         elif string == 'я':
  348.             morse_code = ('• — • —')
  349.             print('• — • —')
  350.             morse.append(morse_code)
  351.         elif string == '1':
  352.             morse_code = ('• — — — —')
  353.             print('• — — — —')
  354.             morse.append(morse_code)
  355.         elif string == '2':
  356.             morse_code = ('• • — — —')
  357.             print('• • — — —')
  358.             morse.append(morse_code)
  359.         elif string == '3':
  360.             morse_code = ('• • • — —')
  361.             print('• • • — —')
  362.             morse.append(morse_code)
  363.         elif string == '4':
  364.             morse_code = ('• • • • —')
  365.             print('• • • • —')
  366.             morse.append(morse_code)
  367.         elif string == '5':
  368.             morse_code = ('• • • • •')
  369.             print('• • • • •')
  370.             morse.append(morse_code)
  371.         elif string == '6':
  372.             morse_code = ('— • • • •')
  373.             print('— • • • •')
  374.             morse.append(morse_code)
  375.         elif string == '7':
  376.             morse_code = ('— — • • •')
  377.             print('— — • • •')
  378.             morse.append(morse_code)
  379.         elif string == '8':
  380.             morse_code = ('— — — • •')
  381.             print('— — — • •')
  382.             morse.append(morse_code)
  383.         elif string == '9':
  384.             morse_code = ('— — — — •')
  385.             print('— — — — •')
  386.             morse.append(morse_code)
  387.         elif string == '0':
  388.             morse_code = ('— — — — —')
  389.             print('— — — — —')
  390.             morse.append(morse_code)
  391.         elif string == '.':
  392.             morse_code = ('• • • • • •')
  393.             print('• • • • • •')
  394.             morse.append(morse_code)
  395.         elif string == ',':
  396.             morse_code = ('• — • — • —')
  397.             print('• — • — • —')
  398.             morse.append(morse_code)
  399.         elif string == ':':
  400.             morse_code = ('— — — • • •')
  401.             print('— — — • • •')
  402.             morse.append(morse_code)
  403.         elif string == ';':
  404.             morse_code = ('— • — • —')
  405.             print('— • — • —')
  406.             morse.append(morse_code)
  407.         elif string == '(':
  408.             morse_code = ('— • — — • —')
  409.             print('— • — — • —')
  410.             morse.append(morse_code)
  411.         elif string == ')':
  412.             morse_code = ('— • — — • —')
  413.             print('— • — — • —')
  414.             morse.append(morse_code)
  415.         elif string == '"':
  416.             morse_code = ('• — • • — •')
  417.             print('• — • • — •')
  418.             morse.append(morse_code)
  419.         elif string == '?':
  420.             morse_code = ('• • — — • •')
  421.             print('• • — — • •')
  422.             morse.append(morse_code)
  423.         elif string == '!':
  424.             morse_code = ('— — • • — —')
  425.             print('— — • • — —')
  426.             morse.append(morse_code)
  427.         elif string == '@':
  428.             morse_code = ('• — — • — •')
  429.             print('• — — • — •')
  430.             morse.append(morse_code)
  431.         elif string == '-':
  432.             morse_code = ('— • • • • —')
  433.             print('— • • • • —')
  434.             morse.append(morse_code)
  435.         elif string == ' ':
  436.             morse_code = ('.......')
  437.             print('.......')
  438.             morse.append(morse_code)
  439.  
  440.     morse = ''.join(morse)
  441.     print('Единой строкой: ', morse)
  442.  
  443. def choice():
  444.     choice = str(input(' Из текста в код Морзе - 1\n Из кода Морзе в текст - 2\n'))
  445.     if choice == '1':
  446.         text_morse()
  447.     elif choice == '2':
  448.         morse_text()
  449.  
  450. choice()

Сам код для загрузки доступен по ссылке.

В случае возникновения вопросов — пожалуйста, пишите на почту.

Да, кстати, чую, что скоро буду заниматься подготовкой рядя материалов по Arduino 🙂 Но это пока не точно… : )Спасибо за внимание! И не забывайте делиться ссылкой на пост в соц.сетях.