Secuencia Collatz
Descripción
Escribe una función llamada collatz
que tome un parámetro llamada number
. Si number
es par, entonces collatz
debe imprimir el resultado de number // 2
y devolver este valor. Si number
es impar, entonces collatz
debe imprimir y devolver el resultado de 3 * number + 1
.
Luego escribe un programa que permita que el usuario ingrese un entero, continúa llamando a la función collatz
en ese número hasta que el valor devuelto sea 1. Sorprendentemente, tarde o temprano esta secuencia llega a uno para cualquier entero. Ni siquiera los matemáticos están seguros del porqué. Tu programa explora lo que se conoce como la secuencia Collatz, algunas veces conocido como el problema imposible de matemáticas más simple.
Recuerda convertir el valor de retorno de la función input
a un entero con la función int
: de otra forma, será un valor tipo string.
Consejo: Un número entero es par si el residuo de su división entre 2 es cero (number % 2 == 0
) y es impar si number % 2 == 1
.
Ejemplo de Ejecución:
Ingresa un número:
3
10
5
16
8
4
2
1
Validación de datos
Agrega las instrucciones try
and except
al código anterior, para detectar si el usuario ingresa un valor que no es un número entero. Normalmente, la función int
lanzará un error tipo ValueError
si se le pasa un valor no entero, por ejemplo int('puppy')
. Dentro de la instrucción except
, imprimee un mensaje al usuario diciendo que debe ingresar un entero.
Solución
Mostrar solución
def collatz(number):
if number % 2 == 0:
return number // 2
else:
return 3 * number + 1
try:
user_number = int(input('Ingresa un número entero: '))
except:
print('Debes ingresar un número entero')
exit()
while user_number != 1:
print(user_number)
user_number = collatz(user_number)
print(user_number)
Fuente del ejercicio: https://automatetheboringstuff.com/2e/chapter3/#calibre_link-150