Pascalsches Dreieck

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.
Antworten
Lisa
User
Beiträge: 9
Registriert: Montag 15. Januar 2007, 19:11

Hallo,

kann mir jemand bei folgendem Problem helfen? Komm da echt nicht weiter!

"Schreiben Sie eine Funktion, die das das Pascal’sche Dreieck
bis zu einer gewissen Tiefe berechnet. Das Ergebnis
soll in einer Liste gespeichert werden, die zurückgeliefert
wird. Schreiben Sie eine zweite Funktion, die diese Liste
ausgibt."

Danke
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hallo

Gut dann sag uns wo genau du nicht mehr weiterkommst, wir lösen sicher nicht deine Aufgaben!

Gruss
Lisa
User
Beiträge: 9
Registriert: Montag 15. Januar 2007, 19:11

Ich kann zwar das Pascalsche Dreieck ausgeben, aber ich weiß nicht, wie ich alle Zeilen in einer Liste speichern kann, so dass ich diese Liste hinterher zurückgeben kann.
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Poste mal wie dein Code jetzt aussieht
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
Lisa
User
Beiträge: 9
Registriert: Montag 15. Januar 2007, 19:11

So hab ich das bisher gemacht:

Code: Alles auswählen

def pascal():
    s = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
    print s
    for i in range(9):
        if i%2 == 0:
            s = [s[0] + s[1], s[1] + s[2], s[2] + s[3], s[3] + s[4], \
                 s[4] + s[5], s[5] + s[6], s[6] + s[7], s[7] + s[8], \
                 s[8] + s[9], s[9] + s[10]]
            print " ", s
        elif i%2 == 1:
            s = [0, s[0] + s[1], s[1] + s[2], s[2] + s[3], s[3] + s[4], \
                 s[4] + s[5], s[5] + s[6], s[6] + s[7], s[7] + s[8], \
                 s[8] + s[9], 0]
            print s

def ausgabe(x):
    print x

ausgabe(pascal())
Und weiter komm ich dann nicht mehr!
BlackJack

Ich denke die Aufgabe ist eher so gemeint, dass man der Funktion die gewünschte Tiefe als Argument übergibt.

Ausserdem gibt's im Pascalschen Dreieck keine Nullen. Das Ergebnis sähe eher so aus:

Code: Alles auswählen

[[1],
 [1, 1],
 [1, 2, 1],
 [1, 3, 3, 1],
 ...
]
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Code: Alles auswählen

# Pascal'sches Dreieck

triangle = []

for i in xrange(10):
    tmp = []
    if  i != 0:
        for j in xrange(i):
            if j == 0 or j == i-1:
                tmp.append(1)
            else:
                if i>2:
                    tmp.append(triangle[-1][j-1]+triangle[-1][j])
        triangle.append(tmp)
    
for t in triangle:
    print t
P.S.: http://de.wikipedia.org/wiki/Pascalsches_Dreieck
Lisa
User
Beiträge: 9
Registriert: Montag 15. Januar 2007, 19:11

Ja, die Aufgabe war sicher so gemeint! Aber so hab ich das leider nicht hinbekommen! Und wenn ich ehrlich bin, versteh ich bei dieser Lösung auch nur Bahnhof...
Weiß eh nicht, wieso ich das überhaupt lernen muss. Werde ich später nie wieder brauchen!
Trotzdem vielen Danke für eure Hilfe!!!!
BlackJack

Lisa hat geschrieben:Weiß eh nicht, wieso ich das überhaupt lernen muss. Werde ich später nie wieder brauchen!
Über ein Problem nachdenken und eine präzise Lösung formulieren wirst Du später nie wieder brauchen?
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Nur zu empfehlen.
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

sunmountain hat geschrieben:

Code: Alles auswählen

# Pascal'sches Dreieck

triangle = [] # Ergebnisliste

