Sierpinski-Kurve
Hallo
Diese SierpA - B Funktionen hab ich desswegen weil ich diese Aufgabe
rekursiv lösen muss.
Diese SierpA - B Funktionen hab ich desswegen weil ich diese Aufgabe
rekursiv lösen muss.
Ich hab jetzt die Zeile neu geschrieben (ganz links und dann eingerückt) und es kommt noch immer dieser Fehler.
Hoi,
ah, erst habe ich übersehen, wo der Fehler liegt. Aber schau doch mal auf die Position der 'def's, die dahinter folgen. Na? Liegen die alle an derselben Stelle? Am besten nimmst Du einen Editor, der Dir bei der Einrückung hilft. Wie schon gesagt: Wenn Du Tabs und Leerzeichen gemischt hast, kannst Du solche Fehler auch provozieren. Gute Editoren zeigen auf Wunsch auch an, ob Tabs oder Leerzeichen vorliegen und machen auch Korrekturen.
Gruß,
Christian
ah, erst habe ich übersehen, wo der Fehler liegt. Aber schau doch mal auf die Position der 'def's, die dahinter folgen. Na? Liegen die alle an derselben Stelle? Am besten nimmst Du einen Editor, der Dir bei der Einrückung hilft. Wie schon gesagt: Wenn Du Tabs und Leerzeichen gemischt hast, kannst Du solche Fehler auch provozieren. Gute Editoren zeigen auf Wunsch auch an, ob Tabs oder Leerzeichen vorliegen und machen auch Korrekturen.
Gruß,
Christian
@BeneCrack: Rekursiv lösen heisst nicht, dass man *vier* Funktionen braucht, das geht auch mit einer. Siehe das BASIC-Beispiel. Die Regeln kann man auch in eine Datenstruktur stecken. Dann lässt sich der gleiche Code dazu nutzen mit anderen Regeln auch andere Kurven zu zeichnen.
Die Klassenaufteilung ist übrigens unsinnig. Am Ende landet doch alles in einer Klasse, warum sind das also drei "verschiedene"? Der Inhalt von `Sierpinski` und `SierKurve` sollte eine Klasse sein. Und da die nichts mit Sierpinski im besonderen zu tun hat, wäre ein allgemeinerer Name angebracht. `Canvas` zum Beispiel. Die unbedingten ``return True`` am Ende von `save()` und `show()` sind überflüssig und sollten weg fallen.
Dann sind die letzten Koordinaten Klassenattribute, wo sie besser Instanzattribute sein sollten. Auf `dist` und `dist0` sollte man auch besser über `self` zugreifen. Und wenn das Klassenkonstanten sein sollten, wäre komplette Grossschreibung der Namen eine gute Idee, um das deutlicher zu machen.
Der Inhalt von `SierpinskiKurve` braucht nicht in einer Klasse zu stecken. Hier reichen ganz normale Funktionen.
Die Klassenaufteilung ist übrigens unsinnig. Am Ende landet doch alles in einer Klasse, warum sind das also drei "verschiedene"? Der Inhalt von `Sierpinski` und `SierKurve` sollte eine Klasse sein. Und da die nichts mit Sierpinski im besonderen zu tun hat, wäre ein allgemeinerer Name angebracht. `Canvas` zum Beispiel. Die unbedingten ``return True`` am Ende von `save()` und `show()` sind überflüssig und sollten weg fallen.
Dann sind die letzten Koordinaten Klassenattribute, wo sie besser Instanzattribute sein sollten. Auf `dist` und `dist0` sollte man auch besser über `self` zugreifen. Und wenn das Klassenkonstanten sein sollten, wäre komplette Grossschreibung der Namen eine gute Idee, um das deutlicher zu machen.
Der Inhalt von `SierpinskiKurve` braucht nicht in einer Klasse zu stecken. Hier reichen ganz normale Funktionen.
Hallo
Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs
einfach nicht die 4 Rekursionen in einem zu unterbringen.
Und kann mir jemand dieses Programm:
(http://paste.pocoo.org/show/22789/)
in python umschreiben oder nur die Rekursion weil ich versteh diese Programmiersprache nicht.
Danke Leute
Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs
einfach nicht die 4 Rekursionen in einem zu unterbringen.
Und kann mir jemand dieses Programm:
(http://paste.pocoo.org/show/22789/)
in python umschreiben oder nur die Rekursion weil ich versteh diese Programmiersprache nicht.
Danke Leute
Das sind keine "4 Rekursionen".BeneCrack hat geschrieben:Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs einfach nicht die 4 Rekursionen in einem zu unterbringen.
Eine rekursion hast du z.B. dann, wenn eine Funktion sich selber aufruft, das typische Beispiel ist da die fakultät: !3 = 3 * !2
Es wäre hier vmtl besser, wenn du erstmal, unabhängig von der Programmiersprache das konzept "Rekursion" zu verstehen versuchst.
Das ist so ziemlich der einzige weg, sich hier böse kommentare einzufangen.Und kann mir jemand dieses Programm:
(http://paste.pocoo.org/show/22789/)
in python umschreiben oder nur die Rekursion weil ich versteh diese Programmiersprache nicht.
Die populären Antworten dürften sein:
"Was bietest du denn als Bezahlung dafür, dass ich deine Arbeit mache?"
oder einfach
"Wir machen dir nicht deine Hausaufgaben".
Python ist recht leicht zu lernen, aber man muss (wie bei Mathe) nicht versuchen, nur das zu verstehen, was man gerade für die Aufgabe braucht, das Funktioniert nie.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
"The Little Schemer" lehrt beispielsweise Rekursion. Mehr als dass es Scheme lehrt.keppla hat geschrieben:Das sind keine "4 Rekursionen".BeneCrack hat geschrieben:Das mit dem Tabs und Leerzeichen hab ich schon gelöst. Aber ich schaffs einfach nicht die 4 Rekursionen in einem zu unterbringen.
Eine rekursion hast du z.B. dann, wenn eine Funktion sich selber aufruft, das typische Beispiel ist da die fakultät: !3 = 3 * !2
Es wäre hier vmtl besser, wenn du erstmal, unabhängig von der Programmiersprache das konzept "Rekursion" zu verstehen versuchst.
Oh, jetzt wollt ich doch grad das sagenkeppla hat geschrieben:Das ist so ziemlich der einzige weg, sich hier böse kommentare einzufangen.
Die populären Antworten dürften sein:
"Was bietest du denn als Bezahlung dafür, dass ich deine Arbeit mache?"
oder einfach
"Wir machen dir nicht deine Hausaufgaben".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo Leute
Habs heute geschafft. Morgen muss ich die Aufgabe abgeben und alles
funktioniert.
Achja ich hab es mit PYX gemacht weil es so verlang ist.
Hier der Sourcecode:
Datei Ausfuehren_sierKurve.py:
Datei sierKurve.py:
Ein grosses dankeschön an euch, weil Ihr ein wenig geholfen habt.
Habs heute geschafft. Morgen muss ich die Aufgabe abgeben und alles
funktioniert.
Achja ich hab es mit PYX gemacht weil es so verlang ist.
Hier der Sourcecode:
Datei Ausfuehren_sierKurve.py:
Code: Alles auswählen
# erstellt am: 24.01.2008
# Projektname: Sierpinski Kurve
# Dateiname: Ausfuehren_sierKurve.py
# Autor: Benedek Benjamin, 2BHDV, d06035, 03
# (C) Copyright 2007-2008 Benedek Benjamin
import sierKurve
level = 1
kurve = sierKurve.SierpinskiKurve()
kurve.generate(level)
kurve.save("SierpinskiKurve_Stufe" + str(level))
Code: Alles auswählen
# erstellt am: 24.01.2008
# Projektname: Sierpinski Kurve
# Dateiname: sierKurve.py
# Autor: Benedek Benjamin, 2BHDV, d06035, 03
# (C) Copyright 2007-2008 Benedek Benjamin
from pyx import *
class SierKurve():
thisX = 0
thisY = 0
def __init__(self): #Zeichenfläche wird erstellt
self.img = canvas.canvas()
def goToXY(self, x, y):
SierKurve.thisX = x
SierKurve.thisY = y
def lineRel(self, deltaX, deltaY): #Linie wird gezeichnet
self.img.stroke(path.line(SierKurve.thisX, SierKurve.thisY, SierKurve.thisX+deltaX, SierKurve.thisY+deltaY))
SierKurve.thisX += deltaX
SierKurve.thisY += deltaY
def save(self, filename): #Die Zeichnung wird als PDF abgespeichert
self.img.writeEPSfile(filename)
self.img.writePDFfile(filename)
print 'Gespeichert als: %s' % filename
class SierpinskiKurve(SierKurve):
dist = 1
dist0 = 1
def __init__(self):
SierKurve.__init__(self)
def generate(self, level): #Hier beginnt alles
print "Einen Moment bitte, Daten werden verarbeitet..."
SierpinskiKurve.dist = SierpinskiKurve.dist0
#Grundmuster besteht aus dem aufruf von den A B C D Funktionen
self.goToXY(2*SierpinskiKurve.dist,SierpinskiKurve.dist)
self.sierpA(level) #Rekursion wird gestartet
self.lineRel(+SierpinskiKurve.dist,+SierpinskiKurve.dist)
self.sierpB(level) #Rekursion wird gestartet
self.lineRel(-SierpinskiKurve.dist,+SierpinskiKurve.dist)
self.sierpC(level) #Rekursion wird gestartet
self.lineRel(-SierpinskiKurve.dist,-SierpinskiKurve.dist)
self.sierpD(level) #Rekursion wird gestartet
self.lineRel(+SierpinskiKurve.dist,-SierpinskiKurve.dist)
#So ensteht einfach erklärt eine Sierpinski Kurve:
#A: aufruf von A B D A
#B: aufruf von B C A B
#C: aufruf von C D B C
#D: aufruf von D A C D
# Bei jedem Rekursionsaufruf wird die Rekursionstiefe um 1 vermindern
#In den Rekursionsfunktionen wird auch die Zeichen Funktion (lineRel) mit den entsprechenden Koordinaten aufgerufen
def sierpA (self, level):
if (level > 0):
self.sierpA(level-1)
self.lineRel(+SierpinskiKurve.dist,+SierpinskiKurve.dist)
self.sierpB(level-1)
self.lineRel(+2*SierpinskiKurve.dist,0)
self.sierpD(level-1)
self.lineRel(+SierpinskiKurve.dist,-SierpinskiKurve.dist)
self.sierpA(level-1)
def sierpB (self, level):
if (level > 0):
self.sierpB(level-1)
self.lineRel(-SierpinskiKurve.dist,+SierpinskiKurve.dist)
self.sierpC(level-1)
self.lineRel(0,+2*SierpinskiKurve.dist)
self.sierpA(level-1)
self.lineRel(+SierpinskiKurve.dist,+SierpinskiKurve.dist)
self.sierpB(level-1)
def sierpC (self, level):
if (level > 0):
self.sierpC(level-1)
self.lineRel(-SierpinskiKurve.dist,-SierpinskiKurve.dist)
self.sierpD(level-1)
self.lineRel(-2*SierpinskiKurve.dist,0)
self.sierpB(level-1)
self.lineRel(-SierpinskiKurve.dist,+SierpinskiKurve.dist)
self.sierpC(level-1)
def sierpD (self, level):
if (level > 0):
self.sierpD(level-1)
self.lineRel(+SierpinskiKurve.dist,-SierpinskiKurve.dist)
self.sierpA(level-1)
self.lineRel(0,-2*SierpinskiKurve.dist)
self.sierpC(level-1)
self.lineRel(-SierpinskiKurve.dist,-SierpinskiKurve.dist)
self.sierpD(level-1)