Collatz-Sequenz in Python

Jay Shaw 10 Oktober 2023
  1. Programmierlogik hinter der Collatz-Sequenz
  2. Collatz-Sequenz in Python mit if-else
  3. Collatz-Sequenz in Python mit while-Schleife und Ausnahmebehandlung
  4. Collatz-Sequenz in Python mit Rekursion
  5. Collatz-Sequenz in Python mit while-Schleife
  6. Abschluss
Collatz-Sequenz in Python

Die Collatz-Folge ist eine mathematische Folge von Zahlen, die als 1 endet. Es wird gesagt, dass, wenn eine Zahl einer bestimmten Reihe von Operationen unterzogen wird, die letzte verbleibende Ziffer 1 sein muss.

Dieser Artikel erklärt, wie man Programme schreibt, die die Collatz-Sequenz in Python für eine beliebige Zahl finden.

Programmierlogik hinter der Collatz-Sequenz

Vier Operationen müssen befolgt werden, um die Collatz-Sequenz einer bestimmten Zahl in Python zu finden.

  1. Überprüfen, ob die Zahl gerade oder ungerade ist.
  2. Bei einer geraden Zahl dividiert das Programm die Zahl n durch 2 und gibt sie aus.
  3. Bei einer ungeraden Zahl multipliziert das Programm n mit 3, addiert dann 1 dazu und gibt es aus.
  4. Das Programm prüft, ob sich die Zahl n auf 1 reduziert hat; wenn nicht, läuft er wieder.

Für eine gegebene Zahl 5 ist die Collatz-Sequenz - 16, 8, 4, 2, 1.

In den folgenden Abschnitten werden vier Möglichkeiten zum Erstellen eines Programms erläutert, das collatz-Sequenzen in Python anzeigt.

Collatz-Sequenz in Python mit if-else

Das folgende Programm zeigt eine einfache Darstellung, um eine Collatz-Sequenz in Python zu finden. Eine Methode collatz_seq wird mit einem einzigen Parameter numb erstellt.

Die in diesem Programm verwendete Logik verwendet eine if-else-Anweisung innerhalb einer while-Schleife. Zuerst führt das Programm eine while-Schleife innerhalb der Methode collatz_seq aus, um zu prüfen, ob der Wert in der Variablen numb 1 ist oder nicht.

Wenn die Variable numb nicht 1 ist, prüft das Programm ein zweites Mal, ob die angegebene Zahl gerade oder ungerade ist, indem es eine if-else-Anweisung verwendet. Innerhalb der if-Anweisung prüft das Programm, ob die durch 2 geteilte Zahl einen Rest übrig lässt.

if numb % 2 == 0:
    pass

Wenn die Zahl gerade ist, teilt das Programm sie durch 2 und gibt sie aus. Falls die Zahl ungerade ist, wechselt das Programm zur elif-Anweisung, wo numb % 2 == 1 true ist.

Die Variable numb wird mit 3 multipliziert und zu 1 addiert. Zuletzt wird die Zahl ausgegeben.

if numb % 2 == 0:
    pass
elif numb % 2 == 1:
    numb = (numb * 3) + 1
    print(numb)

Diese Abfolge von Schleifen führt die Operationen des Prüfens, Aktualisierens und Druckens der Zahl weiter aus, bis der Wert von numb auf 1 reduziert ist und wenn der Wert von numb als 1 gefunden wird, wird das while Schleifenausgänge.

Zuletzt wird die Methode collatz_seq aufgerufen und als Wert des Arguments 5 übergeben.

def collatz_seq(numb):
    while numb != 1:
        if numb % 2 == 0:
            numb = numb // 2
            print(numb)

        elif numb % 2 == 1:
            numb = (numb * 3) + 1
            print(numb)


collatz_seq(5)

Es zeigt die Collatz-Sequenz in Python für eine Eingabe = 5 ist:

16
8
4
2
1

Collatz-Sequenz in Python mit while-Schleife und Ausnahmebehandlung

Das vorherige Beispiel demonstrierte ein Programm, das die collatz-Sequenz einer gegebenen Zahl in Python ausgibt. Aber das Programm hat viele lose Enden, die zu Abstürzen führen können.

