Seite 1 von 2
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 10:47
von EyDu
Hyperion hat geschrieben:Na gut, dann ändert man eben den Namen des Parameters von `color` in `colorname` o.ä.. Dann klappt's auch mit dem Aufruf von `color()`

Oder noch besser: man lässt die *-Importe sein.
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 11:38
von MikeOrMichael
@Hyperion: Okay

.
Ich habe das jetzt so umgeschrieben:
Code: Alles auswählen
def _paint(x, y, bcolor):
speed('fastest')
up()
goto (x, y)
down()
color(bcolor)
fillcolor(bcolor)
i = 0
begin_fill()
while i < 4:
forward(10)
right(90)
i = i + 1
end_fill()
def px(matrix, x, y):
paint_mapping = {0: paint_black, 1: paint_white}
for x, row in enumerate(matrix):
for y, bcolor in enumerate(row):
paint_mapping[bcolor](x, y)
Er malt mir dann genau ein schwarzes Viereck, dann läuft da nix mehr und es hängt.
Außerdem erkennt er mir nicht xrange, was ich doch schon sehr komisch finde. Range() erkennt er tadellos.
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 12:22
von Hyperion
Dann verwendest Du vermutlich Python 3.x. Dort wurde aus `xrange` einfach `range`.
Wieso er hängt kann ich nicht sagen. Lass Dir halt mal die Werte der Schleifendurchläufe ausgeben. Dann siehst Du ja, ob er alles druchläuft, wie er soll. Wenn ja, dann liegt es an etwas anderem. Ich vermute mal, dass Du bei den Koordinaten noch einen Offset addieren / multiplizieren musst? Schließlich gehe ich ja nur Indexe durch... die laufen also von 0 bis 4 o.ä. `forward(10)` und `right(90)` hantieren da ja mit recht großen Zahlen. Wenn analog zu x und y die selbe Auflösung haben, ist ja klar, dass Du nicht viel siehst...
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 20:28
von MikeOrMichael
@Hyperion: Könntest du mir ganz kurz die beiden for- Schleifen und die enumerate-Funktion erklären ? Ich verstehe zum Bsp. nicht, warum x,row im selben Loop sind, da x,y die Koordinaten sind und row halt die Reihe ist.
Muss nicht lang sein, ich will halt nur verstehen, um zu lernen

.
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 20:53
von BlackJack
@MikeOrMichael: `enumerate()` liefert Tupel mit einer laufenden Nummer als erstes Element und dem dazugehörigen Element aus dem übergebenen iterierbaren Objekt. Die Matrix besteht aus Zeilen und die Zeilen aus den einzelnen Spaltenwerten in der Zeile. Traditionell hätte zu den Zeilen eher die `y`-Koordinate gehört, aber das bewirkt ja erst einmal nur, dass die Matrix 90° gedreht gezeichnet wird. Probier doch einfach in einer Python-Shell mal aus was die Funktion so macht:
Code: Alles auswählen
In [214]: matrix = [[1, 0, 1, 0], [1, 0, 0, 1]]
In [216]: for item in enumerate(matrix):
.....: print item
.....:
(0, [1, 0, 1, 0])
(1, [1, 0, 0, 1])
In [217]: for y, row in enumerate(matrix):
.....: for x, cell in enumerate(row):
.....: print x, y, cell
.....:
0 0 1
1 0 0
2 0 1
3 0 0
0 1 1
1 1 0
2 1 0
3 1 1
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 21:40
von MikeOrMichael
Die Funktion ist toll: sie gibt einen genauen Index von den Werten und der Position, danke
Code: Alles auswählen
def px(matrix, x, y):
paint_mapping = {0: paint_black, 1: paint_white}
for x, row in enumerate(matrix):
for y, bcolor in enumerate(row):
print(bcolor, x, y)
px(matrix, 25, 25)
1 0 0
0 0 1
1 0 2
0 0 3
1 1 0
0 1 1
0 1 2
1 1 3
def px(matrix, x, y):
paint_mapping = {0: paint_black, 1: paint_white}
for x, row in enumerate(matrix):
for y, bcolor in enumerate(row):
print(bcolor)
px(matrix, 10, 10)
1
0
1
0
1
0
0
1
for x, row in enumerate(matrix):
print(row)
[1, 0, 1, 0]
[1, 0, 0, 1]
Tut mir leid,dass ich noch frage: die Funktion paint_mapping, sie sorgt dafür, dass für den Wert 0/1 paint_white/black zugeordnet wird; aber ich habe nirgendwo die Bedeutung der { } ? Ich habe leider nichts dazu gefunden. Ist das ein Kürzel für eine Funktion ?
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 22:17
von BlackJack
@MikeOrMichael: Du hast noch keine Wörterbücher (`dict`) kennen gelernt? Solltest Du schleunigst nachholen, denn das ist neben Listen der wohl wichtigste Containerdatentyp unter den Grundtypen von Python.
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Samstag 14. April 2012, 23:29
von MikeOrMichael
@BlackJack: Ich habe mich informiert. Wirklich sehr nützlich mit den Keys und den Items. Gibt es egrenzungen bei der Anzahl der Items pro Keys ?
An alle: Hyperions Funktion hat funktioniert ! Ohne hängen, ohne nichts. Das Problem ist: jetzt hat Python mir die Matrix (oder das Array) um 90° Ost gedreht

