User:Kiken/Construction Site/Implementations/morse code
Jump to navigation
Jump to search
from sys import argv
# assuming file is in main.py, execute with: python3 main.py [filename]
def morse_code(code):
yield_ = code
index = 0
morsetochar = {'.-': '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', '.-.-.-': '.', '--..--': ',', '..--..': '?', '': ''}
while yield_:
if index+1 <= len(code) and len(code) >= 1:
if code[index] == '.':
if code[index+1] == '.':
yield_ = yield_[1:yield_.index('-')] + '.' + yield_[yield_.index('-'):]
elif code[index+1] == '-':
yield_ = yield_[1:yield_.index('.')] + '-' + yield_[yield_.index('.'):]
else:
yield_ = yield_[1:]
continue
elif code[index] == '-':
if code[index+1] == '.':
yield_ = yield_[1] + '-' + yield_[1:]
elif code[index+1] == '-':
yield_ = yield_[0] + yield_[2:]
yield_ = yield_[:3] + yield_[0] + yield_[3:]
else:
yield_ = yield_[1:]
continue
else:
break
else:
break
index += 1
english_plain_text = ''
morse_code = yield_
current_char_morse_code = ''
i = 0
while i < len(morse_code) - 1:
if morse_code[i] == ' ':
if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ':
english_plain_text += ' '
i += 1
else:
english_plain_text += morsetochar[current_char_morse_code]
current_char_morse_code = ''
else:
current_char_morse_code += morse_code[i]
i += 1
if len(current_char_morse_code) > 0:
try:
english_plain_text += morsetochar[current_char_morse_code]
except KeyError:
english_plain_text += '#'
return english_plain_text
with open(argv[1]) as f:
print(morse_code(f.read()))