Python :: Aufgabe #297
2 Lösungen
Periodenlänge von Stammbrüchen
Fortgeschrittener - Python
von JKooP
- 01.11.2020 um 09:50 Uhr
Stammbruch nennt man einen Bruch mit einer 1 im Zähler und einer beliebigen natürlichen Zahl im Nenner.
Schreibe eine Methode/Funktion, mit der man die Periodenlänge eines solchen Bruchs berechnen kann.
Beispiele:
1/4 = 0,25 --> Periodenlänge ist 0, da der Bruch abbricht
1/6 = 0,166666… = 0,16 --> Periodenlänge ist 1, da sich nur die Ziffer 6 wiederholt
1/11 = 0,090909… = 0.09 --> Periodenlänge ist 2, da sich die Ziffern 0 und 9 wiederholen
Viel Spaß
Schreibe eine Methode/Funktion, mit der man die Periodenlänge eines solchen Bruchs berechnen kann.
Beispiele:
1/4 = 0,25 --> Periodenlänge ist 0, da der Bruch abbricht
1/6 = 0,166666… = 0,16 --> Periodenlänge ist 1, da sich nur die Ziffer 6 wiederholt
1/11 = 0,090909… = 0.09 --> Periodenlänge ist 2, da sich die Ziffern 0 und 9 wiederholen
Viel Spaß
Lösungen:
Python-Code
def test_297(n): def divide(value: int, divider: int, vr_list): global nk_list global period rst = (value * 10) % divider nxt = ((value * 10) - rst) / divider nk_list.append(int(nxt)) if rst > 0 and vr_list.count((nxt, rst)) == 0: vr_list.append((nxt, rst)) divide(rst, divider, vr_list) elif vr_list.count((nxt, rst)) > 0: period = len(vr_list) - vr_list.index((nxt, rst)) def print_result(n): txt: str = "1/%d = 0." % n for nk in nk_list: txt += str(nk) txt += " Periodlänge %d" % period print(txt) print(1 / n) print("Zahl : %.30f" % (1 / n)) divide(1, n, []) print_result(n) nk_list = [] period: int = 0 if __name__ == '__main__': x = int(input("Bitte eine natürlich Zahl eingeben : ")) test_297(x)
Python-Code
data = [4, 6, 11, 19, 20, 21, 22, 43] def period(value): prime_factors = get_prime_factors(value) if not prime_factors: return '0, da der Bruch abbricht' else: value = 1 for element in prime_factors: value *= element index = 1 while True: if 10 ** index % value == 1: return index else: index += 1 def get_prime_factors(value): test_factor = 2 prime_factors = [] while value > 1: while value % test_factor == 0: value /= test_factor prime_factors.append(test_factor) test_factor += 1 while 2 in prime_factors: prime_factors.remove(2) while 5 in prime_factors: prime_factors.remove(5) return prime_factors for element in data: print(f'1/{element} = {1/element} --> Periodenlänge ist {period(element)}')