Progresión matemática en python, ejercicio del libro


En esta ocasión les traigo uno de los ejercicios que me parecieron realmente interesante del libro Aprenda-a-pensar-como-programador-en-python Como ustedes saben disponible en formato [pdf] en internet, el ejercicio es el de la progresión aritmética de un numero en el libro llamado n, al estudiarlo si es par se divide entre 2 , pero si es impar se multiplica por 3 y se le suma uno hasta que el valor de n sea 1 por lo que estamos hablando de un ciclo while ya que no sabemos cuando terminara 😀

Quedando asi en python:


n = int(input( "Introduce el valor de n: "))

while n != 1: # Aqui se revisa si n es diferente de 1

print n,

     if n%2 == 0: # Aquí se revisa si n sea par

          n = n/2 # Aquí se ejecuta la ecuación en caso de que n sea par

     else: # Aquí se revisa si n sea impar implícitamente es par o no lo es

          n = n*3+1 # Aquí se ejecuta la ecuación en caso de que n sea impar

Si ejecutamos el código nos preguntara el valor de n, si por ejemplo ingresamos 55 nos devolverá


55 166 83 250 125 376 188 94 47 142 71 214 107 322 161 484 242 121 364 182 91 274 137 412 206 103 310 155 466 233 700 350 175 526 263 790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754 377 1132 566 283 850 425 1276 638 319 958 479 1438 719 2158 1079 3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488 244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2

un numero bastante extraño lo que da pero no es Azar es la sucesión matemática de 55 para llegar a 1 utilizando los parámetros de las comparaciones para cada ecuación hecha anteriormente, ahora que pasaría si por ejemplo colocamos -2 entraríamos a un ciclo infinito ya que el numero negativo nunca se hará positivo entonces debemos colocar una excepción o mas bien un condicional si el numero es menor que 1 el programa no entra al bucle y exige solo números positivos


n = int(input( "Introduce el valor de N: "))
if n < 1:
     print "Solo Numero positivos mayores que 0"
else:
     while n != 1:
          print n,
          if n%2 == 0:
               n = n/2
          else:
               n = n*3+1

 

¿Que pasa si el numero no es entero y por que? Por ejemplo ingresa 55.6

Hasta ahora no hemos hecho en realidad nada :S, por ejemplo podemos agregar un rango desde el numero este hasta a este, lo que quedaría así:


n = int(input( "Introduce el valor de N: "))
m = int(input( "Introduce el valor de M: "))
if (n or m) < 1:
     print "Solo Numero positivos mayores que 0"
else:
     for n in range(n,m):
          while n != 1:
               print n,
               if n%2 == 0:
                    n = n/2
               else:
                    n = n*3+1
          print n

Y el programa pediría 2 números y luego imprimiría por pantalla todas las progresiones 😀 se preguntaran por que el print para cerrar el bucle, comprueben eliminando a ver que pasa 😀 o eliminen el que esta dentro del while…

Ahora mismo podríamos pensar para que nos sirve esto con un poquito de imaginación y entusiasmo podríamos hacer mucho, para la próxima le agregaremos algunas cosas mas y le daremos un uso 😀

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s