Secuencia de Collatz en Python
- Lógica de programación detrás de la secuencia de Collatz
-
Secuencia de Collatz en Python usando
if-else
-
Secuencia de Collatz en Python usando bucle
while
y manejo de excepciones - Secuencia de Collatz en Python usando recursividad
-
Secuencia de Collatz en Python usando el bucle
while
- Conclusión
La secuencia de Collatz es una secuencia matemática de números que termina en 1. Se dice que cuando un número se somete a un conjunto específico de operaciones, el último dígito que queda debe ser 1.
Este artículo explicará cómo escribir programas que encuentren la secuencia collatz en Python en cualquier número dado.
Lógica de programación detrás de la secuencia de Collatz
Se deben seguir cuatro operaciones para encontrar la secuencia collatz de un número dado en Python.
- Comprobar si el número es par o impar.
- Para un número par, el programa divide el número
n
por 2 y lo imprime. - Para un número impar, el programa multiplica
n
por 3, luego le suma 1 y lo imprime. - El programa comprueba si el número
n
se ha reducido a 1; si no, se ejecuta de nuevo.
Para un número 5 dado, la secuencia collatz será - 16, 8, 4, 2, 1.
Las siguientes secciones explicarán cuatro formas de crear un programa que muestre secuencias collatz en Python.
Secuencia de Collatz en Python usando if-else
El siguiente programa muestra una representación simple para encontrar una secuencia collatz en Python. Se crea un método collatz_seq
con un único parámetro numb
.
La lógica utilizada en este programa utiliza una instrucción if-else
dentro de un bucle while
. Al principio, el programa ejecuta un bucle while
dentro del método collatz_seq
para comprobar si el valor dentro de la variable numb
es 1 o no.
Si la variable numb
no es 1, entonces el programa ejecuta una segunda verificación para encontrar si el número dado es par o impar usando una declaración if-else
. Dentro de la sentencia if
, el programa comprueba si el número dividido por 2 deja algún resto.
if numb % 2 == 0:
pass
Si el número es par, el programa lo divide por 2 y lo imprime. En caso de que el número sea impar, el programa cambia a la sentencia elif
, donde numb % 2 == 1
es true
.
La variable numb
se multiplica por 3 y se le suma 1. Por último, se imprime el número.
if numb % 2 == 0:
pass
elif numb % 2 == 1:
numb = (numb * 3) + 1
print(numb)
Esta secuencia de bucles continúa ejecutando las operaciones de verificación, actualización e impresión del número hasta que el valor de numb
se reduce a 1
y cuando el valor de numb
se encuentra como 1
, el while
salidas de bucle.
Por último, se llama al método collatz_seq
y se pasa 5
como valor del argumento.
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)
Muestra la secuencia collatz en Python para una entrada = 5
es:
16
8
4
2
1
Secuencia de Collatz en Python usando bucle while
y manejo de excepciones
El ejemplo anterior demostró un programa que imprime la secuencia collatz de un número determinado en Python. Pero el programa tiene muchos cabos sueltos que pueden provocar bloqueos.
Por ejemplo, el programa falla si se proporciona una cadena para el valor de adormecer
. De manera similar, el programa falla si se proporciona un número entero negativo como entrada.
Un programa debe tener un procedimiento a prueba de fallas para filtrar los datos ingresados para resolverlo.
En este programa para encontrar la secuencia collatz en Python, se importa el paquete de biblioteca sys
. La función del sistema sys
sale de los programas cuando se cumple una condición.
Se crea un método collatz_seq
con un parámetro numb
como el último programa.
import sys
def collatz_seq(numb):
Una sentencia if-elif
comprueba si el número es par o impar. Si el número es par, el número se divide por 2 y el nuevo número se almacena dentro de la variable valor
.
Si el número es impar, la variable valor
se almacena con un valor multiplicado y sumado por 3 y 1, respectivamente.
if numb % 2 == 0:
value = numb // 2
elif numb % 2 != 0:
value = (3 * numb) + 1
A diferencia del último programa, el resultado actualizado se almacena dentro de la variable valor
. Después del bloque if-elif
, se crean dos bucles while
.
El primer bucle while
comprueba si el valor de la variable valor
es 1 y luego imprime y sale del bucle si el caso se encuentra true
. Si value
no es 1
, entonces el segundo ciclo while
imprime el value
y lo copia dentro de la variable numb
.
while value == 1:
print(value)
sys.exit()
while value != 1:
print(value)
n = value
Por último, el método collatz_seq
se llama recursivamente con el argumento numb
. El método seguirá llamándose a sí mismo hasta que el valor
se reduzca a 1
, entonces el programa sale usando la función sys.exit()
.
return collatz_seq(numb)
Fuera del método collatz_seq
, se crea una variable número
que toma la entrada del usuario. Se agrega un bloque de manejo de excepciones para detectar entradas no válidas.
Dentro del bloque try
, la variable number
se toma como entrada entera. Se utiliza una declaración if
para verificar si el número es negativo o no.
Si se encuentra true
, se cambia la polaridad del número y se imprime un mensaje adecuado. Por último, se llama al método collatz_seq
.
print('Enter a number: ')
try:
number = int(input())
if number < 0:
number = abs(number)
print("A negative number entered")
collatz_seq(number)
Dentro del bloque excepto
, se genera un ValueError
para entradas que no sean un número entero, junto con un mensaje de error.
except ValueError:
print('You must enter an integer type.')
El código completo se da a continuación.
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.")
Producción :
Enter a number:
10
5
16
8
4
2
1
Para una entrada inválida:
Enter a number:
j
You must enter an integer type.
Secuencia de Collatz en Python usando recursividad
Este programa encuentra la secuencia collatz en Python con una llamada de método diferente. El bloque with
se crea fuera del método collatz
para permitir que el programa siga tomando entradas durante un número determinado de veces.
El método collatz
comprueba si el número es par o impar y realiza operaciones sobre él como el programa anterior. Fuera del método, el programa toma dos entradas; el primero toma un rango de bucle for
.
Dentro de un bloque try
, se proporciona la segunda entrada. El bucle while
sigue llamando al método collatz
hasta que el valor de numb
se reduce a 1
.
Dentro del bucle while
, el valor de numb
se pasa y se devuelve repetidamente.
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.")
Producción :
Enter count: 2
Enter number: 5
16
8
4
2
1
Enter number: 6
3
10
5
16
8
4
2
1
Secuencia de Collatz en Python usando el bucle while
Hasta ahora, hemos aprendido cómo crear un programa que imprima la secuencia collatz en Python para un número dado. En este programa también se calculó el número de iteraciones que tardó el programa en reducir el resultado a 1
.
Se crea un método solve
con un parámetro numb
. Dentro de una sentencia if
, el programa devuelve 0
si al parámetro se le da un valor = 0
.
Se crea una nueva variable, longitud
, que se utilizará para contar el número de iteraciones.
Se crea una variable longitud
y se le asigna 1
. Se crea un bucle while
con la condición de salida numb != 1
. Esto mantiene el bucle funcionando hasta que el valor de adormecer
sea 1
.
Dentro del bucle while
, las operaciones en numb
se ejecutan mediante una sola declaración. El entumecido
se divide por 2
si es par, de lo contrario (3 * entumecido + 1)
.
Las operaciones se realizan en una sola instrucción de modo que el valor de longitud
se actualiza con cada iteración.
numb = (numb / 2) if numb % 2 == 0 else (3 * numb + 1)
Se imprime el valor actual de numb
y longitud
, y luego longitud
se incrementa en 1
. El programa busca números pares o impares, actualiza numb
y lo imprime.
Luego se incrementa la longitud
para la siguiente operación.
En el último paso, el programa incrementa un 1
extra a longitud
. Este número adicional se resta y se devuelve el recuento final de longitud
.
Por último, se llama al método solve
y se le pasa un argumento 10
, y se imprime el resultado.
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))
Producción :
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
Conclusión
Este artículo proporciona varios ejemplos de creación de programas que muestran la secuencia collatz en Python. Después de leer el artículo, el lector puede crear una secuencia collatz en Python de varias maneras.