summaryrefslogtreecommitdiff
path: root/zahlenspiel.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-11-14 19:26:18 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2014-11-14 19:26:18 +0100
commit99b74acf56f4709346a54da0e69b57e3b24e53ab (patch)
tree1440b341b2a2c34ad0c2cc73071d37b894a3f3e1 /zahlenspiel.py
parentffb744f2b5c3d6e3b9f185e1e3cb564ac1e78393 (diff)
downloadbwinf-33-99b74acf56f4709346a54da0e69b57e3b24e53ab.tar.gz
bwinf-33-99b74acf56f4709346a54da0e69b57e3b24e53ab.zip
Lösung: Zahlenspiel
Diffstat (limited to 'zahlenspiel.py')
-rwxr-xr-xzahlenspiel.py46
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))