Brodere en beskjed med morsekode#
I dette eksempelet skal vi se på hvordan vi kan oversette beskjeder til morsekode og hvordan vi kan lage et broderimønster fra disse beskjedene.
Tegne morsekode#
Vi starter det hele med å importere Turtle
fra turtlethread
.
1from turtlethread import Turtle
Da er neste steg å lage kode som tegner denne morsekode med et skilpaddeobjekt. Dette gjør vi ved å definere hvordan vi tegner en prikk og en strek. Det vi vet om morsekode er:
En prikk varer en tidsenhet
En strek varer tre tidsenheter
Mellomrommet mellom hvert tegn er tre tidsenheter
Mellomrommet mellom hvert ord er syv tidsenheter
Basert på dette kan vi tegne prikker og streker med turtlethread
. Det er mange måter vi
kan gjøre det på, men vi har valgt denne:
La oss lage en funksjon for å tegne en prikk, en funksjon for å tegne en strek og en funksjon som tar inn et morsetegn (strek eller mellomrom) og tegner det.
1def draw_dash(needle, length, height):
2 """Use the Turtle object ``needle`` to draw a dash.
3 """
4 needle.left(90)
5 needle.forward(height)
6 needle.right(90)
7 needle.forward(3*length)
8 needle.right(90)
9 needle.forward(height)
10 needle.left(90)
11
12def draw_dot(needle, length, height):
13 """Use the Turtle object ``needle`` to draw a dot.
14 """
15 needle.left(90)
16 needle.forward(height)
17 needle.right(90)
18 needle.forward(length)
19 needle.right(90)
20 needle.forward(height)
21 needle.left(90)
22
23def draw_morse_symbol(symbol, needle, length, height):
24 """Use the Turtle object ``needle`` to draw a morse symbol (dot, dash or pause).
25 """
26 if symbol == ".":
27 draw_dot(needle, length, height)
28 elif symbol == "-":
29 draw_dash(needle, length, height)
30 elif symbol == " ":
31 needle.forward(length)
Nå har vi kode som tegner hvert tegn i en morsekode, men vi må også lage kode for å tegne en hel beskjed.
1def draw_morse_code(morse_code, needle, length, height):
2 """Use the Turtle object ``needle`` to draw morse code
3 """
4 # We want a small space at the beginning. This is not necessary, but makes the embroidery prettier.
5 needle.forward(length/2)
6
7 # We can iterate over each letter in a string
8 for morsebokstav in morse_code:
9 draw_morse_tegn(morsebokstav, needle, length=length, height=height)
10 needle.forward(length) # We add a unit-length space between each symbol
11
12 # We want a small space at the end also. This is not necessary, but makes the embroidery prettier.
13 needle.forward(length/2)
La oss prøve ut koden så langt ved å tegne SOS (... --- ...
) med morsekode.
1needle = Turtle()
2with needle.running_stitch(30):
3 draw_morse_code("... --- ...", needle, 60, 200)
4
5needle.save("sos.svg")
Oversette tekst til morsekode#
Neste steg er å lage kode som gjør om tekst til morsekode. For å gjøre det bruker vi ett oppslagsverk (dictionary) som transformerer bokstaver og tegn til morsekode.
1MORSEALFABET = {
2 'A': '.-', 'B': '-...', 'C': '-.-.',
3 'D': '-..', 'E': '.', 'F': '..-.',
4 'G': '--.', 'H': '....', 'I': '..',
5 'J': '.---', 'K': '-.-', 'L': '.-..',
6 'M': '--', 'N': '-.', 'O': '---',
7 'P': '.--.', 'Q': '--.-', 'R': '.-.',
8 'S': '...', 'T': '-', 'U': '..-',
9 'V': '...-', 'W': '.--', 'X': '-..-',
10 'Y': '-.--', 'Z': '--..', 'Æ': '.-.-',
11 'Ø': '---.', 'Å': '.--.-', '1': '.----',
12 '2': '..---', '3': '...--', '4': '....-',
13 '5': '.....', '6': '-....', '7': '--...',
14 '8': '---..', '9': '----.', '0': '-----',
15 ',': '--..--', '.': '.-.-.-', '?': '..--..',
16 '/': '-..-.', '-': '-....-', '(': '-.--.',
17 ')': '-.--.-', ' ': ' '
18}
Så oppretter vi en funksjon som tar inn en tekststreng og gjør den om til morsekode.
1def oversett_tekst_til_morse(tekst):
2 morsetekst = ""
3 for bokstav in tekst:
4 morsetekst += MORSEALFABET[bokstav.upper()]
5 morsetekst += " "
6 return morsetekst
7
8print(oversett_tekst_til_morse("Hei på deg"))
.... . .. .--. .--.- -.. . --.
Tegne tekst som morsekode#
Vi ser at vi fikk skrevet ut «Hei på deg» med morsetegn. La oss bruke tegn_morsekode
for å tegne denne teksten.
1morsekode = oversett_tekst_til_morse("Hei på deg")
2penn = Turtle()
3with penn.running_stitch(30):
4 tegn_morsekode(morsekode, penn, 60, 200)
5
6penn.save("hei_på_deg.svg")
Her har vi en fin liten beskjed. La oss putte dette inn i en funksjon som tar inn en tekststreng og bruker en skilpadde for å tegne morsekoden som representerer den tekststrengen.
1def tegn_morsekode_fra_tekst(tekst, penn, lengde, høyde):
2 morsekode = oversett_tekst_til_morse(tekst)
3 tegn_morsekode(morsekode, penn, lengde, høyde)
4
5penn = Turtle()
6with penn.running_stitch(30):
7 tegn_morsekode_fra_tekst("Hei verden", penn, 60, 200)
8
9penn.save("hei_verden.jef")
10penn.save("hei_verden.svg")