summaryrefslogtreecommitdiff
path: root/zahlenspiel.py
blob: 6adff0b5e4a8ee3ec3aedddbb096e1f331f9db4b (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
#!/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))