Beispielsweise stürzt das Programm ab, wenn für den Wert numb ein String angegeben wird. Ebenso stürzt das Programm ab, wenn eine negative Ganzzahl als Eingabe bereitgestellt wird.

Ein Programm muss ein ausfallsicheres Verfahren haben, um eingegebene Daten zu filtern, um es zu lösen.

In diesem Programm zum Auffinden der Collatz-Sequenz in Python wird das Bibliothekspaket sys importiert. Die Systemfunktion sys beendet Programme, wenn eine Bedingung erfüllt ist.

Eine Methode collatz_seq wird wie beim letzten Programm mit einem Parameter numb erstellt.

import sys
def collatz_seq(numb):

Eine if-elif-Anweisung prüft, ob die Zahl gerade oder ungerade ist. Wenn die Zahl gerade ist, wird die Zahl durch 2 geteilt und die neue Zahl wird in der Variablen Wert gespeichert.

Wenn die Zahl ungerade ist, wird die Variable Wert mit einem Wert gespeichert, der mit 3 bzw. 1 multipliziert und addiert wird.

if numb % 2 == 0:
    value = numb // 2
elif numb % 2 != 0:
    value = (3 * numb) + 1

Im Gegensatz zum letzten Programm wird das aktualisierte Ergebnis in der Variablen value gespeichert. Nach dem if-elif-Block werden zwei while-Schleifen erstellt.

Die erste while-Schleife prüft, ob der Wert der Variable value 1 ist, und druckt und verlässt die Schleife, wenn der Fall true ist. Wenn value nicht 1 ist, dann gibt die zweite while-Schleife den value aus und kopiert ihn in die Variable numb.

while value == 1:
    print(value)
    sys.exit()

while value != 1:
    print(value)
    n = value

Zuletzt wird die Methode collatz_seq rekursiv mit dem Argument numb aufgerufen. Die Methode ruft sich selbst auf, bis der Wert auf 1 reduziert wird, dann wird das Programm mit der Funktion sys.exit() beendet.

return collatz_seq(numb)

Außerhalb der Methode collatz_seq wird eine Variable number erstellt, die Benutzereingaben entgegennimmt. Ein Ausnahmebehandlungsblock wird hinzugefügt, um ungültige Eingaben abzufangen.

Innerhalb des try-Blocks wird die Variable number als ganzzahlige Eingabe genommen. Eine if-Anweisung wird verwendet, um zu prüfen, ob die Zahl negativ ist oder nicht.

Bei true wird die Polarität der Zahl geändert und eine entsprechende Meldung ausgegeben. Zuletzt wird die Methode collatz_seq aufgerufen.

print('Enter a number: ')
try:
    number = int(input())
    if number < 0:
        number = abs(number)
        print("A negative number entered")
    collatz_seq(number)

Innerhalb des except-Blocks wird ein ValueError für andere Eingaben als Integer ausgegeben, zusammen mit einer Fehlermeldung.

except ValueError:
    print('You must enter an integer type.')

Der vollständige Code ist unten angegeben.

import sys


def collatz_seq(numb):
    if numb % 2 == 0:  # Remainder = 0, Checks for even number
        value = numb // 2
    elif numb % 2 != 0:  # Remainder = 1, Checks for odd number
        value = (numb * 3) + 1

    while value == 1:  # If value is 1
        print(value)
        sys.exit()  # Program exits

    while value != 1:  # The loop runs until the value is not 1.
        print(value)
        numb = value  # Value of value is copied to numb
        return collatz_seq(numb)


print("Enter a number: ")  # Input statement
try:
    number = int(input())  # Typecast as Integer Input
    if number < 0:
        number = abs(number)
        print("A negative number entered")
    collatz_seq(number)
except ValueError:
    print("You must enter an integer type.")

Ausgang:

Enter a number:
10
5
16
8
4
2
1

Bei einer ungültigen Eingabe:

Enter a number:
j
You must enter an integer type.

Collatz-Sequenz in Python mit Rekursion

