¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Sentencias de control
Bloque perteneciente al curso Introducción a la programación con Python.
Condicionales
if, if-else, if-elif-else
condicion = True if condicion: print("Código condicional")
Si hay alguna operación que deba hacerse en base a si se da o no una determinada circunstancia, lo ponemos en un bloque if
En Python, el sangrado de código (indentation), es un elemento sintáctico. Es obligatorio mantener un sangrado correcto para que el intérprete de Python lo procese adecuadamente y sepa a qué bloque de código pertenecen ciertas instrucciones.
x = 3 if x < 5: print("El valor de x es pequeño")
Responderá:
El valor de x es pequeño
x = 1 cond = False if x < 100 or cond: print("Al menos una de las dos es cierta")
Responderá:
Al menos una de las dos es cierta
x = 1000 cond = True if x < 100 and cond: print("Las dos deben cumplirse")
Responderá:
Las dos deben cumplirse
x = 10 cond = False if (x < 100 or x > 100000) and not cond: print("Las dos deben cumplirse")
Responderá:
Las dos deben cumplirse
Mediante la palabra clave else se puede indicar otro bloque de instrucciones que se llevarán a cabo únicamente en el caso de que la condición del if no se cumpla.
condicion = False if condicion: print("Esto se hará si la condición es cierta") else: print("Si no es cierta, se hará esto otro")
Responderá:
Si no es cierta, se hará esto otro
Ejemplo de resolución de ecuación de segundo grado:
from math import sqrt print("ax^2 + bx + c = 0") # Toma de datos: a = float(input("Coeficiente a:")) b = float(input("Coeficiente b:")) c = float(input("Coeficiente c:")) # Cálculo de las raíces d = b ** 2 - 4 * a * b * c if d >= 0: # Ahora podemos ejecutar las siguientes operaciones sin temor a que # dé error de dominio x1 = (-b + sqrt(b**2 - 4 * a * c)) / (2 * a) x2 = (-b - sqrt(b**2 - 4 * a * c)) / (2 * a) print(f"Soluciones: {x1} y {x2}") else: # Para el caso de la raíz cuadrada negativa, mostramos un aviso print("Su ecuación no tiene soluciones reales")
Para encadenar varias comprobaciones o condiciones de tal modo que si no se cumple una de ellas, pase a comprobar la siguiente, y así varias veces hasta un else final, utilizamos la palabra reservada elif
temperatura = 25 if temperatura < 20: print("Tiempo fresco") elif temperatura > 30: print("Tiempo caluroso") else: print("Temperatura agradable")
Responderá:
Temperatura agradable
Bucles
Cuando necesitamos que ciertas instrucciones se repitan un número (determinado o indeterminado) de veces, tenemos las construcciones for, while…
while
Sintaxis:
while condicion:
instruccion1
instruccion2
...
from math import sin, abs x = 1.0 e = 1000.0 while e > 0.0001: x0 = x x = cos(x) e = abs(x0 - x) print(x, e)
cuenta = 10 while cuenta > 0: print(cuenta) cuenta -= 1 # cuenta = cuenta - 1 print("It's the final countdown!")
Devolverá:
10 9 8 7 6 5 4 3 2 1 It's the final countdown!
s = 0 while True: x = float(input("Introduzca un número (0 para terminar):")) if x==0: break s += x # Suma a s el valor de x print(f"La suma de todos los valores es {s}")
Ejemplo de uso del programa:
Introduzca un número (0 para terminar): 4 Introduzca un número (0 para terminar): 5 Introduzca un número (0 para terminar): 0 La suma de todos los valores es 9.0
Algunas notas acerca de while:
- Un bucle
whilepuede ejecutarse 0 o mas veces. Si la condición no se cumple de entrada, no se ejecutará el código de dentro ni siquiera la primera vez. - La comprobación de la condición se hace al principio de cada vuelta / iteración. Si en algún momento, durante la ejecución de las instrucciones de dentro del bucle esa condición pasase a ser falsa, no será hasta que comience la siguiente vuelta que se termine el bucle.
- Si se indica como condición la constante
True, el bucle será infinito ya que la condición se cumple siempre. - Si deseamos interrumpir forzosamente un bucle (independientemente de si la condición se cumple o no), podemos utilizar la orden
break. Lo normal es que dicha orden se lance de forma condicionada; con unif, por ejemplo.
s = 0 while True: try: x = float(input("Introduzca un número (0 para terminar):")) if x==0: break s += x # Suma a s el valor de x except: print("Inténtelo otra vez") print(f"La suma de todos los valores es {s}")
Ejemplo de ejecución del programa:
Introduzca un número (0 para terminar): 6 Introduzca un número (0 para terminar): siete Inténtelo otra vez Introduzca un número (0 para terminar): 7 Introduzca un número (0 para terminar): 0 La suma de todos los valores es 13.0
for
Permite recorrer secuencias, ejecutando un bloque de instrucciones en cada iteración. Se utiliza una variable para recorrer la secuencia. Dicha variable tomará el valor de cada uno de los elementos de la secuencia en cada iteración, respetando el orden.
Sintaxis:
for variable in secuencia: instruccion1 instruccion2 ...
Ejemplos:
palabras = ["alpha", "bravo", "charlie", "delta"] for p in palabras: print(p)
Resultado:
alpha bravo charlie delta
for i in range(10): print(i)
Resultado:
0 1 2 3 4 5 6 7 8 9
for i in range(0, 20, 2): print(i)
Resultado:
0 2 4 6 8 10 12 14 16 18
for i in range(10, 0, -1): print(i)
Resultado:
10 9 8 7 6 5 4 3 2 1
Los rangos son muy útiles para hacer secuencias de números que podemos utilizar con el bucle for. Más información sobre rangos en la documentación oficial
Alteración de la ejecución con break y continue
- La palabra clave
breaksirve para interrumpir la ejecución de un buclewhileofor. - La palabra
continueinterrumple solo la iteración actual, saltando a la iteración siguiente.
s = 0 while True: x = float(input("Introduzca un número positivo (0 para terminar):")) if x==0: break if x<0: print("Solo se admiten positivos") continue s += x # Suma a s el valor de x print(f"La suma de todos los valores es {s}")
Ejemplo de ejecución:
Introduzca un número positivo (0 para terminar): 4 Introduzca un número positivo (0 para terminar): 3 Introduzca un número positivo (0 para terminar): -5 Solo se admiten positivos Introduzca un número positivo (0 para terminar): 0 La suma de todos los valores es 7.0
do-while
En otros lenguajes de programación existe una estructura llamada do-while, que es muy parecida al while, pero que hace la comprobación de la condición al final de cada iteración (no al principio).
Podemos emular un do-while mediante el uso de break:
En C haríamos algo así:
x = 1e10; do { print(x); x /= 2.0; } (while x >= 0.0001);
En Python:
x = 1e10 while True: print(x) x /= 2.0 if x < 0.0001: break
match (switch)
En Python no tenemos la construcción switch-case de otros lenguajes, pero hay algo parecido con match.
Match permite evaluar diferentes casos y ejecutar grupos de instrucciones en función del valor que toma una variable.
match aparece en la versión 3.10 de Python, así que todo el código que aparecerá aquí no funcionará con versiones anteriores
mes = int(input("Introduzca el mes en número: ")) match mes: case 1: print("Enero") case 2: print("Febrero") # ... case _: print("Ese mes no existe")
Ejemplos prácticos
Generador de combinaciones de lotería
Información oficial sobre random
from random import randint combinacion_ganadora = set() # usamos un conjunto para no tener repetidos while len(combinacion_ganadora) < 6: n = randint(1, 49) print(n) # para revisar el número pseudoaleatorio que saca combinacion_ganadora.add(n) combinacion_ganadora
Ejemplo de ejecución:
48
37
3
1
19
3
1
37
{48, 37, 3, 1, 19, 3}
Número bisiesto
Un año es bisiesto cuando es múltiplo de 4, pero no múltiplo de 100 (salvo que sea también múltiplo de 400).
# El siguiente programa visualiza los años bisiestos entre o 1800 e o 2100 for i in range(1800, 2100): if (i % 4 == 0 and (i % 100 != 0 or i % 400 == 0)): print (f"El año {i} es bisiesto")
Otra versión:
for i in range(1800, 2100): if (i % 400 == 0): print (f"El año {i} es bisiesto") elif (i % 4 == 0 and (i % 100 != 0)): print (f"El año {i} es bisiesto")
