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
47
48
49
50
51
52
|
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# getestet mit Python 2.7.8 und 3.4.2
'''Berechnet einen Bruch zur Übung des Kürzens'''
from random import randrange
def gcd(vala, valb):
'''Berechnet den größten gemeinsamen Teiler nach Euklid'''
while valb:
vala, valb = valb, vala % valb
return vala
def bruch(stufe):
'''Berechnet einen ungekürzten Bruch vala/valb
mit gekürztem Bruch valp/valq nach Schwierigkeits`stufe`.
`stufe` ist 0 (leicht), 1 (mittel) oder 2 (schwer)'''
length = 4 if stufe == 0 else 5
erfolg = False
while not erfolg:
suchen = True
while suchen:
valp = randrange(1, (stufe + 1) * 10)
valq = randrange(stufe * 10 - valp, (stufe + 1) * 10 - valp)
suchen = (gcd(valp, valq) != 1) # falls nicht kürzbar
valx = 2
suchen = True
while suchen:
vala, valb = valp * valx, valq * valx
if len(str(vala)) + len(str(valb)) == length:
suchen = False
erfolg = True
else:
valx += 1
if len(str(vala)) + len(str(valb)) > length:
suchen = erfolg = False # neue Zahlen generieren
return vala, valb, valp, valq
def aufgaben(stufe, anzahl):
'''gibt `anzahl` Aufgaben mit `stufe` (0 - leicht, 2 - schwer) aus'''
for _ in range(anzahl):
vala, valb, valp, valq = bruch(stufe)
print(str(vala) + " / " + str(valb) + \
" = " + str(valp) + " / " + str(valq))
if __name__ == "__main__":
aufgaben(randrange(4), randrange(1, 10))
|