. Ich glaube, da ist eine Variable, die dafür sorgt. Das ist die Funktion:
Code: Alles auswählen
def px(matrix, x, y):
paint_mapping = {0: paint_white, 1: paint_black}
for x, row in enumerate(matrix):
for y,bcolor in enumerate(row):
paint_mapping[bcolor](x, y)
Kann es sein, dass die Argumente (x, y) in Zeile 1 und die Variablen x und y in den Schleifen eigentlich was anderes darstellen ?
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Sonntag 15. April 2012, 12:42
von Leonidas
MikeOrMichael hat geschrieben:@BlackJack: Ich habe mich informiert. Wirklich sehr nützlich mit den Keys und den Items. Gibt es egrenzungen bei der Anzahl der Items pro Keys ?
Ja, an einen Key geht nur ein Objekt.
(Und das darf beliebiges sein, Liste, Dict, eigene Klassen, Tupel)
Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Sonntag 15. April 2012, 15:53
von MikeOrMichael
@Leonidas: Danke dir.
An alle: Problem gelöst !!!
Ich habe herausgefunden, dass bei der Funktion, egal welche ich Koordianten eingebe, er immer wieder auf (0, 0) als Grundpunkt zurückgeht. Es lag alles daran, da die Anfangsarguemnte (x, y), welche die Koordianten des Startpunktes darstellen, später zu den Argumenten der Matrix wurde, sprich x = Reihe und y = Kolonne.
Und da der Anfangspunkt der Matrix auch immer 0, 0 ist, hat er die [x][y] Werte als gleiche Koordianten benutzt. Ich habe einfach nur neue Variablen benutzt und diese dann hinzugefügt bzw. substrahiert (und bei paint_ kommt noch ein offset von *10 dazu):
Code: Alles auswählen
def _paint(x, y, bcolor):
speed('fastest')
up()
goto (x*10, y*10)
down()
color(bcolor)
fillcolor(bcolor)
i = 0
begin_fill()
while i < 4:
forward(10)
right(90)
i = i + 1
end_fill()
def px(matrix, x, y):
paint_mapping = {0: paint_white, 1: paint_black}
for m, row in enumerate(matrix):
for n,bcolor in enumerate(row):
paint_mapping[bcolor](x + n, y - m)
Vielen vielen Dank an alle !!! Besonders an Hyperion für seine tolle Funktion

.
Ihr habt mich wirklich gerettet und mir das Leben vereinfacht.
Ich werde jetzt Python weiterstudieren, da gibts noch vieeeeeel zu tun.
Im Abschluss: Nie wieder C++ !

Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Montag 16. April 2012, 12:00
von Hyperion
MikeOrMichael hat geschrieben:
Im Abschluss: Nie wieder C++ !

Na dann haben wir die Welt ja ein wenig besser gemacht...
SCNR

Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Mittwoch 18. April 2012, 15:18
von Dobi
Langsamer ist nicht immer besser...

SCNR either

Re: Turtle: Binärwerte in Matrizen in Pixel umwandeln
Verfasst: Mittwoch 18. April 2012, 15:58
von Hyperion
Dobi hat geschrieben:Langsamer ist nicht immer besser...

In Python geht vieles schneller!
