Collatz-Sequenz in Python
- Programmierlogik hinter der Collatz-Sequenz
-
Collatz-Sequenz in Python mit
if-else
-
Collatz-Sequenz in Python mit
while
-Schleife und Ausnahmebehandlung - Collatz-Sequenz in Python mit Rekursion
-
Collatz-Sequenz in Python mit
while
-Schleife - Abschluss
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.
- Überprüfen, ob die Zahl gerade oder ungerade ist.
- Bei einer geraden Zahl dividiert das Programm die Zahl
n
durch 2 und gibt sie aus. - Bei einer ungeraden Zahl multipliziert das Programm
n
mit 3, addiert dann 1 dazu und gibt es aus. - 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.