1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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))
|