Oder noch besser: man lässt die *-Importe sein.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()`
Turtle: Binärwerte in Matrizen in Pixel umwandeln
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 16
- Registriert: Mittwoch 22. Februar 2012, 20:37
@Hyperion: Okay .
Ich habe das jetzt so umgeschrieben:
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.
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)
Außerdem erkennt er mir nicht xrange, was ich doch schon sehr komisch finde. Range() erkennt er tadellos.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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...
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...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 16
- Registriert: Mittwoch 22. Februar 2012, 20:37
@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 .
Muss nicht lang sein, ich will halt nur verstehen, um zu lernen .
@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
-
- User
- Beiträge: 16
- Registriert: Mittwoch 22. Februar 2012, 20:37
Die Funktion ist toll: sie gibt einen genauen Index von den Werten und der Position, danke
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 ?
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]
@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.
-
- User
- Beiträge: 16
- Registriert: Mittwoch 22. Februar 2012, 20:37
@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:
Kann es sein, dass die Argumente (x, y) in Zeile 1 und die Variablen x und y in den Schleifen eigentlich was anderes darstellen ?
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)
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, an einen Key geht nur ein Objekt.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 ?
(Und das darf beliebiges sein, Liste, Dict, eigene Klassen, Tupel)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 16
- Registriert: Mittwoch 22. Februar 2012, 20:37
@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):
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++ !
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)
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++ !
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Na dann haben wir die Welt ja ein wenig besser gemacht...MikeOrMichael hat geschrieben: Im Abschluss: Nie wieder C++ !
SCNR
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
In Python geht vieles schneller!Dobi hat geschrieben:Langsamer ist nicht immer besser...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert