functions-python

Estoy un poco cansado… nuestra simpatía con Noruega ha despertado más interés del que pensaba y la promoción de viviendas que llevaba dos años vacía se ha llenado de nuevos vecinos. Cada vez que alguien viene a vivir a nuestro pueblo tengo que volver a escribir todo mi código generador de nombres noruegos.

Recuerdo que, en mis libros del colegio, había una página con las cosas que iba a usar muchas veces en el curso, para que, cuando las necesitase, fuese a esa página y lo mirase. ¿No podrían hacer lo mismo los que crearon Python? Ahora que lo pienso lo mismo lo han hecho y yo no lo sé. Voy a indagar un poco en Internet.

Mira por dónde existe una cosa que se llama función y parece que me puede ayudar, creo que seré capaz de usarla tras leer un par de foros sobre el tema.

La idea es la siguiente: tengo que almacenar el código con un nombre e indicarle a Python que se corresponde con una función:

Con ese código he declarado mi función generar_nombre_noruego. Después podré utilizarlo simplemente escribiendo el nombre de la función donde necesite usarlo:

Recuerdo de mis libros de texto del colegio que tenía en una página explicaciones de cosas como el Teorema de Pitágoras o la Ecuación de segundo grado. En esa página podía mirar esas funciones en cualquier momento, estaba la fórmula y/o explicación que necesitaba. Supongo que ahora dentro de esta función tendré que poner el código que me generará el nombre noruego. Madre mía la que estoy liando con los nombres noruegos.

Parece ser que hay más cosas a tener en cuenta. En este foro dice el usuario LifeOfBrian que dentro de los paréntesis puedo incluir argumentos, ¿qué narices es eso?… parece ser que son parámetros que la función necesita para poder ejecutarse. Podría crear la función y, al llamarla, indicar si quiero un nombre de hombre o de mujer:

Cuando use la función tendré que decir, en el sexo, si quiero “hombre” o “mujer”.

Vale, ahora a añadir el código que ya creé para generar un nombre noruego, pero tengo que hacerlo de forma que el programa cree un nombre de hombre o de mujer automáticamente… ¿qué tal un condicional? Si es hombre, elige en la lista de nombres de hombre y, en cambio, si es mujer, elige en la lista de nombres de mujer. El código completo sería:

Muy bien, ya tengo mi función, pero tengo un problema. Cuando la llamo con generar_nombre_noruego(“hombre”) no ocurre nada:

Funciones01

El código se está ejecutando, pero no parece generar ningún nombre noruego. Volveré a mirar por Internet…

Ya veo que está pasando, la función se ejecuta, pero no devuelve nada, ¡necesito que la función me devuelva un nombre!

Para que eso ocurra tengo que crear una función con retorno e indicar al final de la función qué quiero que me devuelva:

Veamos si ahora me devuelve un nombre de hombre noruego:

Funciones02

¡Ya está! Ahora puedo generar todos los que quiera seguidos:

Funciones03

Pero… ¿ahora cómo puedo meter todos esos nombres en mi lista? Si sólo los está generando y andar copiando y pegando no me parece muy adecuado.

¿Y si lo guardo en una variable? O mejor aún, ¡lo puedo añadir directamente a mi diccionario! Voy a usar el siguiente código:

A ver qué ocurre al ejecutarlo:

Funciones04

¡Perfecto! Ya tengo cinco nombres en mi diccionario. Sólo quedaría añadir un código que no permita que dos ciudadanos tengan el mismo nombre y apellidos.

Hoy está saliendo todo a la primera hoy. Que rápido he descubierto cómo sería el código:

He incluido un while, en esta ocasión me resulta muy fácil volver a buscar un nombre válido si el elegido ya está en el diccionario, ya que puedo llamar a la función generar_nombre_noruego de nuevo. ¡Esto de usar código es una verdadera maravilla!