Páginas

domingo, 29 de junio de 2014

Python: Un programa escrito de atrás para adelante.

No se como sera el proceso mental de los programadores, pero en mi caso cuando necesito hacer algún script comienzo decidiendo la acción clave que va a realizar el programa y escribo eso primero.   Las variables y como cargarles un valor es algo que voy decidiendo a medida que lo voy necesitando.

Por ejemplo hoy en una clase nos pidieron un mini programa para encontrar el numero mayor entre un listado ingresado por el usuario.  Lo primero que hice fue plantear que si el numero actual (number) es mayor al numero máximo (maxnumber) entonces el numero actual se convertirá en el nuevo numero máximo:


if number > maxnumber:      
    maxnumber = number

Bien ahora, de donde saco el valor de number? Pues de un listado de datos que debe ingresar el usuario. Para eso se utiliza la función de raw_input() y los números que se ingresen se almacenan en una variable:

numberlist = raw_input("Enter your list of numbers, separated by commas >")

Pero number list va a contener una cadena de texto, como puedo sacar cada numero de esa cadena? con la función str.split()

numberarray = numberlist.split(",")

Lo que hice fue separar por comas todos los datos ingresados en la cadena de texto numberlist y guardarlos en la variable numberarray. Esto es lo que tengo hasta ahora:

numberlist = raw_input("Enter your list of numbers, separated by commas >")
numberarray = numberlist.split(',')

if number > maxnumber:
        maxnumber = number

Entonces ya tengo una colección de números, ahora me toca que comparar cada numero dentro de esa lista con el numero máximo. Pero de donde saco el maxnumber inicial? bueno pues de la colección de números en numberarray, extraigo el primer numero, que se encuentra en la posición 0:

maxnumber = numberarray[0]

Pero esperen un momento, todos los datos en numberarray están en formato de texto. Entonces lo que extraiga de esa lista debo convertirlo a formato de numero integral con la función int():

maxnumber = int(numberarray[0])

Entonces ahi si,  hasta ahora llevo:

numberlist = raw_input("Enter your list of numbers, separated by commas >")
numberarray = numberlist.split(',')
maxnumber = int(numberarray[0])

if number > maxnumber:
        maxnumber = number

Ya tengo todos los datos que necesitaba, una colección de números para comparar y un numero máximo inicial de referencia.  Ahora viene lo bueno, como extraer el valor de "number" de la colección de números para compararlo con maxnumber y repetir ese proceso para cada uno de los números? con los maravillosos Loops.

for number in numberarray:

Con este código estoy diciendo dos cosas:

Cada elemento dentro de "numberarray" se asignará temporalmente a la variable  "number".
Que el proceso que escriba a continuación se repetirá para cada elemento dentro de numberarray.

for number in numberarray:
    number = int(number)
 
    if number > maxnumber:
        maxnumber = number

Como tomos los numeros en la colección están en formato de texto, tengo que convertir cada numero a formato integral con la función int(). Al final incluyo un print para mostrar el resultado final y listo. El código me queda de esta manera:


numberlist = raw_input("Enter your list of numbers, separated by commas >")
numberarray = numberlist.split(',')
maxnumber = int(numberarray[0])

for number in numberarray:
    number = int(number)
 
    if number > maxnumber:
        maxnumber = number


print "El numero mayor es: %s" %maxnumber

Y en la ejecuccion se ve así:


Rubens-MacBook-Pro:python eljayan$ python maxnum.py

Enter your list of numbers, separated by commas >1,4,3,5,6,6,1,2,1,21,31,22,14,54,3,2,3,44,23,43,13
El numero mayor es: 54




No hay comentarios:

Publicar un comentario