Pascalsches Dreieck

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

Montag 21. Mai 2018, 16:28

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!
Sirius3
User
Beiträge: 7905
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 21. Mai 2018, 17:29

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))
StareDog
User
Beiträge: 50
Registriert: Donnerstag 19. April 2018, 09:59

Samstag 26. Mai 2018, 08:16

danke für den code!
Antworten