summaryrefslogtreecommitdiff
path: root/zahlenspiel.py
blob: e8891f92147008c2bb8d8289fe46aa07456306cb (plain)
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))