Für Buchstaben und Zeichenkombinationen in einem quadratischen Raster habe ich Turtlebefehle als Listen definiert, die von der Funktion "zeichne" wieder zu Turtlebefehlen umgesetzt werden. Das klappt.
Jetzt soll der ganze Text in der Liste "Text" festgelegt und von einer Funktion "zeichnetext" gezeichnet werden. Meine Frage, wie kann ich aus Text=["Le","o","t"] wieder die definierten Listen bekommen. Mit eval() ging's nicht . Gestern hat mir _blackjack_ geraten, das Problem hier nochmal zu posten, statt nur meine Vorstellung von einer möglichen Lösung preiszugeben. )
from tkinter import *
from turtle import *
import turtle
breite=520
hoehe=520
screensize(breite,hoehe)
def zeichne(z):
# zeichnet das Zeichen (ein Buchstabe oder ein Diph- oder Triphtong),
# aus einer Liste mit Turtle-Bewegungen und den 4 Sonderbefehlen:
# begin_fill() 'b', end_fill() 'e',penup() 'u', pendown() 'd'
if z==[]:
return 0
elif z[0] in ['b','e','u','d']:
if z[0]=='b':
begin_fill()
if z[0]=='e':
end_fill()
if z[0]=='u':
pu()
if z[0]=='d':
pendown()
return zeichne(z[1:])
fd(x*int(z[0]));lt(int(z[1])*90)
return zeichne(z[2:])
def zeichnetext(liste):♯ funzt nicht
if liste==[]:
return
zeichen=liste[0]
if zeichen=="":
pu();fd(2*x);pd()
return zeichnetext(liste[1:])
zeichne(zeichen)
pu();fd(x);pd()
return zeichnetext(liste[1:])
def start():
speed(0);ht()
global ss,anz,x
ss=breite
anz=26
x=ss/anz #20
# Definition der Zeichen
Le=['b',5,1,1,1,4,-1,6,1,1,1,7,1,'e','u',2,1,2,-1,'d','b',
3,1,1,1,2,-1,1,-1,2,1,3,1,3,1,5,1,'u',1,1,3,0,'d',1,-1,1,-1,1,-1,1,-1,
'u',-3,-1,-1,0,'e','u',0,1,-2,-1,-2,0,'d','u',5,0,'d']
t=['b',2,1,1,1,1,-1,3,-1,1,1,1,1,1,-1,2,1,1,1,7,1,'e','u',2,0,'d']
O=['b',3,1,7,1,3,1,7,1,'u',1,1,1,0,'d',5,-1,1,-1,5,-1,1,-1,
'u',-1,-1,-1,0,'d','e','u',3,0,'d']
zeichne(Le); pu();fd(2*x);pd()
zeichne(O); pu();fd(x);pd()
zeichne(t)
'''alternativ sollte einmal
zeichnetext(["Le","","O","t"])
möglich sein'''
start()
Turtlegrafik Frage zu Datenstruktur
Rekursion ist kein Ersatz für einfache Schleifen. Globale Variablen darf man nicht benutzen. Strichpunkt sollte man auch nicht benutzen, sondern jede Anweisung in eine eigene Zeile schreiben.
Turtle ist leider so ausgerichtet, dass man *-importiert und mit kryptischen Namen arbeitet, aber für eigene Programme sollte man gute Variablennamen benutzen.
Und was funktioniert bei zeichnetext nicht?
Turtle ist leider so ausgerichtet, dass man *-importiert und mit kryptischen Namen arbeitet, aber für eigene Programme sollte man gute Variablennamen benutzen.
Code: Alles auswählen
def zeichne(zeichen, scaling=1):
""" zeichnet das Zeichen (ein Buchstabe oder ein Diph- oder Triphtong),
aus einer Liste mit Turtle-Bewegungen und den 4 Sonderbefehlen:
begin_fill() 'b', end_fill() 'e',penup() 'u', pendown() 'd' """
status = "len"
for command in zeichen:
if command == 'b':
begin_fill()
elif command == 'e':
end_fill()
elif command == 'u':
pu()
elif command == 'd':
pendown()
elif status == "len":
fd(scaling * command)
status = "dir"
elif status == "dir":
lt(90 * command)
status = "len"
else:
assert False, "internal error"
Code: Alles auswählen
LETTERS = {
"Le": ['b',5,1,1,1,4,-1,6,1,1,1,7,1,'e','u',2,1,2,-1,'d','b',
3,1,1,1,2,-1,1,-1,2,1,3,1,3,1,5,1,'u',1,1,3,0,'d',1,-1,1,-1,1,-1,1,-1,
'u',-3,-1,-1,0,'e','u',0,1,-2,-1,-2,0,'d','u',5,0,'d']
"t": ['b',2,1,1,1,1,-1,3,-1,1,1,1,1,1,-1,2,1,1,1,7,1,'e','u',2,0,'d']
"O": ['b',3,1,7,1,3,1,7,1,'u',1,1,1,0,'d',5,-1,1,-1,5,-1,1,-1,
'u',-1,-1,-1,0,'d','e','u',3,0,'d']
}
def zeichnetext(text, scaling=1):
for zeichen in text:
if zeichen == "":
space = 2 * scaling
else:
zeichne(LETTERS[zeichen], scaling)
space = scaling
pu()
fd(space)
pd()
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Sirius3: Es gibt ja etwas weniger kryptische Namen, im Code steht ja sogar einmal `pendown()` statt `pd()`. Genau so gibt es `penup()` statt `pu()`, `left()` statt `lt()`, `foward()` statt `fd()`, und so weiter.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 5
- Registriert: Freitag 8. Januar 2021, 18:38
@Sirius3: Hast Du meinen Dank erhalten gestern, er ist für mich nicht mehr sichtbar.