Condicionales
Última actualización: 2025-02-28 | Mejora esta página
Hoja de ruta
Preguntas
- ¿Cómo pueden los programas hacer cosas diferentes para datos diferentes?
Objetivos
- Escribir correctamente programas que utilicen sentencias if y else y expresiones booleanas sencillas (sin operadores lógicos).
- Rastrea la ejecución de condicionales no anidadas y condicionales dentro de bucles.
Usar sentencias if
para controlar si un bloque de
código se ejecuta o no.
- Una sentencia
if
(más propiamente llamada sentencia condicional) controla si un bloque de código se ejecuta o no. - La estructura es similar a una sentencia
for
:- La primera línea se abre con
if
y termina con dos puntos - El cuerpo que contiene una o más sentencias tiene sangría (normalmente de 4 espacios)
- La primera línea se abre con
PYTHON
mass = 3.54
if mass > 3.0:
print(mass, 'is large')
mass = 2.07
if mass > 3.0:
print (mass, 'is large')
SALIDA
3.54 is large
Los condicionales se usan a menudo dentro de bucles.
- No tiene mucho sentido usar una condicional cuando conocemos el valor (como arriba).
- Pero útil cuando tenemos una colección que procesar.
SALIDA
3.54 is large
9.22 is large
Use else
para ejecutar un bloque de código cuando una
condición if
es no verdadera.
-
else
puede utilizarse después deif
. - Nos permite especificar una alternativa a ejecutar cuando la rama
if
no está tomada.
PYTHON
masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
if m > 3.0:
print(m, 'is large')
else:
print(m, 'is small')
SALIDA
3.54 is large
2.07 is small
9.22 is large
1.86 is small
1.71 is small
Utilice elif
para especificar pruebas adicionales.
- Puede proporcionar varias opciones alternativas, cada una con su propia prueba.
- Utilice
elif
(abreviatura de “else if”) y una condición para especificarlas. - Siempre asociado a un
if
. - Debe ir antes de
else
(que es el “catch all”).
PYTHON
masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
if m > 9.0:
print(m, 'is HUGE')
elif m > 3.0:
print(m, 'is large')
else:
print(m, 'is small')
SALIDA
3.54 is large
2.07 is small
9.22 is HUGE
1.86 is small
1.71 is small
Las condiciones se prueban una vez, en orden.
- Python recorre las ramas de la condicional en orden, probando cada una a su vez.
- El orden es importante.
PYTHON
grade = 85
if grade >= 90:
print('grade is A')
elif grade >= 80:
print('grade is B')
elif grade >= 70:
print('grade is C')
SALIDA
grade is B
- No vuelve atrás automáticamente y reevalúa si los valores cambian.
PYTHON
velocity = 10.0
if velocity > 20.0:
print('moving too fast')
else:
print('adjusting velocity')
velocity = 50.0
SALIDA
adjusting velocity
- Utiliza a menudo condicionales en un bucle para “evolucionar” los valores de las variables.
PYTHON
velocity = 10.0
for i in range(5): # execute the loop 5 times
print(i, ':', velocity)
if velocity > 20.0:
print('moving too fast')
velocity = velocity - 5.0
else:
print('moving too slow')
velocity = velocity + 10.0
print('final velocity:', velocity)
SALIDA
0 : 10.0
moving too slow
1 : 20.0
moving too slow
2 : 30.0
moving too fast
3 : 25.0
moving too fast
4 : 20.0
moving too slow
final velocity: 30.0
Crear una tabla con los valores de las variables para seguir la ejecución de un programa.
i | 0 | . | 1 | . | 2 | . | 3 | . | 4 | . |
velocity | 10.0 | 20.0 | . | 30.0 | . | 25.0 | . | 20.0 | . | 30.0 |
- El programa debe tener una sentencia
print
fuera del cuerpo del bucle para mostrar el valor final develocity
, ya que su valor se actualiza en la última iteración del bucle.
Relaciones compuestas usando and
,
or
y paréntesis
A menudo, se desea que alguna combinación de cosas sea verdadera.
Puede combinar relaciones dentro de una condicional utilizando
and
y or
. Siguiendo con el ejemplo anterior,
supongamos que tenemos
PYTHON
mass = [ 3.54, 2.07, 9.22, 1.86, 1.71]
velocity = [10.00, 20.00, 30.00, 25.00, 20.00]
i = 0
for i in range(5):
if mass[i] > 5 and velocity[i] > 20:
print("Fast heavy object. Duck!")
elif mass[i] > 2 and mass[i] <= 5 and velocity[i] <= 20:
print("Normal traffic")
elif mass[i] <= 2 and velocity[i] <= 20:
print("Slow light object. Ignore it")
else:
print("Whoa! Something is up with the data. Check it")
Al igual que con la aritmética, puede y debe utilizar paréntesis
siempre que exista una posible ambigüedad. Una buena regla general es
usar siempre paréntesis cuando se mezclan and
y
or
en la misma condición. Es decir, en lugar de
escribe uno de estos:
PYTHON
if (mass[i] <= 2 or mass[i] >= 5) and velocity[i] > 20:
if mass[i] <= 2 or (mass[i] >= 5 and velocity[i] > 20):
para que quede perfectamente claro para un lector (y para Python) lo que realmente quieres decir.
SALIDA
25.0
Recorte de Valores
Rellena los espacios en blanco para que este programa cree una nueva lista que contenga ceros donde los valores de la lista original eran negativos y unos donde los valores de la lista original eran positivos.
PYTHON
original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
result = ____
for value in original:
if ____:
result.append(0)
else:
____
print(result)
SALIDA
[0, 1, 1, 1, 0, 1]
Inicializando
Modifica este programa para que encuentre los valores mayor y menor de la lista sin importar el rango de valores original.
PYTHON
values = [...some test data...]
smallest, largest = None, None
for v in values:
if ____:
smallest, largest = v, v
____:
smallest = min(____, v)
largest = max(____, v)
print(smallest, largest)
¿Cuáles son las ventajas y desventajas de utilizar este método para hallar el rango de los datos?
PYTHON
values = [-2,1,65,78,-54,-24,100]
smallest, largest = None, None
for v in values:
if smallest is None and largest is None:
smallest, largest = v, v
else:
smallest = min(smallest, v)
largest = max(largest, v)
print(smallest, largest)
Si escribiste == None
en lugar de is None
,
también funciona, pero los programadores de Python siempre escriben
is None
debido a la forma especial en que None
funciona en el lenguaje.
Se puede argumentar que una ventaja de utilizar este método sería
hacer el código más legible. Sin embargo, una desventaja es que este
código no es eficiente porque dentro de cada iteración de la declaración
del bucle for
, hay dos bucles más que se ejecutan sobre dos
números cada uno (las funciones min
y max
).
Sería más eficiente iterar sobre cada número una sola vez:
PYTHON
values = [-2,1,65,78,-54,-24,100]
smallest, largest = None, None
for v in values:
if smallest is None or v < smallest:
smallest = v
if largest is None or v > largest:
largest = v
print(smallest, largest)
Ahora tenemos un bucle, pero cuatro pruebas de comparación. Hay dos formas de mejorarlo: o bien utilizar menos comparaciones en cada iteración, o bien utilizar dos bucles que contengan cada uno sólo una prueba de comparación. La solución más sencilla suele ser la mejor:
Puntos Clave
- Utilice sentencias
if
para controlar si se ejecuta o no un bloque de código. - Los condicionales se usan a menudo dentro de bucles.
- Utilice
else
para ejecutar un bloque de código cuando una condiciónif
es no verdadera. - Utilice
elif
para especificar pruebas adicionales. - Las condiciones se prueban una vez, en orden.
- Crea una tabla con los valores de las variables para seguir la ejecución de un programa.