diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-14 19:26:18 +0100 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-11-14 19:26:18 +0100 |
| commit | 99b74acf56f4709346a54da0e69b57e3b24e53ab (patch) | |
| tree | 1440b341b2a2c34ad0c2cc73071d37b894a3f3e1 | |
| parent | ffb744f2b5c3d6e3b9f185e1e3cb564ac1e78393 (diff) | |
| download | bwinf-33-99b74acf56f4709346a54da0e69b57e3b24e53ab.tar.gz bwinf-33-99b74acf56f4709346a54da0e69b57e3b24e53ab.zip | |
Lösung: Zahlenspiel
| -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)) |
