Python :: Aufgabe #297

2 Lösungen Lösungen öffentlich

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ß

Lösungen:

vote_ok
von Marty3000 (680 Punkte) - 04.11.2020 um 12:46 Uhr
Quellcode ausblenden 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)

vote_ok
von Klaus (1960 Punkte) - 10.12.2020 um 12:24 Uhr
Quellcode ausblenden 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)}')
1988263

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.