#!/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))