Ich würde die von BlackJack ursprünglich ewähnte list comprehension verwenden. Hier zB. für das Pascalsche Koeffizientendreieck:
Code: Alles auswählen
from math import factorial
import pprint
def p(n, k):
return factorial(n) / (factorial(n - k) * factorial(k))
def pascals_triangle(m):
return [[p(x, y) for y in xrange(x + 1)] for x in xrange(m)]
pprint.pprint(pascals_triangle(7))
Ergebnis:
Code: Alles auswählen
[[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1]]
Analog dazu kannst du eine Funktion
h(n, k) programmieren, die den Wert für die Position (n, k) im Dreieck berechnet. Außerdem könntest du einen pretty printer bauen, um es in der beliebten Christbaumform auszugeben.
[EDIT]
Hier ein Template, das du ausprogrammieren kannst:
Code: Alles auswählen
from math import factorial
import pprint
def h(n, k):
return ...
def harmonic_triangle(m):
return [[h(x, y) for y in xrange(1, x + 1)] for x in xrange(1, m + 1)]
pprint.pprint(harmonic_triangle(7))
Ich habe
h(n, k) ausprogrammiert und das Ergebnis ist:
Code: Alles auswählen
[[(1, 1)],
[(1, 2), (1, 2)],
[(1, 3), (1, 6), (1, 3)],
[(1, 4), (1, 12), (1, 12), (1, 4)],
[(1, 5), (1, 20), (1, 30), (1, 20), (1, 5)],
[(1, 6), (1, 30), (1, 60), (1, 60), (1, 30), (1, 6)],
[(1, 7), (1, 42), (1, 105), (1, 140), (1, 105), (1, 42), (1, 7)]]
Hint: man kann die Funktion
p(n, k) verwenden, um
h(n, k) zu definieren.
In specifications, Murphy's Law supersedes Ohm's.