diff options
| -rwxr-xr-x | zahlenspiel.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/zahlenspiel.py b/zahlenspiel.py new file mode 100755 index 0000000..6adff0b --- /dev/null +++ b/zahlenspiel.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# getestet mit Python 2.7.8 und 3.4.2 +# -*- coding: utf-8 -*- + +from random import randrange + +def gcd(a, b): # größter gemeinsamer Teiler nach Euklid + while b: + a, b = b, a % b + return a + +# berechnet einen ungekürzten Bruch a/b mit gekürztem Bruch p/q nach Schwierigkeits`stufe` +# `stufe` ist 0 (leicht), 1 (mittel) oder 2 (schwer) +def bruch(stufe): + length = 4 if stufe == 0 else 5 + + erfolg = False + while not erfolg: + suchen = True + while suchen: + p = randrange(1, (stufe + 1) * 10) + q = randrange(stufe * 10 - p, (stufe + 1) * 10 - p) + suchen = (gcd(p, q) != 1) # falls nicht kürzbar + + x = 2 + suchen = True + while suchen: + a, b = p * x, q * x + + if len(str(a)) + len(str(b)) == length: + suchen = False + erfolg = True + else: + x += 1 + if len(str(a)) + len(str(b)) > length: + suchen = erfolg = False # neue Zahlen generieren + + return a, b, p, q + +# gibt `anzahl` Aufgaben mit `stufe` (0 - leicht, 2 - schwer) aus +def aufgaben(stufe, anzahl): + for j in range(anzahl): + a, b, p, q = bruch(stufe) + print(str(a) + " / " + str(b) + " = " + str(p) + " / " + str(q)) + +aufgaben(randrange(4), randrange(1, 10)) |
