oop/2026-04-29/morsecode/client.py (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import time
from morsedecode import MorseDecoder
MORSE = {
"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": "-,-,.,.",
" ": " ",
}
TAPS = {
".": "self.tap(1*self.unit)",
"-": "self.tap(3*self.unit)",
",": "time.sleep(1*self.unit)",
";": "time.sleep(3*self.unit)",
" ": "time.sleep(7*self.unit)",
}
class Encoder:
def __init__(self, unit=0.1):
self.unit = unit
def tap(self, seconds):
d.signal_on()
time.sleep(seconds)
d.signal_off()
def encode(self, string: str):
encoded = ""
for char in string:
encoded += MORSE[char.upper()]
encoded += ";" # separates characters
print(encoded)
return encoded
def send(self, string: str):
encoded = self.encode(string)
for char in encoded:
eval(TAPS[char])
d = MorseDecoder(unit=0.1)
e = Encoder(unit=0.1)
e.send(input())
d.flush()
|