Ej. 35 : Tomando decisiones con funciones…

Ya he aprendido a hacer la sentencia if, funciones y listas. Ahora ha llegado el momento de mezclarlas. Voy a escribir el siguiente código e intentaré averiguar qué hace.

Ej. 35 - Programa 1Ej. 35 - Programa 2Ej. 35 - Programa 3

Ejecutando, y eligiendo opciones, me sale lo siguiente:

Ej. 35 - Terminal 1 opción

Obviamente, éste programa es tremendamente interesante para darle millones de vueltas.

Lo retomaré en un par de post para:

  1. Dibujar un mapa del juego y ver si he entendido el recorrido.
  2. Escribir comentarios en el programa
  3. Darle vueltas al juego, para ampliarlo o simplificarlo.

PREGUNTAS

P: ¿Qué hace while True:?

R: Crea un bucle infinito.

P: ¿Qué hace exit(0)?

R: En muchos sistemas operativos un programa puede abortar la ejecución con exit(0), indicando con el número pasado por parámetro si hubo un error o no. Si ejecutas exit(1), se aborta con el error, pero si se hace con exit(0), se terminará correctamente. El motivo por el que es al revés de la lógica booleana normal (con 0==False), es que así se puede usar diferentes números para indicar diferentes errores. Puedes terminar el programa con exit(100) para errores con resultados diferentes que con exit(2) o exit(1).

Ej. 31 : Tomando decisiones…

En los post iniciales principalmente he mostado cosas en pantalla y eso era necesario para ir por buen camino. Los códigos se ejecutaban empezando por la parte superior, e iban hacia abajo hasta llegar al final. Si hice una función, podía ejecutarla más tarde, pero todavía no tenía ningún elemento para tomar decisiones. Ahora que tengo if, else y elif, puedo crear código que decide cosas.

En el último post escribí varias condiciones simples.

En éste ejercicio preguntaré al usuario y tomaré decisiones basadas en sus respuestas.

Allá voy:

Ej. 31 - Código diver

Realmente éste código es graciosísimo. Me he reído mucho mientras lo escribía y lo iba siguiendo.

Consigue su objetivo, que es captar la atención ya desde que se escribe, por tanto entenderlo mejor, para después querer cambiarlo y nunca mejor dicho, jugar con él y querer crear nuestra propia versión. Es decir, repetir y repetir y repetir, para aprender mejor y acabar de disipar todas las dudas con la práctica personal. Lo que viene siendo la esencia de un programador. El autor demuestra un dominio que ya se empieza a notar. Justo cuando me estaba empezando a desmotivar. ¡¡Por fin!!  🙂

¡¡¡Un 10 al código y al autor!!!

Al ejecutar, por supuesto, voy tomando decisiones que voy respondiendo en el terminal. Algo parecido y relacionado con el ejercicio 11, en el ej. 12, ej. 14, en el ej. 15… pero muchísimo más divertido. Decisiones que condicionarán el resultado que se muestra en pantalla.

Aquí estoy jugando a éste juego de aventura…

Ej. 31 - Juego en Terminal opción 1

He elegido la opción 2 y a continuación la 2. La primera opción «la sabía» pero con la segunda tenía dudas. Me ha guiado el amarillo… ¡¡ He sobrevivido!!! XD

Por supuesto ésto está pidiendo a gritos cambiarlo, marearlo…¡¡¡y darle todas la vueltas del mundo!!!

Lo retomaré.

PREGUNTAS

P: ¿Se puede reemplazar elif con una combinación de sentencias if/else?

R: Buena pregunta. En algunos casos si, pero depende de cómo esté escrito cada if/else. Ésto significa que Python comprobará cada combinación if/else, en lugar de sólo los primeros falsos, como lo haría  if/elif/else. Practica para entenderlo.

P: ¿Cómo indico si un número está entre un rango de números?

R: Tengo dos opciones:

  1. usar 0 < x < 100 o 1 <= x < 10, que es la notación clásica
  2. o usar x in range (1, 10).

P: ¿Y si quiero más opciones en los bloques if/elif/else?

R: Fácil. Sólo debo añadir más bloques elif para posible decisión.

Ej. 30 : Siguiendo con IF-ELSE

Enlazo con el post anterior y puntualizo.

Una sentencia IF crea una derivación en el código al que le dice: «Si ésta expresión boolenana es True, entonces ejecuta el código que hay debajo, en otro caso, sáltatelo».

Es importante el concepto que bloque de código. Los dos puntos al final de la línea de la sentencia IF, le indican a Python que voy a crear un bloque de código al que reservará (no se si es la palabra correcta reservar) 4 espacios. Es exactamente lo mismo que hacía cuando escribía funciones en la primera mitad del libro.

Un ejemplo:

Ej. 30 - Código Ej. 30 - Terminal

Interesante.

PREGUNTITAS

P: ¿Qué es elif?

R: La estructura de control ifelifelsepermite encadenar varias condiciones. elif es una contracción de else if.

Vamos a preguntar a pydoc:

Ej. 30 - Pydoc elif

Añado que me ha gustado mucho el final de ésta página pinchando aquí, donde profundiza un poco más en éste tema, para que quede claro.

P: ¿Qué ocurre si varios bloques elif son True?

R: Buena pregunta. Python comienza con la parte superior y ejecuta el primer bloque con valor True, así que sólo ejecutará el primero.

Ej. 29 : Empezando con IF …

Éste es el código de Python con el que empezaré con la sentencia IF (If clause).

Ej. 29 - Código editor

Por el atasco comentado anteriormente que todavía no he solucionado, lo ejecuto en el terminal.

Ej. 29 - TerminalParece todo correcto. Muy sencillo.

ALGUNAS PREGUNTAS

P: ¿Qué significa *=?

R: El código x += 1 es lo mismo que escribir x = x +1 , pero escribiendo menos. Puedo llamarlo el operador «incrementar en». De la misma manera funciona -= y otras expresiones que aprenderemos más adelante.

P: ¿Por qué el código que está debajo de la sentencia if está identado con 4 espacios? ¿Qué ocurre si no lo identamos?

R: ¿Qué clase de mala traducción es esa? Esa palabra no existe en español. No entiendo lo que quieres decir…

P: ¿¿No sabes lo que es identar en programación??

R: No

P: ¿Quién es el profesor aquí?

P: ¿Qué ocurre si cambio los valores iniciales de las variables people, cats y dogs?

R: Pues vamos a comprobarlo…

Con…

Ej. 29 - Terminal cambio

Resulta…

Ej. 29 - Código editor cambiado

En éste caso hay una Apocalipsis Mascotil y habrá muchos más gatos y perros que personas por lo que el mundo estará lleno de babas y abocado al fracaso… XD