Python bietet unglaublich praktische Funktionen, um "höhere" Programme zu schreiben. Hierbei kann man sehr
beschreibend vorgehen, wie man es von der Mathematik gewöhnt ist. Man muss sich weniger an den Einzelheiten aufhalten, welche eine pure imperative Herangehensweise bedingt.
Zunächst muss man sich dem Problem bewusst werden:
Was ist das Einmaleins?
Das kleine Einmaleins ist die Menge zweier Faktoren und deren Produkte, für die gilt, dass die Faktoren Elemente aus der Menge {1, 2, ..., 10} sind.
Hier biete sich das
kartesische Produkt an, um die möglichen Faktorkombinationen zu beschreiben:[codebox=pycon file=Unbenannt.txt]>>> from itertools import product # kartesisches Produkt
>>> list(product({1, 2}, {'a', 'b', 'c'}))
[(1, 'a'), (1, 'c'), (1, 'b'), (2, 'a'), (2, 'c'), (2, 'b')][/code]
Wendet man dieses nun auf die Menge der natürlichen Zahlen an, welche Faktoren des kleinen Einmaleins sind (
{1, 2, ..., 10}) erhält man 100 2-Tupel mit den Faktorkombinationen:[codebox=pycon file=Unbenannt.txt]>>> xs = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> list(product(xs, xs))
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (3, 1), (3, 2), (3, 3), (3, 4), ..., (10, 8), (10, 9), (10, 10)] # Ergebnis gekürzt[/code]
Mittels
tuple-unpacking und einer for-Schleife kann man nun auf die einzelnen Elemente des Tupels zugreifen und z. B. weiterverarbeiten oder ausgeben:[codebox=pycon file=Unbenannt.txt]>>> for a, b in product(xs, xs):
... print('{} * {} = {}'.format(a, b, a * b))
...
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
1 * 10 = 10
2 * 1 = 2
2 * 2 = 4
# ...
10 * 8 = 80
10 * 9 = 90
10 * 10 = 100
# ... Ergebnis gekürzt[/code]
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"