Programar Juegos Arcade
con Python y PygameChapter 3: Juegos de Preguntas y Sentencias If
¿Cómo le decimos a una jugadora que ha superado el mayor puntaje? ¿Cómo le contamos que se ha quedado sin 'vidas'? ¿Cómo le explicamos que ella tiene la llave para abrir la puerta cerrada?
Lo que necesitamos es la sentencia if. La sentencia if es conocida también como sentencia condicional. (Puedes usar el término 'sentencia condicional' para cuando quieras impresionar a tu público con lo listo que eres.) La sentencia if permite al ordenador tomar una decisión. ¿Hace calor en el exterior? ¿Ha llegado al borde de la pantalla la nave espacial? ¿Has retirado mucho dinero de tu cuenta? Un programa puede analizar estas condiciones mediante la sentencia if.
3.1 Comparaciones Básicas
Aquí tenemos algunos ejemplos de estas sentencias if. La primera sección establece dos variables (a y b) para ser usadas con las sentencias if. Entonces, dos sentencias if nos muestran cómo comparar las variables y observar si una de ellas es mayor que la otra. Presionar el botón “Inicio” y observa cómo el ordenador evalúa el código.
# Variables usadas en el ejemplo de sentencia if a = 4 b = 5 # Comparaciones básicas if a < b: print ("a es menor que b") if a > b: print ("a es mayor que b") print("Hecho") |
Variables:
a=4 b=5 Resultado:
a es menor que b Hecho |
Como a es menor que b, la primera sentencia imprimirá ese código cuando se ejecute. Si ambas variables, a y b, fueran iguales a 4, entonces, ninguna de las sentencias if anteriores imprimiría nada. El número 4 no es mayor a 4, por lo que la sentencia if fallaría.
Para mostrar el desarrollo de un programa, podemos usar un diagrama de flujo. En general, la mayoría de personas son capaces de leer un diagrama de flujo, aun cuando no tengan experiencia alguna en programación. Observa cuán fácilmente puedes comprender la Figura 3.1.
Este libro no trata en profundidad los diagramas de flujo ya que son un poco tediosos. Pero si lo que quieres es ser un programador estrella,
te recomiendo que leas más sobre ello en:
http://es.wikipedia.org/wiki/Diagrama_de_flujo
El ejemplo anterior buscaba algo que fuera mayor que o menor que. Los números que hubieran sido iguales no habrían superado la prueba. Para comprobar valores mayores que o iguales que, los siguientes ejemplos nos muestran cómo hacerlo:
if a <= b: print ("a es menor o igual que b") if a >= b: print ("a es mayor o igual que b")
Los símbolos <= y >= deben usarse en orden, no debiendo haber espacios entre ellos. Por ejemplo, =< no funcionaría, ni tampoco < =.
Cuando escribimos estas sentencias en una prueba, algunos estudiantes prefieren usar el símbolo ≤. Por ejemplo:
if a ≤ b:
Este símbolo ≤ realmente no funciona en un programa. Es más, la mayoría ni siquiera sabe cómo escribirlo con el teclado (En el caso que tengan la curiosidad, para escribirlo hay que presionar la tecla 'alt' junto con escribir 243 en el teclado numérico) O sea, cuando escriban su código, recuerden que deben escribir <= y no ≤. Mucha gente pierde puntos en un examen por esta razón; no sean de esta clase personas, por favor.
El siguiente trozo de código comprueba si dos objetos son iguales o no. El operador para comprobar 'es igual a' es == y el operador para 'no igual a' es !=. Aquí se muestran en acción:
# Igual if a == b: print ("a es igual que b") # Distinto if a != b: print ("a y b no son iguales")
ATENCIÓN: Es muy fácil mezclar el uso de == y =. Debes usar == si la pregunta es si son iguales, y usar = si estás asignando un valor.
Los dos errores más comunes con los operadores = y == se muestran aquí debajo:
# Esto está mal a == 1 # Esto también está mal if a = 1: print ("A es uno")
¡Stop! Por favor, tómate un momento, vuelve, y estudia con cuidado los últimos dos ejemplos de código. Ahorrarás tiempo en el futuro si comprendes cuándo usar cada uno, = y ==. No lo adivines.
3.2 Indentación
La indentación importa. Cada línea indentada debajo de la sentencia if solo se ejecutará si la sentencia if es cierta:
if a == 1: print("Si a es uno, esto se imprimirá.") print("Lo mismo que esto.") print("Y que esto.") print("Esto siempre se imprimirá ya que no está indentado.")
La indentación debe ser la misma. Este trozo de código no funciona.
if a == 1: print("Indentado dos espacios.") print("Indentado cuatro. Esto generará un error.") print("El ordenador te pedirá que te decidas.")
Una vez que una sentencia if ha terminado, no es posible re-indentar para volver a ella. La prueba debe volver a realizarse otra vez.
if a == 1: print("Si a es uno, esto se imprimirá.") print("Lo mismo que esto.") print("Esto siempre se imprimirá ya que no está indentado.") print("Esto generará un error.¿Por qué se ha indentado?")
3.3 Uso de Y(And) / O(Or)
Una sentencia if puede comprobar múltiples condiciones encadenando comparaciones con and y or. Estos también son considerados operadores de la misma forma que + o - lo son.
# Y if a < b y a < c: print ("a es menor que b y c") # O no exclusiva if a < b or a < c: print ("a es menor que b o c (o ambos)")
Un error común es omitir una variable cuando la comparamos frente a condiciones múltiples. El siguiente código no funciona porque el ordenador no sabe contra quién debe comparar la variable c. Por si solo no asumirá que debe compararla con a.
# Esto no está bien if a < b or < c: print ("a es menor que b y c")
3.4 Variables Booleanas
Python posee variables booleanas. ¿Pero qué son las variables booleanas? Las variables booleanas pueden almacenar, tanto un valor cierto True, como uno falso False. El Álgebra Booleana fue desarrollada por George Boole allá por 1854. ¡Si hubiera llegado a saber lo importante que su trabajo ha sido para la lógica de los ordenadores!
Una sentencia if requiere de una expresión que evaluar a True o False. Lo que puede parecer extraño, es que realmente no necesita hacer ninguna comparación si una variable ya se evalúa como True o False.
# Tipo de dato booleano. Esto sí está aceptado! a = True if a: print ("a es cierto")
Tiempo atrás, cuando estaba en la escuela, era popular hacer alguna declaración falsa. Esperabas tres segundos, entonces gritabas “¡NO!”. Bueno, aun cuando tu ordenador piense que esto es poco convincente, si vas a hacerlo, debes empezar con un operador not. El siguiente código usa el not para cambiar el valor de a, de cierto a falso.
# Como usar la función not if not(a): print ("a es falso")
Debido a que not es un operador y no una función, los paréntesis son innecesarios. Esto es correcto también:
# Como usar la función not if not a: print ("a es falso")
También es posible usar variables booleanas con los operadores and y or.
a = True b = False if a and b: print ("a y b son ambos ciertos")
También es posible asignar a una variable el resultado de una comparación. En el siguiente código, las variables a y b son comparadas. Si son iguales, c será True, de otra forma c será False.
a = 3 b = 3 # La siguiente línea parece extraña, pero es correcta. # c será cierta o falsa, dependiendo si # a y b son iguales. c = a == b # Imprime el valor de c, en este caso True print(c)
Es posible crear un sentencia if con una condición que no se evalúa como cierta o falsa. No es lo comúnmente deseado, pero es importante comprender cómo maneja el ordenador estos valores durante las búsqueda de problemas. La siguiente estructura es correcta y provocará que se imprima el texto debido a que los valores en la sentencia if no son cero:
if 1: print ("1") if "A": print ("A")
El siguiente código no imprimirá nada, debido a que el valor en la sentencia if es cero y es tratado como False. Cualquier otro valor distinto a cero es considerado como True.
if 0: print ("Cero")
En el código siguiente, la primera sentencia if parece que funciona. El problema es que siempre se evaluará como cierta aun cuando la variable a no sea igual a b. Esto se debe a que b es considerada por sí misma como True.
a = "c" if a == "B" or "b": print ("a es igual que b. A lo mejor.") # Esta es una mejor forma de escribir la sentencia if. if a == "B" or a == "b": print ("a es igual que b.")
3.5 Else y Else If
Debajo está el código que obtiene la temperatura del usuario e imprime si hace calor.
temperatura = int(input("¿Cuál es la temperatura en Fahrenheit?")) if temperatura > 90: print("Fuera no hace calor") print ("Hecho")
Si la programadora quiere un código que se ejecute cuando no hace calor, puede usar la sentencia else. Observa cómo else está alineada con la i en la sentencia if, y cómo le siguen dos puntos, tal como en la sentencia if.
En el caso de una estructura de control del tipo if...else, un bloque de código siempre será ejecutado. El primer bloque se ejecutará si la estructura se evalúa como True, y en caso de que se evalúe como False, se ejecuta el segundo bloque.
temperatura = int(input("¿Cuál es la temperatura en Fahrenheit? ")) if temperatura > 90: print("Hace calor fuera") else: print("Afuera no hace calor") print ("Hecho")
Es posible encadenar varias sentencias if usando la estructura de control else...if. En Python esto abrevia como elif.
temperatura = int(input("¿Cuál es la temperatura en Fahrenheit? ")) if temperatura > 90: print("Hace calor fuera") elif temperatura < 30: print("Hace frío fuera") else: print("Afuera no hace calor") print ("Hecho")
En el siguiente código, el programa imprimirá “Hace calor fuera” aun cuando el usuario introduzca 120 grados. ¿Por qué? ¿De qué forma podemos corregir el código? Si no consigues resolverlo, mira el vídeo.
temperatura = int(input("¿Cuál es la temperatura en Fahrenheit? ")) if temperatura > 90: print("Hace calor fuera") elif temperatura > 110: print("¡Caramba, casi podemos freír un huevo sobre el asfalto!") elif temperatura < 30: print("Hace frío fuera") else: print("Se está bien afuera") print ("Hecho")
3.6 Comparaciones de textos
Es posible usar una sentencia if para comprobar texto. (Observación: si usamos Eclipse en lugar del recomendado IDLE, el ejemplo no funcionará debido a que la entrada contendrá un retorno de carro extra al final.)
nombre_usuario = input("¿Cuál es tu nombre? ") if nombre_usuario == "Paul": print("Tienes un nombre bonito.") else: print("Tu nombre está bien.")
El ejemplo anterior solo funciona si el usuario introduce “Paul”. No funcionará con “paul” o “PAUL”.
Un error muy común es olvidarse de las comillas alrededor de la cadena de texto que va a compararse. En el siguiente ejemplo, el ordenador pensará que Paul es una variable que almacena un valor. Mostrará un error debido a que no sabe qué se ha almacenado en esa variable Paul.
nombre_usuario = input("¿Cuál es tu nombre? ") if nombre_usuario == Paul: # Esto no funciona, ya que olvidamos las comillas print("¿Cuál es tu nombre?") else: print("Tu nombre está bien.")
3.6.1 Textos múltiples
Cuando comparamos una variable con múltiples cadenas de texto posibles, es importante recordar que la comparación debe incluir a la variable. Por ejemplo:
# Esto no funciona! Siempre será cierto if nombre_usuario == "Paul" or "Mary":
En todo caso, el código sería:
# Esto sí funciona if nombre_usuario == "Paul" or nombre_usuario == "Mary":
Esto se debe a que con cualquier valor distinto de cero, el ordenador asume que es True. Así, para el ordenador, "Mary" es la misma cosa que True y por lo tanto ejecutará el código de la sentencia if.
3.6.2 Comparaciones sin tener en cuenta la capitalización
Si el programa necesita emparejar el texto entrante sin tener en cuenta la capitalización, la forma más fácil de conseguirlo es convertir todo a minúsculas. Esto se consigue con el comando lower.
El siguiente ejemplo tomará todo lo que el usuario introduzca, lo convertirá a minúsculas, y entonces, realizará la comparación. Importante: no compararlo frente a una cadena de texto que contenga mayúsculas. Si la entrada es convertida a minúsculas, y luego pretendemos compararla con una cadena con mayúsculas, no hay forma de emparejarlas.
nombre_usuario = input(¿Cuál es tu nombre? ") if nombre_usuario.lower() == "paul": print("Tienes un nombre bonito.") else: print("Tu nombre está bien.")
3.7 Ejemplo de Sentencias if
El siguiente conjunto de ejemplos tratan todos los conceptos tratados. El vídeo avanza sobre cada línea de código, explicando cómo funciona.
El vídeo usa un editor integrado llamado Eclipse. La versión por defecto de Eclipse no trabaja con Python, pero la versión PyDev sí lo hace. El editor PyDev se puede obtener gratuitamente en:
http://pydev.org/
El editor es complejo, pero posee muchas opciones y puede ser un entorno de desarrollo potente. Algunos programadores prefieren usar entornos como PyDev que tienen plug-ins para casi todo, excepto traerte un café. Otros, por el contrario prefieren entornos más minimalistas que 'distraigan menos'.
# Sample Python/Pygame Programs # Simpson College Computer Science # http://programarcadegames.com/ # http://simpson.edu/computer-science/ # Vídeo explicativo: http://youtu.be/pDpNSck2aXQ # Variables usadas para el ejemplo de declaraciones ”if” a = 4 b = 5 c = 6 # Comparaciones básicas if a < b: print ("a es menor que b") if a > b: print ("a es mayor que b") if a <= b: print ("a es menor o igual a b") if a >= b: print ("a es mayor o igual a b") # OBSERVACIÓN: Es muy fácil confundir el uso de == y =. # Utiliza == si estás preguntando si son iguales. # Utiliza = si estás asignando un valor a una variable. if a == b: print ("a es igual a b") # Not equal if a != b: print ("a y b no son iguales") # And if a < b and a < c: print ("a es menor que b y c") # Non-exclusive or if a < b or a < c: print ("a es menor que a o b (o ambos)") # Tipos Booleanos de datos. Esto es correcto! a = True if a: print ("a es cierto") if not(a): print ("a es falso") a = True b = False if a and b: print ("a y b, ambos son ciertos") a = 3 b = 3 c = a == b print(c) # Esto también es correcto y será cierto debido # a que los valores no son cero: if 1: print ("1") if "A": print ("A") # No se comportará como cierto ya que es cero. if 0: print ("Cero") # Comparar variables con valores múltiples. # El primer if parece que funciona, pero siempre se comporta como cierto # aún cuando la variable 'a' no sea igual a 'b'. # Esto se debe a que 'b' se considera cierta por sí misma. a = "c" if a == "B" or "b": print ("a es igual a b. A lo mejor.") # Esta es la manera más adecuada para hacer un if. if a == "B" or a == "b": print ("a es igual a b.") # Ejemplo 1: Sentencia If temperatura = int(input("¿Cuál es la temperatura en grados Fahrenheit? ")) if temperatura > 90: print ("Hace calor fuera") print ("Hecho") # Ejemplo 2: Sentencia Else temperatura = int(input("¿Cuál es la temperatura en Fahrenheit? ")) if temperatura > 90: print ("Hace calor fuera") else: print ("Hace fresco fuera") print ("Hecho") #Ejemplo 4: Sentencia Else if temperatura = int(input("¿Cuál es la temperatura en Fahrenheit? ")) if temperatura > 90: print ("Hace calor fuera") elif temperatura < 30: print ("Hace fresco fuera") else: print ("No hace calor fuera") print ("Hecho") # Ejemplo 5: Orden de las declaraciones # Algo está mal. ¿El qué? temperatura = int(input("¿Cuál es la temperatura en grados Fahrenheit? ")) if temperature > 90: print ("Hace calor fuera") elif temperatura > 110: print ("Vamos hombre, podría freír huevos sobre el asfalto!") elif temperatura < 30: print ("Hace fresco fuera") else: print ("Se está bien fuera") print ("Hecho") # Comparaciones usando strings/cadenas de texto nombre_usuario = input("¿Cuál es tu nombre? ") if nombre_usuario == "Pablo": print ("Me gusta tu nombre.") else: print ("Ok.")
3.8 Repaso
3.8.1 Test
3.8.2 Ejercicios
Haz click para ir a los Ejercicios.