Dieses Programm findet die Collatz-Sequenz in Python mit einem anderen Methodenaufruf. Der with-Block wird ausserhalb der collatz-Methode erstellt, damit das Programm Eingaben für eine bestimmte Anzahl von Malen annehmen kann.

Die Methode collatz prüft, ob die Zahl gerade oder ungerade ist, und führt Operationen wie das vorherige Programm durch. Außerhalb der Methode benötigt das Programm zwei Eingaben; Die erste nimmt eine Reihe von for-Schleife.

Innerhalb eines try-Blocks wird die zweite Eingabe bereitgestellt. Die while-Schleife ruft die Methode collatz so lange auf, bis der Wert von numb auf 1 reduziert wird.

Innerhalb der while-Schleife wird der Wert von numb wiederholt übergeben und zurückgegeben.

def collatz_seq(numb):
    if numb % 2 == 0:  # even
        print(numb // 2)
        return numb // 2
    elif numb % 2 != 0:  # odd
        value = 3 * numb + 1
        print(value)
        return value


c = int(input("Enter count: "))
for c in range(c):
    try:
        n = input("Enter number: ")
        while n != 1:
            n = collatz_seq(int(n))
    except ValueError:
        print("Value Error. Please enter integer.")

Ausgang:

Enter count: 2
Enter number: 5
16
8
4
2
1
Enter number: 6
3
10
5
16
8
4
2
1

Collatz-Sequenz in Python mit while-Schleife

Bisher haben wir gelernt, wie man ein Programm erstellt, das die Collatz-Sequenz in Python für eine bestimmte Zahl ausgibt. In diesem Programm wurde auch die Anzahl der Iterationen berechnet, die das Programm brauchte, um das Ergebnis auf 1 zu reduzieren.

Eine Methode solve wird mit einem Parameter numb erstellt. Innerhalb einer if-Anweisung gibt das Programm 0 zurück, wenn dem Parameter ein Wert = 0 gegeben wird.

Eine neue Variable Länge wird erstellt, die verwendet wird, um die Anzahl der Iterationen zu zählen.

Eine Variable Länge wird angelegt und ihr 1 zugewiesen. Es wird eine while-Schleife mit der Ausgangsbedingung numb != 1 erstellt. Dies hält die Schleife am Laufen, bis der Wert von numb 1 ist.

Innerhalb der while-Schleife werden die Operationen auf numb durch eine einzige Anweisung ausgeführt. Das numb wird durch 2 geteilt, wenn es gerade ist, sonst durch (3 * numb + 1).

Die Operationen werden in einer einzigen Anweisung ausgeführt, sodass der Wert von length bei jeder Iteration aktualisiert wird.

numb = (numb / 2) if numb % 2 == 0 else (3 * numb + 1)

Der aktuelle Wert von numb und length wird ausgedruckt, und dann wird length um 1 erhöht. Das Programm sucht nach geraden oder ungeraden Zahlen, aktualisiert numb und druckt es aus.

Dann wird die Länge für die nächste Operation inkrementiert.

Im letzten Schritt erhöht das Programm eine zusätzliche 1 auf Länge. Diese zusätzliche Zahl wird subtrahiert und der endgültige Zählwert von Länge wird zurückgegeben.

Zuletzt wird die Methode solve aufgerufen und ein Argument 10 übergeben, und das Ergebnis wird gedruckt.

def solve(numb):
    if numb == 0:
        return 0
    length = 1
    while numb != 1:
        numb = (numb / 2) if numb % 2 == 0 else (3 * numb + 1)
        print("Count = ", length, "Value = ", numb)
        length += 1
    return length - 1


print("Total iterations = ", solve(10))

Ausgang:

Count =  1 Value =  5.0
Count =  2 Value =  16.0
Count =  3 Value =  8.0
Count =  4 Value =  4.0
Count =  5 Value =  2.0
Count =  6 Value =  1.0
Total iterations =  6

Abschluss

Dieser Artikel enthält verschiedene Beispiele zum Erstellen von Programmen, die die Collatz-Sequenz in Python anzeigen. Nachdem der Leser den Artikel durchgesehen hat, kann der Leser auf verschiedene Weise eine Collatz-Sequenz in Python erstellen.

Verwandter Artikel - Python Sequence