Turtle: Binärwerte in Matrizen in Pixel umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
MikeOrMichael
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 :)

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 ?
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.
MikeOrMichael
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 :oops: . 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 ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
MikeOrMichael
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):

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 :mrgreen: .
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++ ! :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

MikeOrMichael hat geschrieben: Im Abschluss: Nie wieder C++ ! :D
Na dann haben wir die Welt ja ein wenig besser gemacht... :twisted:

SCNR ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

Langsamer ist nicht immer besser... :twisted:
SCNR either ;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dobi hat geschrieben:Langsamer ist nicht immer besser... :twisted:
In Python geht vieles schneller! ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten