Seite 1 von 1

Pascalsches Dreieck

Verfasst: Montag 21. Mai 2018, 16:28
von StareDog
Hallo zusammen, hab mal wieder eine Aufgabe

b =
[[1
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1]]

1. Erzeugen Sie ein Feld b von Feldern zunehmender Länge zur Repräsentation des Pascalschen Dreiecks
(siehe https://de.wikipedia.org/wiki/Pascalsches_Dreieck). Für n ∈ N0 gilt b[n][0] =
b[n][n] = 1 und für k ∈ N, 0 < k < n gilt b[n][k] = b[n − 1][k − 1] + b[n − 1][k].2

Code: Alles auswählen

length=int(input("length="))
b=[]

for x in range(0,length):
    b.append([])

for i in range(0,length):
    for j in range (0,i+1):
        if i == j:
            b[i].append(1)
        elif j == 0:
            b[i].append(1)
        else:
            b[i].append(b[i-1][j-1]+b[i-1][j])
print(b)
Gibt es da noch effizientere Lösungen für?
Außerdem wollte ich fragen, wie kann ich die Ausgabe sodass die Listen in Zeilen ausgegeben werden wie oben und nicht in Reihe wie bei meiner Lösung?
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]

Vielen Dank!

Re: Pascalsches Dreieck

Verfasst: Montag 21. Mai 2018, 17:29
von Sirius3
Statt erst eine Liste mit leeren Listen zu erzeugen, generiert man die Listen dann, wenn man sie auch füllt. Und die Ausgabe mußt Du halt so programmieren, wie Du sie haben willst.

Code: Alles auswählen

from itertools import islice

def generate_pascal():
    a = []
    while True:
        a = [1] + [x+y for x,y in zip(a[1:] + [0], a)]
        yield a

b = list(islice(generate_pascal(), 5))

Re: Pascalsches Dreieck

Verfasst: Samstag 26. Mai 2018, 08:16
von StareDog
danke für den code!