for i in xrange(10): # Tiefe des Dreiecks (Zeilen)
    tmp = [] # Temporäre Liste für jede Zeile
    if  i != 0: # Wenn nicht 1. Zeile
        for j in xrange(i): # Gehe die einzelnen Spalten der Zeile durch
            if j == 0 or j == i-1: # Sonderfall : Links- und Rechts aussen 
                tmp.append(1) # sind immer 1
            else:
                if i>2: # Anzahl Spalten groß genug ?
                    tmp.append(triangle[-1][j-1]+triangle[-1][j]) # Hänge errechnete Werte an temporäre Liste an
        triangle.append(tmp) # Hänge temporäre an Ergebnisliste an
    
# Ausgeben
for t in triangle:
    print t
P.S.: http://de.wikipedia.org/wiki/Pascalsches_Dreieck
Lisa
User
Beiträge: 9
Registriert: Montag 15. Januar 2007, 19:11

Jetzt hab ich das aber immer noch nicht in einer Liste gespeichert, die ich dann komplett zurückliefern kann.

Ich werde später bestimmt auch Probleme lösen müssen, aber ich glaube nicht, dass ich dazu Python brauche.
Lisa
User
Beiträge: 9
Registriert: Montag 15. Januar 2007, 19:11

Noch Mal vielen Dank!!!!
Jetzt komm ich selber weiter!
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Lisa hat geschrieben:Jetzt hab ich das aber immer noch nicht in einer Liste gespeichert, die ich dann komplett zurückliefern kann.

Ich werde später bestimmt auch Probleme lösen müssen, aber ich glaube nicht, dass ich dazu Python brauche.
Aber Python (oder jede andere halbwegs brauchbare Programmiersprache)
zwingen einen, Probleme durchzudefinieren:

Wasser rein, bisschen Kaffee, anschalten

Könnte so jemand, der Null Ahnung Kaffe kochen ?

So aber schon:

Code: Alles auswählen

def kocheKaffee(anzahl_Tassen):
    kaffee_pulver = anzahl_Tassen * 5 # 5  Gramm pro Tasse
    wasser = anzahl_Tassen * 150 # 150 ml pro Tasse
    wasser_einfuellen(wasser)
    filter_einsetzen()
    filter_mit_kaffee_fuellen(kaffee_pulver)
    fertig = maschine_einschalten()
    return fertig
Abgesehen davon ist es die Liste triangle, in das Ergebnis ist.
Ein Funktionrumpf drumherum und ein return triangle
am Ende, und schon ist es fertig:

Code: Alles auswählen

    # Pascal'sches Dreieck

def createPascalschesDreieck(zeilen):
    triangle = []

    for i in xrange(zeilen):
        tmp = []
        if  i != 0:
            for j in xrange(i):
                if j == 0 or j == i-1:
                    tmp.append(1)
                else:
                    if i>2:
                        tmp.append(triangle[-1][j-1]+triangle[-1][j])
            triangle.append(tmp)
        
    return triangle
            
"I don't know who discovered water, but it wasn't a fish."
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

BlackJack hat geschrieben:Ausserdem gibt's im Pascalschen Dreieck keine Nullen.
Wobei es zum Berechnen der Zeilen hilfreich sein kann, wenn man zur vorigen Zeile an den Rändern Nullen hinzufügt, da man so die Sonderfälle vermeiden kann:

Code: Alles auswählen

def pascal(depth):
    triangle = [[1]]
    for row in xrange(1, depth):
        prev_row = [0]+ triangle[-1] +[0]
        new_row = []
        for col in xrange(1, len(prev_row)):
            new_row.append(prev_row[col-1] + prev_row[col])
        triangle.append(new_row)
    return triangle
oder kompakter

Code: Alles auswählen

def pascal(depth):
    triangle = [[1]]
    for row in xrange(1,depth):
        prev_row = [0]+ triangle[-1] +[0]
        new_row = [ sum(neighbours) for neighbours in zip(prev_row, prev_row[1:]) ]
        triangle.append(new_row)
    return triangle
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
Antworten