#!/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 a/b mit gekürztem Bruch p/q 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))