Condiciones y lógica booleana en Python

Aprende cómo toma decisiones un programa de Python. Compara números y texto con operadores de comparación, combina condiciones con and, or y not, y usa if, elif y else para ejecutar el código adecuado en cada situación. Después, anida decisiones, usa el valor de verdad de los valores en un contexto booleano (truthiness), prueba cada rama con entradas bien elegidas y elige entre casos con la sentencia match.

PrincipianteUnidad 2 de 10 del curso Curso de Introducción a la programación con Python

Lo que aprenderás

  1. Escribe comparaciones con los seis operadores de comparación de Python, predice si dan True o False con números y texto, y evita las confusiones que hacen que una condición sea incorrecta sin avisar.
    • Compara números con los seis operadores de comparación
      Usa ==, !=, <, <=, > y >= para comparar números, interpreta cada resultado como un valor booleano y distingue la comparación de la asignación.
    • Compara texto, valores de distintos tipos y rangos
      Compara cadenas de forma exacta y en orden alfabético, convierte los datos introducidos antes de compararlos con números y comprueba rangos, pertenencia y None con el operador adecuado.
  2. Escribe decisiones de una, dos o varias alternativas para que un programa ejecute el bloque de código adecuado en cada situación, y predice exactamente qué líneas se ejecutan para una entrada dada.
    • Ejecuta código solo cuando una condición sea verdadera
      Escribe una sentencia if con su cabecera (encabezado), dos puntos y bloque con sangría, y sigue qué líneas se ejecutan y cuáles se omiten.
    • Elige entre dos acciones con if y else
      Añade una rama else para que se ejecute exactamente uno de dos bloques y usa una expresión condicional para elegir entre dos valores en una sola línea.
    • Elige entre varios casos con elif
      Construye cadenas if–elif–else que comprueben las condiciones en orden, ejecuten solo la primera rama cuya condición sea verdadera y ordenen las comprobaciones para que cada entrada corresponda al caso adecuado.
  3. Combina y niega condiciones con and, or y not, predice sus resultados con tablas de verdad e interpreta las condiciones más largas en el orden en que Python las evalúa.
    • Combina y niega condiciones con and, or y not
      Usa tablas de verdad para predecir los resultados de and, or y not, traduce reglas cotidianas a condiciones combinadas y evita el error clásico con or.
    • Predice cómo evalúa Python las condiciones más largas
      Aplica la precedencia de operadores y la evaluación en cortocircuito, añade paréntesis que aclaren la agrupación prevista y reescribe condiciones negadas con las leyes de De Morgan.
  4. Anida decisiones cuando una elección dependa de otra, comprueba directamente los valores mediante su valor de verdad y sigue y prueba cada rama para que la lógica sea válida con cualquier entrada.
    • Anida decisiones dentro de otras decisiones
      Coloca una sentencia if dentro de otra rama cuando una segunda decisión dependa de la primera, interpreta el anidamiento mediante la sangría y redúcelo cuando and o elif expresen lo mismo de forma más sencilla.
    • Evalúa directamente el valor de verdad de los valores
      Predice qué valores considera Python verdaderos o falsos en una condición, úsalo para comprobar de forma breve si la entrada está vacía y evita los casos engañosos en que 0, "0" o "False" se comportan de forma inesperada.
    • Sigue la ejecución y prueba cada rama de una decisión
      Sigue una decisión a mano, elige entradas de prueba que alcancen cada rama y cada límite, y corrige las condiciones que dejen casos sin cubrir, solapamientos o ramas que nunca puedan ejecutarse.
  5. Usa la sentencia match de Python para comparar un valor con varios patrones, capturar valores y añadir condiciones de guarda, y decide cuándo match es más claro que una cadena if–elif.
    • Comprueba la coincidencia de un valor con casos fijos
      Escribe una sentencia match con patrones literales, alternativas y un comodín, y predice qué único caso se ejecutará.
    • Captura valores y añade condiciones de guarda a los casos
      Usa patrones de captura y as para dar nombre al valor coincidente, añade condiciones de guarda if para lo que un literal no puede expresar y evita el caso engañoso en que un nombre de variable en un caso coincide con todo.

Guía de estudio de Condiciones en Python

5 capítulos

1

Comparaciones que responden sí o no

Un programa necesita una comprobación precisa antes de poder elegir una acción. Las comparaciones convierten preguntas sobre valores en respuestas que Python puede usar: ¿es suficientemente alta la puntuación, coincide la respuesta o está la entrada dentro de un rango válido? Los números y el texto siguen reglas de comparación distintas. Leer esas reglas con atención te ayuda a detectar errores que parecen razonables en pantalla, sobre todo en un límite o cuando los dígitos introducidos siguen almacenados como texto.

1.1 Números, igualdad y límites

Una comparación plantea una pregunta sobre valores. Su resultado es un valor booleano: True o False. Son valores del tipo bool, escritos con la primera letra en mayúscula y sin comillas. "True" es texto; true, en minúsculas, es un nombre y provoca un NameError cuando no se ha definido.

Elige el operador que corresponda a la regla
OperadorPreguntaCon x = 7
==¿Igual a?x == 7 da True
!=¿Distinto de?x != 7 da False
<¿Menor que?x < 7 da False
<=¿Menor o igual que?x <= 7 da True
>¿Mayor que?x > 5 da True
>=¿Mayor o igual que?x >= 7 da True

Los operadores de dos caracteres se escriben juntos, con = al final. Escribe <=, no =<. Un número entero y uno de coma flotante pueden resultar iguales al compararlos: 7 == 7.0 da True porque sus valores numéricos coinciden.

Una comparación es una expresión, así que puedes mostrar su resultado o almacenarlo:

x = 7
is_big = x > 5
print(is_big)

Python evalúa x > 5, obtiene True y asigna ese valor a is_big. La salida es True. Un nombre como is_big o has_ticket hace que una variable booleana se lea como una pregunta de sí o no.

Distingue la asignación de la comparación

x = 5 almacena un nuevo valor en x. x == 5 comprueba el valor actual sin cambiarlo. Escribir if x = 5: es un error de sintaxis. El error inverso puede ser más difícil de detectar:

x = 7
x == 5
print(x)

En un archivo de programa, el resultado de la comparación no se utiliza. La salida sigue siendo 7; esa línea intermedia nunca asigna 5.

Resuelve las operaciones aritméticas antes de comparar

En 2 + 3 > 4, Python suma primero para obtener 5 y después compara 5 > 4. El resultado es True. Una comprobación útil para números enteros es n % 2 == 0: % da el resto de la división, y los números pares dejan un resto de 0 al dividirlos entre 2.

Para n = 10, los pasos son 10 % 2 y después 0 == 0, que da True. Para n = -7, -7 % 2 es 1, así que la comprobación de paridad es False. Con el divisor positivo 2, el resto de Python para un entero impar es 1, incluso si el entero impar es negativo.

Decide si se incluye el límite

«Al menos 18» incluye el 18: age >= 18. «Más de 18» lo excluye: age > 18. Del mismo modo, «menos de 13» es age < 13 y «como máximo 3» es bags <= 3. Prueba el propio límite al elegir un operador. Con age = 18, la primera comprobación de edad es verdadera y la segunda es falsa.

Ten en cuenta las pequeñas diferencias de coma flotante

Muchas fracciones decimales solo tienen representaciones binarias aproximadas. Python almacena 0.1 + 0.2 como 0.30000000000000004, así que 0.1 + 0.2 == 0.3 es False.

Para una comparación con una tolerancia absoluta de 1e-9, usa:

print(abs((0.1 + 0.2) - 0.3) < 1e-9)

abs() da la magnitud de la diferencia sin su signo. Esa diferencia es menor que una milmillonésima, así que esta comprobación muestra True. La tolerancia indica cuánta diferencia acepta esta comprobación; no es una igualdad exacta.

Puntos clave

  • Las comparaciones producen los valores booleanos True y False.
  • = asigna un valor; == compara valores sin cambiarlos.
  • Elige < o <=, y > o >=, según se incluya o no el límite.
  • Las operaciones aritméticas se realizan antes de la comparación, así que n % 2 == 0 comprueba si el número es par.
  • Los números de coma flotante calculados pueden necesitar una comprobación con tolerancia en lugar de una igualdad exacta.

1.2 Texto, números introducidos y rangos

Los valores de ambos lados de una comparación importan tanto como el operador. Un texto puede parecer un número y seguir obedeciendo las reglas de las cadenas.

Compara texto de forma exacta

La igualdad de cadenas comprueba cada carácter, incluidas las mayúsculas, las minúsculas y los espacios. "yes" == "Yes" es False, y "yes" == "yes " también es False. Para aceptar diferencias habituales de mayúsculas y minúsculas y espacios alrededor, compara una copia limpia:

answer = " Yes "
print(answer.strip().lower() == "yes")

strip() elimina los caracteres de espacio en blanco de ambos extremos. lower() convierte las letras a minúsculas. El texto limpio es "yes", así que el resultado es True. El valor almacenado en answer no cambia, salvo que le asignes el valor limpio.

Comprende el orden de las cadenas

Python compara cadenas de izquierda a derecha mediante puntos de código Unicode, los números asignados a los caracteres. Se detiene en el primer par de caracteres distintos. Con letras inglesas sin acentos, todas en mayúsculas o todas en minúsculas, esto sigue el orden alfabético: "apple" < "banana" es True. Cuando una cadena es el inicio de la otra, la más corta va primero: "cat" < "catalog" es True.

Esto no es una regla completa de ordenación de diccionario. De A a Z, los puntos de código son 65–90, y de a a z son 97–122. Por tanto, "Zebra" < "apple" es True. La é acentuada también va después de z, así que "zebra" < "éclair" es True.

Los dígitos de las cadenas siguen la misma regla de caracteres. "10" < "9" es True: la primera comparación es entre "1" y "9", no entre los números diez y nueve.

Convierte la entrada para tomar decisiones numéricas

input() devuelve una cadena. Si alguien introduce 5, "5" == 5 da False; la igualdad no convierte el texto. El orden es distinto: "5" < 10 provoca un TypeError porque Python no puede ordenar esa cadena y ese entero entre sí.

age = int(input("Age: "))
print(age >= 18)

Para el texto introducido "18", int() produce el entero 18 y la comprobación muestra True. Usa float() cuando la entrada represente un valor decimal.

Usa una comparación encadenada para un rango

0 <= score <= 100 exige que las dos comparaciones entre valores vecinos sean verdaderas. Significa 0 <= score and score <= 100. Para score = 105, se cumple la comprobación del límite inferior, pero falla la del superior, así que toda la cadena es False.

ReglaComprobación en Python
De 1 a 10, ambos extremos incluidos1 <= x <= 10
Estrictamente entre 1 y 101 < x < 10

Una cadena solo compara valores vecinos. 1 < 3 > 2 es True porque tanto 1 < 3 como 3 > 2 son verdaderos; no compara 1 directamente con 2.

Elige pertenencia o identidad cuando corresponda

Los operadores de pertenencia comprueban si un texto aparece dentro de otro. "nan" in "banana" es True; "Ban" in "banana" es False. "x" not in "banana" es True.

None representa la ausencia de valor. Compruébalo con result is None o result is not None. El operador is pregunta si se trata del mismo objeto, mientras que == pregunta si los valores son iguales. Usa == para la igualdad de números y cadenas: una comprobación de identidad como x is 5 no es fiable para ese fin y produce un SyntaxWarning.

Puntos clave

  • Las comparaciones de cadenas distinguen entre mayúsculas y minúsculas y conservan los espacios.
  • Convierte los dígitos introducidos con int() o float() antes de realizar comparaciones numéricas.
  • Un rango expresado mediante comparaciones encadenadas exige que se cumpla cada comparación entre valores vecinos.
  • in comprueba la pertenencia; is None comprueba si el valor es el marcador de ausencia de valor.
2

Elegir el código que se ejecuta

Una comparación resulta útil cuando controla una acción. Python marca cada elección con una condición y un bloque con sangría, de modo que la disposición indica qué líneas se ejecutan juntas. Empieza con un bloque que pueda omitirse, dale después una alternativa y, por último, elige entre varios casos. La clave es seguir el programa en orden: una línea posterior puede usar un valor asignado en una rama anterior, y una comprobación posterior de una cadena puede no llegar a alcanzarse.

2.1 La cabecera de if y su bloque

Una sentencia if ejecuta un bloque solo cuando su condición es verdadera. La cabecera empieza con if, indica la condición y termina con dos puntos. Las líneas que hay debajo llevan sangría para mostrar que pertenecen a su cuerpo.

Sigue una decisión de una sola alternativa
temperature = 31
if temperature > 30:
    print("Hot day")
    print("Drink water")
print("Done")

En la cabecera, Python lee el valor actual de temperature. La comparación 31 > 30 es True, así que se ejecutan ambas líneas con sangría. Después, el programa llega a la línea que está fuera del bloque. Su salida es:

Hot day
Drink water
Done

Cambia la primera línea por temperature = 25. Ahora 25 > 30 es False, así que Python omite todo el cuerpo. Solo se muestra Done. La condición se comprueba una vez cuando Python llega a la cabecera; un if no sigue comprobándola.

Deja que la sangría indique qué pertenece al bloque

Por convención, usa 4 espacios por cada nivel de sangría. Las líneas del mismo nivel pertenecen al mismo bloque. Volver al nivel externo lo termina. Si aplicas una sangría de 4 espacios a print("Done"), pasa al cuerpo del if y solo muestra su mensaje cuando se cumple la condición.

Un diagrama de flujo muestra la misma elección con un rombo. El camino de verdadero entra en el cuerpo, el de falso lo rodea y ambos se unen en la siguiente sentencia fuera del bloque.

ProblemaQué corregir
Faltan los dos puntosTermina la cabecera con :.
No hay un cuerpo con sangríaAplica sangría a las líneas controladas por if.
Sangría incoherenteAlinea las sentencias que pertenecen al mismo bloque.
Mezcla de tabulaciones y espaciosConfigura el editor para insertar espacios.

Python puede informar de SyntaxError, IndentationError o TabError ante estos problemas. Empieza por la cabecera y la sangría alrededor de la línea indicada. Los paréntesis alrededor de la condición son opcionales; if temperature > 30: es la forma habitual.

Un cuerpo no puede estar vacío. Si dejas un lugar reservado para una acción, escribe un pass con sangría. Es una sentencia válida que no hace nada:

if temperature > 30:
    pass
Las comprobaciones separadas son independientes
score = 95
if score >= 50:
    print("Pass")
if score >= 90:
    print("Excellent")

Python llega a ambas cabeceras. Las dos condiciones son verdaderas, así que muestra ambos mensajes. Las sentencias if independientes son adecuadas para reglas cuyas acciones pueden aplicarse todas a la misma entrada.

Da al código posterior un valor que pueda usar

Un nombre al que solo se asigna un valor dentro del cuerpo puede no llegar a crearse:

x = 0
if x > 0:
    message = "positive"
print(message)

En un archivo de programa ejecutado desde cero, se omite el cuerpo y message no tiene valor, así que la última línea provoca un NameError. Una solución es proporcionar un valor inicial antes de la elección:

x = 0
message = "not positive"
if x > 0:
    message = "positive"
print(message)

Ahora la línea posterior dispone de un valor en ambos caminos. Para cero muestra not positive; para un x positivo, el cuerpo sustituye ese texto por positive.

Puntos clave

  • Una cabecera if termina con :, seguida de un cuerpo con sangría.
  • Una condición falsa hace que se omita todo el cuerpo; la ejecución continúa después de él.
  • Cada sentencia if independiente se comprueba al llegar a ella.
  • Usa un valor inicial o asigna un valor en cada rama antes de leer la variable más adelante.
  • pass proporciona un cuerpo válido que no hace nada.

2.2 Dos caminos y un valor que elegir

Una sentencia if–else elige uno de dos bloques. Cuando la condición es verdadera, Python ejecuta el cuerpo del if. En caso contrario, ejecuta el cuerpo del else. Se ejecuta exactamente uno al llegar a esta decisión.

Alinea las alternativas
number = int(input("Enter a whole number: "))
if number % 2 == 0:
    print(number, "is even")
else:
    print(number, "is odd")

Para la entrada 14, el resto es 0, así que la salida es 14 is even. Para la entrada -7, el resto es 1, así que la salida es -7 is odd. El else pertenece al if que tiene su mismo nivel de sangría. Su cuerpo lleva su propia sangría.

No hay ninguna condición después de else: significa que la condición anterior era falsa. else number < 0: es un error de sintaxis. Mantén la cláusula justo después del cuerpo del if; una sentencia ajena sin sangría entre ambos rompe la estructura.

Comprueba qué incluye «todo lo demás»

Con if answer == "yes":, un else no significa solo "no". También acepta "maybe", "Yes" y "", porque ninguno es igual a "yes". Esto es útil cuando todas las entradas restantes merecen la misma acción. Si varias entradas rechazadas necesitan respuestas distintas, hacen falta más comprobaciones.

Asigna un valor en ambos caminos

Una regla de envío ofrece envío gratuito para importes totales de al menos 50 u.m. y cobra 5,99 u.m. en los demás casos:

total = 42.50
if total >= 50:
    shipping = 0
else:
    shipping = 5.99
print(total + shipping)

Primero, 42.50 >= 50 da False. Python omite la asignación de 0, ejecuta el else y almacena 5.99. La última línea está fuera de ambos cuerpos y muestra 48.49. Cambia total a 60: el primer cuerpo almacena 0, el otro se omite y la última línea muestra 60. Ambos caminos definen shipping antes de que se use.

Elige un valor con una expresión condicional

Cuando la única diferencia es el valor que se asigna, una expresión condicional puede expresarlo en una línea:

shipping = 0 if total >= 50 else 5.99

Su forma es value_if_true if condition else value_if_false. Aunque el valor para el caso verdadero aparece primero en la página, Python evalúa primero la condición. Solo evalúa el valor elegido y después asigna el resultado a shipping.

Otro ejemplo es label = "even" if n % 2 == 0 else "odd". Para n = 14, selecciona "even". Para n = -7, selecciona "odd".

NecesidadForma adecuada
Varias acciones en cualquiera de los caminosBloques if–else completos
Uno de dos valoresExpresión condicional

La expresión necesita ambos valores. x = 1 if flag está incompleta y provoca un SyntaxError porque no hay un valor para else. Una sentencia if completa puede omitir else porque simplemente puede no realizar ninguna acción en el camino falso; una expresión debe producir un valor en cualquier caso.

Puntos clave

  • else: no tiene condición y se alinea con su if.
  • Un else abarca todas las entradas que la condición rechaza.
  • Asignar un valor a la misma variable en ambos cuerpos hace que esté disponible después de cualquiera de los dos caminos.
  • Una expresión condicional tiene la forma a if condition else b y solo evalúa el valor seleccionado.

2.3 Varios casos en un orden elegido con cuidado

Usa elif, abreviatura de «si no, si», para añadir otra comprobación a una decisión. Python prueba las condiciones de arriba abajo. Se elige la primera condición verdadera y se omite el resto de esa cadena.

Sigue una decisión de calificación
score = 85
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"
print(grade)

La primera comprobación, 85 >= 90, es falsa. La segunda, 85 >= 80, es verdadera, así que Python almacena "B". No comprueba las condiciones restantes ni entra en else. La salida es B.

PuntuaciónPrimer camino que se cumpleCalificación
90score >= 90A
89score >= 80B
60score >= 60D
59else finalF
Usa lo que te indican las condiciones falsas anteriores

Llegar a elif score >= 80: ya te indica que la puntuación es inferior a 90. Para puntuaciones enteras, esta rama abarca de 80 a 89. Añadir and score < 90 repetiría una comprobación que el programa ya ha resuelto.

El orden importa porque estos rangos se solapan. Si score >= 60 va primero, abarca 85 y 95 antes de que se llegue a las comprobaciones de sus calificaciones superiores. Para comprobaciones de límite inferior con >=, coloca primero el umbral más alto. Para comprobaciones de límite superior con <, empieza por el umbral más bajo.

Mantén una sola elección en una sola cadena

Sustituir las palabras reservadas elif por if cambia el comportamiento. Con una puntuación de 85, la comprobación de 80 asigna "B", la de 70 asigna después "C" y la de 60 asigna "D". El valor final es "D". Cada nuevo if inicia una decisión independiente.

Esta distinción también afecta a else. En un grupo de sentencias if independientes, un else final pertenece solo a su if correspondiente, no a todo el grupo. Mantén unidas las ramas cuando representen una sola clasificación.

Prevé los límites y las entradas sin coincidencia

Una cadena elif puede tener cualquier número de comprobaciones adicionales, y su else final es opcional. Sin una rama para los casos restantes, puede no ejecutar ningún cuerpo:

temp = 20
if temp < 18:
    print("Cool")
elif temp > 24:
    print("Warm")

No se cumple ninguna condición. Añade else: con un print("Comfortable") con sangría si cada temperatura necesita un mensaje. Del mismo modo, t < 18 seguido de t > 18 deja exactamente el 18 sin coincidencia. En los umbrales de calificación, escribir score > 90 enviaría el 90 a la rama "B".

Los menús de texto usan la misma estructura: comprueba choice == "1", después choice == "2" y responde con "Unknown option" a cualquier otra entrada. Estas comprobaciones comparan cadenas porque input() devuelve texto. Cuando muchas comprobaciones comparan un valor con opciones fijas, match ofrece otra forma de organizar la decisión.

Puntos clave

  • Solo se ejecuta la primera rama verdadera de una cadena if–elif.
  • Las comprobaciones falsas anteriores reducen las entradas que pueden llegar a una rama posterior.
  • Ordena los umbrales que se solapan para que una comprobación amplia no oculte un caso más restringido.
  • Las sentencias if independientes pueden ejecutar varios cuerpos y sobrescribir asignaciones anteriores.
  • Un else final trata las entradas que no cumplen ninguna de las condiciones.
  • Prueba los umbrales exactos para encontrar casos sin cubrir y errores de desfase de una unidad.
3

Combinar comprobaciones sin cambiar la regla

Las decisiones reales suelen depender de varios hechos a la vez: un rango tiene dos límites, y el acceso puede exigir tanto permiso como una plaza disponible. Los operadores lógicos combinan esos hechos en una sola condición. Su agrupación y orden de evaluación también importan, porque Python puede detenerse antes de llegar a una parte de la comprobación. Traduce primero la regla y después sigue la expresión de izquierda a derecha, teniendo presentes los paréntesis y las operaciones que se omiten.

3.1 Ambos, al menos uno y lo contrario

Los operadores lógicos and, or y not permiten construir una condición a partir de otras más sencillas. Python los escribe como palabras en minúsculas.

Examina todas las posibilidades

Para entradas booleanas, and da True solo cuando ambas entradas son verdaderas. or da True cuando al menos una es verdadera, incluido el caso en que ambas lo son. Esto es una disyunción inclusiva.

ABA and BA or B
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

not invierte un valor de verdad: not True da False y not False da True. Una tabla de verdad enumera todas las combinaciones de entradas booleanas. Dos entradas necesitan cuatro filas; tres necesitan ocho. Cada entrada booleana independiente adicional duplica las combinaciones.

Para A and not B, invierte primero B y después combínalo con A. En la fila A = True, B = False, not B es True, así que el resultado es True. Las otras tres filas dan False.

Traduce una regla a comprobaciones completas

Un museo aplica un descuento en la entrada a los visitantes menores de 12 años o de 65 años en adelante:

has_discount = age < 12 or age >= 65

A los 10 años se cumple la primera comparación. A los 65, se cumple la segunda. Las edades 30 y 64 no cumplen ninguna. Usar and exigiría que una misma edad fuera menor de 12 y de al menos 65, lo que no puede ocurrir.

Una atracción exige una estatura de al menos 120 centímetros y no tener ninguna afección cardíaca:

can_ride = height >= 120 and not has_heart_condition

Los dos requisitos deben cumplirse a la vez. Con la estatura mínima y has_heart_condition = False, se cumplen ambas partes. Si falla cualquiera de los requisitos, can_ride es False.

Distingue entre estar dentro y fuera de un rango
SignificadoComprobación
Dentro del rango de 0 a 100score >= 0 and score <= 100
Fuera del rango de 0 a 100score < 0 or score > 100

La comprobación de pertenencia al rango necesita ambos límites. Para estar fuera basta con incumplir uno de ellos. score < 0 and score > 100 nunca puede ser verdadero para un mismo número.

Cada comparación necesita ambos lados. score >= 0 and <= 100 tiene una sintaxis incompleta. Un problema más sutil se ejecuta sin errores:

if answer == "y" or "yes":
    print("Accepted")

Python interpreta (answer == "y") or "yes". Cuando la comparación es falsa, la cadena no vacía "yes" hace que la condición siga considerándose verdadera. Repite la comparación: answer == "y" or answer == "yes".

La redacción cotidiana necesita el mismo cuidado. «Cerrado los sábados y domingos» significa day == "Saturday" or day == "Sunday"; un día no tiene que tener ambos nombres a la vez. Para una variable booleana, niégala directamente con not is_member. Una comparación negada como not (age >= 18) también puede escribirse de forma más sencilla como age < 18. Aquí los operadores de Python son palabras, no &&, || ni !.

Puntos clave

  • and exige que ambas entradas booleanas sean verdaderas; el or inclusivo exige al menos una.
  • not invierte un valor de verdad y siempre produce un booleano.
  • Estar dentro de un rango requiere and; estar fuera requiere or.
  • Repite la comparación completa a cada lado de un operador lógico.
  • Una tabla de verdad comprueba todas las combinaciones, incluido el caso en que ambas entradas son verdaderas.

3.2 Agrupación, operaciones omitidas y negación

Una condición más larga plantea dos cuestiones: cómo se agrupan sus partes y qué partes evalúa realmente Python. La precedencia de operadores responde a la primera. La evaluación en cortocircuito responde a la segunda.

Interpreta primero la agrupación

Para los operadores que se usan aquí, la precedencia va de mayor a menor:

  1. Potenciación: **.
  2. Multiplicación, división, división entera con redondeo hacia abajo y resto: *, /, //, %.
  3. Suma y resta: +, -.
  4. Comparaciones, incluidas in, not in, is e is not.
  5. not, después and y después or.
  6. La expresión condicional: a if condition else b.

Los paréntesis cambian la agrupación. Por ejemplo, x > 3 or x < 0 and x != 5 se agrupa como x > 3 or (x < 0 and x != 5). Con x = 5, la comparación izquierda es verdadera y se omite todo el grupo de la derecha. El resultado es True.

Con (x > 3 or x < 0) and x != 5, los paréntesis convierten el primer grupo en un operando de and. Con x = 5, ese grupo es verdadero, pero x != 5 es falso, así que el resultado es False.

Por eso is_weekend or is_holiday and is_sunny acepta todos los fines de semana, incluso si llueve. Para la regla «un día libre que además sea soleado», escribe (is_weekend or is_holiday) and is_sunny.

Sigue la evaluación de izquierda a derecha
ExpresiónCuándo omite Python B
A and BA se considera falso
A or BA se considera verdadero

Para and, una primera parte falsa ya ha descartado el requisito completo. Para or, una primera parte verdadera ya lo ha satisfecho. La precedencia no obliga a Python a calcular un operando omitido solo porque contenga operadores de mayor precedencia.

Puedes usar esto para colocar una condición de protección antes de una operación que fallaría:

count = 0
total = 50
is_large_average = count != 0 and total / count > 10
print(is_large_average)

count != 0 es falso, así que Python nunca intenta 50 / 0. Almacena y muestra False. Invertir los operandos intenta primero la división y provoca un ZeroDivisionError; la comprobación posterior no puede proteger una operación anterior.

Distribuye not dentro de una comprobación agrupada

Las leyes de De Morgan reescriben una negación invirtiendo cada parte y cambiando el operador que las combina:

OriginalEquivalente
not (A and B)not A or not B
not (A or B)not A and not B

«No es adolescente» puede comprobarse como not (age >= 13 and age <= 19). La comprobación directa equivalente es age < 13 or age > 19. Las edades 12 y 20 la cumplen; 13, 16 y 19 no.

Mantener and después de negar ambas partes cambia la regla. Con A = True, B = False, not (A and B) es verdadero, pero not A and not B es falso. Compara todas las filas de las tablas de verdad al comprobar si dos formas booleanas son equivalentes.

Para una variable que ya contiene un booleano, escribe if is_valid: o if not is_valid:. Compararla con True o False añade una comprobación que la condición no necesita.

Puntos clave

  • La precedencia agrupa una expresión; la evaluación en cortocircuito determina a qué operandos se llega.
  • and omite su operando derecho si el izquierdo se considera falso; or lo omite si el izquierdo se considera verdadero.
  • Coloca una condición de protección antes de la operación que protege.
  • Las leyes de De Morgan niegan ambas partes e intercambian and y or.
  • Usa paréntesis para mostrar la agrupación prevista al mezclar and y or.
  • Comprueba las variables booleanas directamente con su nombre o con not.
4

Facilitar el seguimiento y la prueba de decisiones

Una decisión puede depender de otra, y un valor puede actuar como condición sin una comparación explícita. Ambas cosas acortan los archivos de programa, pero también crean caminos que pueden pasar inadvertidos. La sangría muestra qué comprobaciones dependen de elecciones anteriores; el valor de verdad explica cómo se comportan el texto vacío y el cero. Seguir esos caminos y probar los límites exactos permite encontrar respuestas que faltan, valores sobrescritos y ramas a las que ninguna entrada puede llegar.

4.1 Decisiones dentro de otras ramas

Un condicional anidado coloca una decisión dentro de una rama de otra. Solo se llega a la decisión interna cuando la ejecución entra en esa rama externa. Cada nivel de anidamiento añade 4 espacios de sangría.

Sigue la elección externa antes de la interna
has_ticket = True
age = 15
if has_ticket:
    if age >= 13:
        print("Enjoy the movie")
    else:
        print("This movie needs an adult")
else:
    print("Please buy a ticket first")

Primero, has_ticket es verdadero, así que Python entra en el cuerpo externo. Después comprueba 15 >= 13, obtiene verdadero y muestra Enjoy the movie. Se omiten tanto el cuerpo del else interno como el del externo.

Cambia la edad a 10 y mantén la entrada. Python sigue entrando en el cuerpo externo, pero la condición interna falla, así que muestra This movie needs an adult. Con has_ticket = False, nunca se llega a comprobar la edad; el else externo muestra Please buy a ticket first.

Asocia cada else según la sangría

Un else pertenece al if que tiene su mismo nivel de sangría. Moverlo puede cambiar el comportamiento aunque el archivo de programa siga siendo válido. Considera esta variante más breve:

if has_ticket:
    if age >= 13:
        print("Enter")
else:
    print("Buy a ticket")

El else pertenece a if has_ticket:. Un niño de 10 años con entrada no recibe ningún mensaje. Mueve ese else y su cuerpo un nivel hacia dentro y pasará a pertenecer a if age >= 13:. Ahora el mismo niño recibe Buy a ticket, mientras que alguien sin entrada no recibe ningún mensaje. La nueva disposición expresa una regla distinta.

En el ejemplo completo de la película, el if interno ya tiene un else. Mover ahí el else externo hacia dentro crearía dos alternativas para el mismo if y causaría un error de sintaxis.

Reduce el anidamiento de dos requisitos

Cuando solo hay una acción y ninguno de los niveles tiene un else, and suele eliminar un nivel de anidamiento:

if is_member and total >= 50:
    print("Free shipping")

Esto ejecuta la misma acción que un if is_member: externo que contiene un if total >= 50: interno. Ambos requisitos deben cumplirse, y solo se llega al segundo después de que se cumpla el primero. Mantén el anidamiento cuando las ramas externas necesiten sus propias acciones distintas, como al comprar una entrada.

Un else cuya única acción sea otro if–else puede convertirse en una cadena elif. Para positivo, negativo y cero, la forma sin anidamiento es if x > 0:, después elif x < 0: y después else:. Conserva los mismos tres resultados con menos sangría.

Valida antes de clasificar

Una decisión de calificación debe rechazar las puntuaciones fuera del rango permitido antes de asignar una letra:

if 0 <= score <= 100:
    if score >= 90:
        print("A")
    else:
        print("Below A")
else:
    print("Score must be between 0 and 100")

Con score = 150, la comprobación externa falla, así que no se asigna ninguna calificación. El anidamiento también pone de manifiesto caminos imposibles: un if x < 5: interno bajo if x > 10: nunca puede cumplirse. Cuando haya muchos niveles de sangría, busca requisitos que puedan combinarse, una cadena elif o una comprobación de validación anterior que aclare los caminos restantes.

Puntos clave

  • Una condición interna solo se comprueba después de entrar en su rama externa.
  • La sangría determina a qué if pertenece un else.
  • Dos requisitos anidados con una sola acción y sin alternativas pueden convertirse en una condición con and.
  • Valida el rango permitido antes de asignar una categoría.
  • Los requisitos internos y externos contradictorios crean código inalcanzable.

4.2 Vacío, cero y valores usados como condiciones

Python puede comprobar un valor directamente en una condición. Su valor de verdad en un contexto booleano determina si se ejecuta el cuerpo. Esto ahorra comparaciones, pero el valor de verdad puede diferir de lo que parece decir el texto.

Reconoce los valores considerados falsos

Para los tipos incorporados que se usan aquí, False, None, el cero numérico, las cadenas vacías y las colecciones vacías se consideran falsos. Los números distintos de cero y las cadenas o colecciones no vacías se consideran verdaderos.

Valorbool(value)Motivo
0, 0.0FalseCero numérico
-3TrueNúmero distinto de cero
""FalseCadena vacía
" "TrueContiene un espacio
"0", "False", "no"TrueCadenas no vacías
NoneFalseMarcador de ausencia de valor
[], (), {}FalseColecciones vacías

bool() convierte un valor a su valor de verdad booleano. En una condición, if value: elige la misma rama que if bool(value):. No transforma el valor almacenado en un booleano.

Comprueba si la entrada está vacía sin interpretarla mal
name = input("Name: ")
if name:
    print("Hello", name)
else:
    print("No name entered")

Pulsar Intro sin escribir nada produce "", así que se ejecuta el segundo cuerpo. Un nombre formado únicamente por espacios no está vacío y cumple la primera condición. En cambio, if name.strip(): comprueba el texto después de eliminar los espacios en blanco de los extremos, así que una respuesta formada solo por espacios tampoco cumple la condición.

Una respuesta de sí o no necesita otra pregunta. if answer: se ejecuta para "no" y "False" porque ambas contienen caracteres. Para reconocer una respuesta afirmativa, compara el texto, por ejemplo answer == "yes". El valor de verdad comprueba si el texto está vacío, no el significado de una palabra.

Distingue un cero válido de un dato ausente

Supón que quantity es None antes de que se proporcione un valor y que puede ser legítimamente 0. if quantity: rechaza ambos. Usa quantity is not None para preguntar si hay un valor; esto acepta el cero.

Para una variable que realmente es booleana, la comprobación directa es clara. Para otros valores, x == True hace algo distinto de if x:. Con x = 5, se cumple la comprobación del valor de verdad, pero 5 == True es falso; la igualdad numérica considera que True es igual a 1, no a cualquier número distinto de cero.

and y or devuelven un valor que examinan

Estos operadores devuelven un operando, que puede no ser un booleano:

ExpresiónValor devuelto
"" or "Guest""Guest"
"Ana" or "Guest""Ana"
0 and 50
3 and 55

Para or, Python devuelve el valor izquierdo si se considera verdadero; en caso contrario, evalúa y devuelve el derecho. Para and, devuelve el valor izquierdo si se considera falso; en caso contrario, evalúa y devuelve el derecho.

display_name = name or "Guest" proporciona un valor predeterminado para una entrada vacía. El mismo patrón con quantity or 1 sustituye un cero real por 1. Usa así un valor predeterminado solo cuando todos los valores considerados falsos signifiquen ausencia de datos. not se comporta de otra manera: siempre devuelve True o False. Si una variable indicadora (bandera) almacenada debe ser booleana, has_name = bool(name or nickname) convierte el texto seleccionado en un valor de verdad.

Puntos clave

  • Los contenedores incorporados y el texto vacíos, el cero, None y False se consideran falsos.
  • Las cadenas no vacías siguen considerándose verdaderas aunque contengan "0" o "False".
  • Usa is not None cuando el cero sea un valor introducido válido.
  • and y or devuelven operandos; not siempre devuelve un booleano.
  • Un valor predeterminado con or sustituye cualquier valor izquierdo considerado falso, incluido el cero.
  • strip() deja vacía una entrada formada solo por espacios antes de comprobarla.

4.3 Sigue los caminos y prueba los límites

Un archivo de programa puede ejecutarse sin errores de sintaxis y aun así elegir la rama incorrecta. El seguimiento de la ejecución permite seguir una ejecución a mano. Las pruebas ejecutan entradas elegidas y comparan el resultado observado con el que exige la regla.

Planifica y sigue un camino

Antes de escribir código, expresa las elecciones en pasos de lenguaje cotidiano, o pseudocódigo. Un diagrama de flujo coloca cada condición en un rombo con flechas de verdadero y falso. Ambos caminos necesitan un siguiente paso o un final claro.

Para seguir el código, escribe los valores iniciales, evalúa cada condición a la que se llegue, registra las asignaciones y copia la salida exactamente. Para la cadena de calificaciones con score = 72:

Condición alcanzadaResultadoAcción
score >= 90FalseContinuar con la siguiente comprobación
score >= 80FalseContinuar con la siguiente comprobación
score >= 70TrueAsignar "C" a grade
Resto de la cadenaNo se evalúaContinuar después de la cadena

«No se evalúa» es distinto de falso. Python ya ha seleccionado una rama, así que no necesita las comparaciones posteriores.

Cubre todas las ramas y todos los límites

Una cadena de cuatro ramas necesita al menos cuatro entradas para ejecutar cada rama una vez. Elígelas según los caminos previstos, no por lo variados que parezcan los números. Varias puntuaciones altas pueden ejecutar siempre el mismo primer cuerpo.

La cobertura de ramas por sí sola puede no detectar un límite incorrecto. Para age >= 18, prueba 17, 18 y 19. Un > equivocado supera las dos comprobaciones de los extremos como se esperaba, pero rechaza el límite exacto. Para un umbral de calificación de 90, compara 89, 90 y 91; haz lo mismo en los demás umbrales. Para entradas decimales, elige valores próximos adecuados a la precisión de la medida.

Encuentra ramas que no pueden ejecutarse
if score >= 60:
    print("Pass")
elif score >= 90:
    print("Excellent")

La segunda rama es inalcanzable. Cualquier puntuación de al menos 90 ya ha cumplido la primera condición. Coloca primero el umbral más restrictivo o cambia los rangos para que correspondan a la regla prevista.

Un caso sin cubrir deja sin tratar un caso previsto: t < 0 seguido de t > 0 omite el cero. Un solapamiento puede hacer que se ejecuten varias acciones independientes: las comprobaciones separadas t >= 0 y t <= 10 se cumplen ambas para 5. Una cadena solo permite ejecutar su primera rama verdadera, pero su orden sigue determinando qué condición de las que se solapan se elige.

Incluye entradas problemáticas

Prueba valores negativos, cero, texto vacío y respuestas en mayúsculas cuando el programa espera minúsculas. Si solo se aceptan "y" y "n", da a cualquier otro texto una respuesta clara como "Please answer y or n".

Cuando una comprobación se comporte de forma inesperada, inspecciona el valor y su tipo antes de evaluar la comparación sospechosa:

print(repr(age), type(age))

Para age = "18", esto muestra '18' <class 'str'>. Convierte el texto antes de intentar age >= 18; colocar la comparación defectuosa dentro de ese mismo print() de depuración provocaría un TypeError antes de que apareciera la salida de diagnóstico. Para problemas de estructura, inspecciona la sangría y el mensaje de error de sintaxis.

Por último, una comparación puede asignar directamente una variable indicadora booleana: is_adult = age >= 18. Esto sustituye a dos ramas cuyas únicas asignaciones son True y False. Usa bool() cuando la expresión subyacente pueda devolver otro tipo de valor.

Puntos clave

  • Sigue solo las condiciones a las que llega el programa y registra como omitidas las comprobaciones que no se realizan.
  • Prueba cada rama, además del valor exacto de cada límite y sus valores próximos.
  • Las comprobaciones amplias anteriores pueden hacer inalcanzables las ramas posteriores.
  • Comprueba los casos sin cubrir, los solapamientos y las entradas inesperadas según la regla prevista.
  • Inspecciona el valor y su tipo antes de evaluar una comparación que pueda fallar.
5

Elige casos con match

Los menús y los comandos suelen comparar un valor con varias opciones fijas. Una sentencia match organiza esas opciones como patrones y ejecuta el primer caso que coincide. Los valores literales, las alternativas y un comodín final permiten resolver muchos menús sencillos. Las capturas y las condiciones de guarda añaden flexibilidad, pero un nombre dentro de un patrón se comporta de forma distinta de un nombre en una comparación. Aprender esa distinción evita que un caso acepte por accidente cualquier entrada.

5.1 Valores fijos, alternativas y un caso para los restantes

Una sentencia match, disponible en Python 3.10 y posteriores, comprueba un valor con una serie de patrones. Ese valor es el valor examinado. Cada case proporciona un patrón y un cuerpo con sangría.

Sigue el primer caso que coincide
command = "stop"
match command:
    case "start":
        print("Starting")
    case "stop":
        print("Stopping")
    case _:
        print("Unknown command")
print("Ready")

El valor examinado es "stop". No coincide con "start", así que Python prueba el siguiente caso. "stop" coincide y el cuerpo muestra Stopping. Después, Python sale de todo el match y muestra Ready. Solo se ejecuta el cuerpo de un caso; no se pasa al cuerpo siguiente y no hace falta ningún break.

Un valor examinado de "jump" llega al patrón comodín final, _, que acepta cualquier valor. La salida es Unknown command y después Ready. Sin ese caso, un valor examinado sin coincidencia simplemente no ejecuta ningún cuerpo y continúa después de la sentencia.

Mantén la disposición y el caso final en orden

Las cabeceras case llevan una sangría de 4 espacios bajo match, y sus cuerpos otros 4 espacios. Todas las cabeceras terminan con dos puntos. Un case _: sin condición de guarda debe ir al final, porque acepta todo. Colocar más casos después provoca un SyntaxError: nunca se podría llegar a esos patrones posteriores.

Un comodín con condición de guarda puede aparecer antes porque su condición adicional puede fallar. Un match en un archivo de programa de ejecución secuencial tampoco puede contener break; esa sentencia necesita un bucle que la contenga.

Comprende cómo coinciden los literales

Un patrón literal usa un número fijo, una cadena, True, False o None. Los patrones de cadena son exactos y distinguen entre mayúsculas y minúsculas: "stop" no coincide con "Stop". Los patrones numéricos usan la igualdad, así que case 1: coincide con 1, 1.0 y True, que es igual a 1.

En cambio, los patrones True, False y None usan la identidad. Por tanto, case True: coincide con el booleano True, pero no con el entero 1. El orden de los patrones importa si tanto un caso numérico como uno booleano pueden aceptar el valor examinado.

Combina alternativas fijas con una barra

Un patrón de alternativas combina alternativas con |:

day = int(input("Day number: "))
match day:
    case 6 | 7:
        print("Weekend")
    case 1 | 2 | 3 | 4 | 5:
        print("Weekday")
    case _:
        print("Not a day number")

Para 6, se ejecuta el primer cuerpo; para 3, el segundo; para 9, el comodín. Sin int(), el "6" introducido sigue siendo una cadena y no coincide con el número 6.

Usa el separador de patrones |, no la palabra lógica or. case "y" or "yes": no es válido; case "y" | "yes": sí lo es.

DecisiónElección inicial clara
Un valor examinado comparado con muchos valores fijosmatch
Rangos como score >= 90if–elif
Condiciones que implican variables distintasif–elif

Para comandos fijos, una cadena if–elif basada en la igualdad puede producir las mismas salidas. Elige la disposición que facilite más la lectura de los casos.

Puntos clave

  • match necesita Python 3.10 o posterior y solo ejecuta el primer caso que coincide.
  • Un comodín _ sin condición de guarda acepta todo y debe ir al final.
  • Usa | para combinar patrones alternativos.
  • Los literales de cadena y numéricos coinciden por igualdad; los patrones True, False y None usan la identidad.
  • Los valores examinados sin coincidencia no ejecutan ningún cuerpo si no hay un caso para los restantes.
  • Usa match para opciones fijas e if–elif para comprobaciones habituales de rangos.

5.2 Capturas, condiciones de guarda y valores con nombre

Los patrones pueden hacer más que comprobar un literal fijo. Un patrón puede dar nombre al valor examinado, y una condición de guarda puede comprobar un requisito adicional antes de aceptar el caso.

Captura primero y comprueba después la condición de guarda

Un patrón de captura es un nombre sin más, como n. Acepta cualquier valor examinado y lo asigna al nombre. Una condición de guarda sigue al patrón con if condition; el cuerpo solo se ejecuta si el patrón coincide y la condición de guarda es verdadera.

temperature = -5
match temperature:
    case 0:
        print("Exactly freezing")
    case t if t < 0:
        print("Below freezing by", -t, "degrees")
    case _:
        print("Above freezing")

Con -5, el primer literal no coincide. El siguiente patrón captura -5 en t y después comprueba t < 0. La condición de guarda es verdadera, así que la salida es Below freezing by 5 degrees.

Con 0, se elige el caso literal antes de intentar la captura. Con 12, la captura tiene éxito, pero la condición de guarda falla, así que Python prueba el comodín y muestra Above freezing. Una condición de guarda falsa no termina la búsqueda de un caso.

Un nombre sin más no consulta una constante

Supón que QUIT = "q". Es tentador escribir case QUIT: para comprobar si el valor examinado es igual a ese valor. Pero un nombre sin más siempre es una captura, incluso si está en mayúsculas. El caso acepta cualquier valor examinado y sobrescribe QUIT con él.

Si hay más casos después de una captura sin condición de guarda, Python informa de un error de sintaxis porque la captura los hace inalcanzables. Si la captura está al final, el error puede pasar inadvertido durante la ejecución. Compara explícitamente con una condición de guarda:

QUIT = "q"
key = "x"
match key:
    case k if k == QUIT:
        print("Quit")
    case _:
        print("Keep working")

Aquí k captura "x". La condición de guarda lo compara con el "q" existente, falla y deja que el comodín muestre Keep working. Un literal case "q": es más sencillo cuando el valor fijo puede escribirse directamente.

Distingue un patrón de valor con punto

Un nombre con punto como math.pi es un patrón de valor, no una captura. Consulta un valor existente y compara el valor examinado con él mediante ==. Las constantes con nombre proporcionadas por módulos o clases pueden usar esta forma. La distinción que debes reconocer es el punto: case n: asigna un nombre; un patrón con punto comprueba un valor existente.

Da nombre a una coincidencia específica con as
answer = "y"
match answer:
    case "y" | "yes" as accepted:
        print("Accepted:", accepted)
    case _:
        print("Please answer y or yes")

El patrón de alternativas comprueba las cadenas permitidas y as almacena el valor examinado que ha coincidido en accepted. Para "y", la salida es Accepted: y. No sustituye la entrada por una palabra estándar: "yes" almacenaría "yes". "Yes" no coincide con ninguna de las cadenas porque las mayúsculas y minúsculas siguen importando.

Una o dos condiciones de guarda pueden encajar de forma natural entre casos fijos. Cuando casi todos los casos comprueban rangos o usan variables distintas, una cadena if–elif suele ser más clara. Cualquiera de las dos estructuras necesita un caso final para los restantes cuando cada entrada deba recibir una respuesta.

Puntos clave

  • Un patrón con un nombre sin más captura el valor examinado aunque ese nombre ya tenga un valor.
  • La condición de guarda se comprueba después de que coincida el patrón; si es falsa, permite probar los casos posteriores.
  • Un patrón de valor con punto compara con un valor existente.
  • as da nombre al valor examinado aceptado por un patrón más específico.
  • Usa un literal o una comparación con condición de guarda para evitar capturar por accidente el nombre de una constante.

Ejemplos de Condiciones en Python

5 Lecciones Interactivas

1

Convierte valores en comparaciones fiables

13 pasos
Sigue una comprobación del límite de una taquilla desde las comparaciones numéricas hasta la entrada de datos, las comprobaciones de texto y un rango con límites incluidos.
  1. 1
    IntroducciónUn límite de almacenamiento necesita una comprobación exacta

    Una taquilla de almacenamiento acepta paquetes que pesen de 1 a 8 kilogramos, con ambos límites incluidos. Antes de elegir una acción, el programa debe convertir esa regla en una respuesta de sí o no, un booleano producido por una comparación, de modo que cada decisión posterior se apoye en una prueba exacta.

    Empieza con comparaciones individuales y después combina los dos límites en un rango. A lo largo del proceso, comprueba si un valor es un número o simplemente texto que parece numérico.

  2. 2
    ExplicaciónUna comparación produce un booleano

    Con weight = 8, la expresión weight < 8 es False: ocho no es menor que sí mismo. La expresión weight <= 8 es True, porque incluye la igualdad.

    Ambos resultados tienen el tipo bool. Escribe True y False con inicial mayúscula y sin comillas. Un texto como "True" es una cadena, y un true en minúsculas sin definir provoca un NameError en lugar de proporcionar un booleano.

  3. 3
    EjemploAlmacena el resultado sin cambiar el peso
    weight = 8
    fits_upper_limit = weight <= 8
    print(weight, fits_upper_limit)
    

    Primero, 8 <= 8 se evalúa como True. La asignación almacena ese booleano en fits_upper_limit; el peso original no cambia. La salida es 8 True.

    El = simple realiza la asignación. La comparación usa <=; para preguntar por valores iguales, usa ==.

  4. 4
    Desafío¿Una comparación actualiza el valor?

    Predice la salida:

    weight = 6
    weight == 8
    print(weight)
    

    ---reveal---

    Muestra 6. La línea intermedia compara el peso actual con 8, pero nunca asigna un valor que lo sustituya. En un archivo de programa, su resultado falso no se utiliza. Una asignación simple weight = 8 cambiaría la salida final a 8.

  5. 5
    ConexiónUna operación aritmética puede dar el valor que se compara

    Una comprobación de números enteros puede comparar un resultado aritmético: n % 2 == 0 calcula primero el resto de dividir entre 2 y después comprueba si es igual a cero.

    Para n = -9, el resto es 1, así que la comprobación es falsa. El resto de Python con divisor positivo 2 es 1 para los enteros impares, incluso cuando el entero original es negativo. Comparar el resto con 1 comprueba si el número es impar.

  6. 6
    ConsejoLos números de coma flotante calculados pueden diferir ligeramente

    0.1 + 0.2 se almacena como 0.30000000000000004, así que su comprobación de igualdad exacta con 0.3 falla.

    Una comprobación con tolerancia plantea otra pregunta: abs((0.1 + 0.2) - 0.3) < 1e-9 comprueba si la distancia es menor que una milmillonésima. abs() elimina el signo de la diferencia. Esta comprobación es verdadera; acepta una pequeña discrepancia en lugar de afirmar que hay igualdad exacta.

  7. 7
    EjemploLos dígitos introducidos empiezan siendo texto
    weight = input("Weight in kilograms: ")
    

    Si el usuario introduce 8, la variable contiene "8". Comparar weight <= 8 provoca un TypeError, porque intenta ordenar una cadena y un entero.

    Lee una medida decimal con weight = float(input("Weight in kilograms: ")). Los mismos dígitos introducidos producen ahora 8.0, que puede compararse numéricamente con 8.

  8. 8
    ExplicaciónLas cadenas siguen los caracteres desde la izquierda

    El orden del texto se basa en puntos de código Unicode. "18" < "8" es verdadero porque el primer par distinto es "1" y "8"; Python no trata esas cadenas como dieciocho y ocho.

    Las mayúsculas, las minúsculas y los espacios también importan. "ready" == "Ready" es falso. Comparar answer.strip().lower() con "ready" elimina los espacios en blanco de los extremos y normaliza las mayúsculas y minúsculas antes de comprobar la igualdad.

  9. 9
    DesafíoComprueba qué pregunta realmente la pertenencia

    Evalúa estas dos comprobaciones:

    "box" in "mailbox"
    "Box" in "mailbox"
    

    ---reveal---

    La primera es True y la segunda es False. La pertenencia busca la subcadena exacta, incluidas las mayúsculas y minúsculas. Las letras "box" aparecen juntas al final de "mailbox"; la "B" mayúscula no aparece ahí. not in invertiría cada resultado.

  10. 10
    EjemploComprueba ambos límites de la regla de la taquilla
    weight = 8
    fits_locker = 1 <= weight <= 8
    print(fits_locker)
    

    La cadena comprueba 1 <= 8 y 8 <= 8. Ambas se cumplen, así que el resultado es True. Con weight = 0.5, falla la comprobación del límite inferior; con 8.5, falla la del superior.

    Todas las comparaciones entre valores vecinos de una cadena deben cumplirse. Sustituir cualquiera de los <= por < excluye ese extremo.

  11. 11
    Idea claveLa ausencia de datos es otra pregunta

    None significa que no hay ningún valor. Compruébalo con weight is None o weight is not None.

    El operador is pregunta si las referencias identifican el mismo objeto. La igualdad numérica usa ==, así que no sustituyas weight == 8 por weight is 8. Los valores pueden ser iguales sin ser el mismo objeto, y una comparación de identidad con un literal numérico produce una advertencia.

  12. 12
    DesafíoCombina la conversión con una comprobación de límites

    Un archivo de programa ejecuta weight = float(input("Weight: ")) y el usuario introduce "8.5". ¿Qué devuelve 1 <= weight <= 8? ¿La conversión rechaza por sí sola la entrada?

    ---reveal---

    Devuelve False porque 8.5 <= 8 no se cumple. La conversión tiene éxito: 8,5 es un número de coma flotante válido. Convertir el texto establece un tipo numérico; la comprobación del rango decide por separado si ese número está permitido.

  13. 13
    RepasoTres preguntas que debes distinguir

    Elige el operador que corresponda al límite, determina el tipo del valor y después sigue la comparación.

    El orden numérico necesita valores numéricos. Las comprobaciones de cadenas conservan los caracteres exactos salvo que limpies el texto. Un rango necesita ambos límites, la pertenencia pregunta por una subcadena y la identidad es la herramienta adecuada para comprobar None.

2

Sigue una decisión de entrega por sus ramas

14 pasos
Construye una decisión de entrega desde un solo if hasta dos alternativas, un valor seleccionado y categorías de servicio ordenadas.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDe una regla a un camino por el código
  2. 2
    EjemploUna advertencia que puede omitirse
  3. 3
    ConsejoCorrige la estructura antes de interpretar los resultados
  4. 4
    DesafíoMueve la última línea al cuerpo
  5. 5
    EjemploDa una acción al camino falso
  6. 6
    Idea claveElse significa todas las entradas rechazadas
  7. 7
    EjemploElige solo la tarifa en una expresión
  8. 8
    DesafíoInterpreta los valores a ambos lados de la condición
  9. 9
    EjemploOrganiza tres categorías de servicio
  10. 10
    EjemploUsa la condición falsa anterior para delimitar el rango
  11. 11
    DesafíoCambia el orden de comprobaciones que se solapan
  12. 12
    ConexiónUn nuevo if es una nueva decisión
  13. 13
    DesafíoDetermina tanto la categoría como la tarifa
  14. 14
    RepasoAdapta la estructura a la elección
3

Construye y protege una condición combinada

13 pasos
Traduce una regla de reservas, agrupa alternativas, usa condiciones de protección en cortocircuito y niega un rango correctamente.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónVarios hechos pueden controlar una acción
  2. 2
    ExplicaciónExige ambos hechos con and
  3. 3
    EjemploPermite cualquiera de los pagos con or
  4. 4
    DesafíoElige una fila que cumpla la condición
  5. 5
    ConsejoDa a cada comparación sus propios operandos
  6. 6
    EjemploColoca las alternativas dentro del requisito compartido
  7. 7
    Idea claveLa agrupación no es el orden de ejecución
  8. 8
    EjemploColoca una condición de protección antes de una media
  9. 9
    Desafío¿A qué operaciones se llega?
  10. 10
    ExplicaciónNegar un rango cambia el conector
  11. 11
    DesafíoConserva los extremos incluidos
  12. 12
    DesafíoTraduce dos requisitos y una exclusión
  13. 13
    RepasoInterpreta el significado, la agrupación y las operaciones alcanzadas
4

Valida, clasifica y prueba una solicitud de entrega

16 pasos
Sigue comprobaciones anidadas, conserva los ceros válidos y diseña pruebas que revelen casos sin cubrir y umbrales incorrectos.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónCada entrada necesita el camino previsto
  2. 2
    EjemploValida antes de elegir un servicio
  3. 3
    EjemploSigue el camino interno
  4. 4
    DesafíoAverigua a qué if pertenece else
  5. 5
    ConexiónReduce el anidamiento cuando haya una sola acción compartida
  6. 6
    ExplicaciónEl cero y la ausencia se consideran falsos
  7. 7
    EjemploUn texto que parece negativo puede cumplir la condición
  8. 8
    DesafíoConserva un cero real
  9. 9
    Idea claveUn operador puede seleccionar texto
  10. 10
    EjemploRegistra un camino sin inventar comprobaciones
  11. 11
    ConsejoElige pruebas para los caminos y los límites
  12. 12
    DesafíoUna condición amplia oculta una rama posterior
  13. 13
    ConexiónBusca casos sin cubrir y solapamientos no previstos
  14. 14
    ConsejoInspecciona el valor antes de una comparación que pueda fallar
  15. 15
    DesafíoPrueba por completo una decisión corregida
  16. 16
    RepasoDa una finalidad clara a los valores y las pruebas
5

Comprueba comandos y añade casos con condiciones de guarda

15 pasos
Construye un menú de comandos, sigue un match numérico con condición de guarda y distingue los nombres de captura de las constantes existentes.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónUn valor examinado y varios casos posibles
  2. 2
    EjemploOrganiza el menú de comandos
  3. 3
    Idea claveEl caso siguiente no se ejecuta automáticamente
  4. 4
    EjemploUsa un cuerpo para dos comandos exactos
  5. 5
    DesafíoColoca el caso alternativo donde resulte útil
  6. 6
    ConsejoComprueba el comportamiento de los patrones numéricos y booleanos
  7. 7
    ExplicaciónUn nombre sin más captura cualquier valor examinado
  8. 8
    EjemploAñade una condición de guarda al valor capturado
  9. 9
    DesafíoContinúa después de una condición de guarda falsa
  10. 10
    EjemploUn nombre en mayúsculas sigue capturando
  11. 11
    ConexiónUn punto cambia el comportamiento de la consulta
  12. 12
    EjemploDa nombre a una alternativa literal que coincide
  13. 13
    DesafíoElige una estructura de menú adecuada a la tarea
  14. 14
    DesafíoConserva un nombre fijo y permite un caso alternativo
  15. 15
    RepasoInterpreta los patrones antes de los cuerpos de los casos

Ejercicios de Condiciones en Python

40 Preguntas de Práctica en 4 sets

Set 1: Interpreta comparaciones y sigue decisiones10 Preguntas de Práctica

Pregunta 1 de 10

Un paquete puede pesar como máximo 6 kilogramos. ¿Qué comprobación acepta exactamente los pesos permitidos usando weight?
  1. weight < 6
  2. weight >= 6
  3. weight <= 6
  4. weight > 6
Mostrar respuestaOcultar respuesta
Respuesta: C
«Como máximo» incluye el máximo, así que weight <= 6 acepta 6 y los pesos inferiores. La comprobación estricta weight < 6 rechaza un paquete justo en el límite permitido. El sentido de la comparación también debe aceptar pesos menores, así que una comprobación de mayor que invierte la regla.

Pregunta 2 de 10

¿Cuál es el resultado de evaluar "14" < "7"?
  1. False, porque 14 supera a 7.
  2. True, porque "1" precede a "7".
  3. False, porque las cadenas son distintas.
  4. True, porque dos dígitos superan a uno.
Mostrar respuestaOcultar respuesta
Respuesta: B
Ambos operandos son cadenas, así que Python compara caracteres desde la izquierda. El carácter "1" precede a "7", lo que hace verdadera esta comparación sin comparar los valores numéricos 14 y 7. La interpretación numérica solo se aplicaría después de convertir las cadenas en números.

Pregunta 3 de 10

¿Qué se muestra?

stock = 0
if stock > 0:
    print("Available")
print("Checked")
  1. Solo Available
  2. Available y después Checked
  3. No se muestra nada
  4. Solo Checked
Mostrar respuestaOcultar respuesta
Respuesta: D
La comparación 0 > 0 es falsa, así que Python omite el print con sangría. El print final está fuera del cuerpo y se ejecuta igualmente, produciendo Checked. Omitir toda la salida supondría tratar incorrectamente esa sentencia sin sangría como parte del cuerpo condicional.

Pregunta 4 de 10

¿Qué valor se asigna a fee?

has_pass = False
fee = 2 if has_pass else 7
  1. 7
  2. 2
  3. False
  4. 0
Mostrar respuestaOcultar respuesta
Respuesta: A
Una expresión condicional comprueba primero su condición y selecciona el valor del caso falso cuando la condición no se cumple. Aquí has_pass es falso, así que fee pasa a ser 7. Elegir 2 supondría interpretar el primer valor escrito como predeterminado, en lugar del valor reservado para una condición verdadera.

Pregunta 5 de 10

¿Qué se muestra?

points = 46
if points >= 50:
    print("Gold")
elif points >= 30:
    print("Silver")
elif points >= 10:
    print("Bronze")
else:
    print("Starter")
  1. Silver y después Bronze
  2. Solo Silver
  3. Solo Bronze
  4. Solo Starter
Mostrar respuestaOcultar respuesta
Respuesta: B
La primera comparación falla porque 46 es menor que 50. La siguiente se cumple, así que Python muestra Silver y sale de la cadena. Aunque 46 también cumple el umbral de bronce, esa condición posterior se omite; una cadena no ejecuta todos los cuerpos cuyas condiciones podrían ser verdaderas.

Pregunta 6 de 10

Una descarga puede empezar si un usuario tiene una suscripción o tiene un pase de un día, incluidos los usuarios que tienen ambos. ¿Qué condición implementa la regla?
  1. has_subscription or has_day_pass
  2. has_subscription and has_day_pass
  3. not has_subscription and has_day_pass
  4. not (has_subscription or has_day_pass)
Mostrar respuestaOcultar respuesta
Respuesta: A
El or inclusivo acepta una suscripción, un pase de un día o ambos, y solo rechaza el caso en que no hay ninguno. Usar and exigiría ambas formas de acceso a la vez. La regla nombra alternativas que permiten la descarga de forma independiente, así que ese requisito adicional rechazaría a usuarios válidos.

Pregunta 7 de 10

Para los valores numéricos total e items, una variable indicadora debe ser verdadera solo cuando una media supere 8. Con cero elementos, debe dar falso sin intentar dividir. ¿Qué expresión implementa ambos requisitos?
  1. total / items > 8 and items != 0
  2. items == 0 or total / items > 8
  3. items != 0 or total / items > 8
  4. items != 0 and total / items > 8
Mostrar respuestaOcultar respuesta
Respuesta: D
La comprobación de que la cantidad no sea cero debe estar a la izquierda de and, para que cero elementos detenga la evaluación antes de dividir y dé falso. Con una cantidad distinta de cero, Python evalúa la comprobación de la media. Colocar primero la división falla con cero; usar or acepta el cero u omite la media para cantidades distintas de cero.

Pregunta 8 de 10

¿Qué devuelve bool("no")?
  1. La cadena "no"
  2. False
  3. True
  4. El valor None
Mostrar respuestaOcultar respuesta
Respuesta: C
La cadena "no" contiene caracteres, así que su valor de verdad es verdadero. bool() convierte ese valor de verdad en el booleano True; no interpreta la palabra como una negativa. Devolver falso supondría confundir una cadena no vacía con una respuesta booleana sobre su significado.

Pregunta 9 de 10

Una regla para números enteros debe aceptar valores de visits de al menos 24. Un programador escribió visits > 24. ¿Qué entrada revela más directamente el resultado incorrecto?
  1. 23
  2. 25
  3. 24
  4. 26
Mostrar respuestaOcultar respuesta
Respuesta: C
La regla prevista acepta 24, pero la comparación estricta escrita lo rechaza. Las entradas 23 y 25 se comportan igual con >= 24 y > 24, así que cualquiera de ellas por sí sola pasaría por alto este error. Probar el límite exacto permite distinguir los dos operadores.

Pregunta 10 de 10

¿Qué se muestra?

mode = "SAVE"
match mode:
    case "save" | "write":
        print("Stored")
    case _:
        print("Unknown")
print("End")
  1. Solo Stored
  2. Unknown y después End
  3. Stored y después End
  4. Solo Unknown
Mostrar respuestaOcultar respuesta
Respuesta: B
El valor examinado "SAVE" no es igual a ninguno de los literales en minúsculas porque la coincidencia de cadenas distingue entre mayúsculas y minúsculas. El comodín muestra Unknown y la línea posterior al match muestra End. Mostrar Stored supondría asumir que la coincidencia de patrones normaliza automáticamente las mayúsculas y minúsculas.
Set 2: Aplica reglas y diagnostica ramas incorrectas10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué valor booleano se almacena en is_odd?

n = -13
is_odd = n % 2 == 1
  1. False, porque n es negativo.
  2. False, porque el resto es -1.
  3. True, porque todo número distinto de cero es impar.
  4. True, porque el resto es 1.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un programa lee level = input("Level: "). El usuario introduce 16. ¿Qué ocurre cuando después evalúa level < 20?
  1. Provoca un TypeError.
  2. Se evalúa como True.
  3. Se evalúa como False.
  4. Cambia level a 20.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Qué sentencia de Python sirve específicamente para no realizar ninguna acción en una rama sin terminar?
  1. else
  2. elif
  3. pass
  4. if
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Cuál es el valor final de label?

points = 37
if points >= 30:
    label = "High"
if points >= 10:
    label = "Middle"
else:
    label = "Low"
  1. "High"
  2. "Middle"
  3. "Low"
  4. "High Middle"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué par de entradas booleanas hace que is_open and not is_full sea verdadero?
  1. is_open = False, is_full = False
  2. is_open = True, is_full = True
  3. is_open = False, is_full = True
  4. is_open = True, is_full = False
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Solo se permite una reserva en un día entre semana y solo si el usuario tiene crédito o un vale. ¿Qué expresión aplica esa regla?
  1. is_weekday and (has_credit or has_voucher)
  2. is_weekday and has_credit and has_voucher
  3. (is_weekday and has_credit) or has_voucher
  4. is_weekday or (has_credit and has_voucher)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué se muestra?

is_open = False
has_booking = True
if is_open:
    if has_booking:
        print("Enter")
    else:
        print("Book first")
else:
    print("Closed")
  1. Solo Book first
  2. Solo Closed
  3. Enter y después Closed
  4. No se muestra nada
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Qué valor devuelve "" or "Reader"?
  1. La cadena vacía ""
  2. El booleano False
  3. La cadena "Reader"
  4. El booleano True
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Qué cabecera de caso dirige tanto la cadena "edit" como "change" a un mismo cuerpo?
  1. case "edit" | "change":
  2. case "edit" or "change":
  3. case "edit" and "change":
  4. case "edit" == "change":
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Qué se muestra?

value = 11
match value:
    case n if n < 0:
        print("Negative", n)
    case n if n % 2 == 0:
        print("Even", n)
    case _:
        print("Other")
  1. Negative 11
  2. Even 11
  3. No se muestra nada
  4. Solo Other
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Sigue los valores a través de varias decisiones10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un cálculo da a = 0.1 + 0.2 y el valor objetivo es b = 0.3. La comprobación debe aceptar diferencias menores que 1e-8. ¿Qué comprobación lo implementa?
  1. a == b
  2. abs(a - b) > 1e-8
  3. abs(a - b) < 1e-8
  4. abs(a + b) < 1e-8
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué se muestra?

remaining = 4
if remaining > 0:
    remaining = 0
if remaining == 0:
    print("Empty")
print(remaining)
  1. Empty y después 0
  2. Solo 0
  3. Empty y después 4
  4. Solo 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Qué valor se asigna a label?

has_booking = True
label = "Reserved" if has_booking else "Open"
  1. True
  2. "Open"
  3. False
  4. "Reserved"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Qué ocurre al evaluar esta expresión?

is_admin = True
count = 0
total = 18
is_admin or count != 0 and total / count > 6
  1. Provoca un ZeroDivisionError inmediatamente.
  2. Devuelve True sin dividir.
  3. Devuelve False sin dividir.
  4. Divide después de comprobar count.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué se muestra y por qué?

has_badge = True
is_active = False
if has_badge:
    if is_active:
        print("Enter")
else:
    print("Get a badge")
print("Checked")
  1. Get a badge y después Checked; la comprobación interna falla.
  2. Enter y después Checked; se cumple la comprobación de credencial.
  3. Solo Checked; se omite el else externo.
  4. Solo Get a badge; se ejecuta el else interno.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Cero es una cantidad introducida válida y None significa que no se ha proporcionado ninguna cantidad. ¿Qué asignación usa un valor predeterminado de 9 solo cuando falta el dato?
  1. count = supplied or 9
  2. count = 9 if not supplied else supplied
  3. count = supplied if supplied else 9
  4. count = 9 if supplied is None else supplied
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Este clasificador de enteros debe mostrar exactamente una etiqueta de signo para cada entero. ¿Qué entrada revela un caso sin cubrir?

if balance < 0:
    print("Negative")
elif balance > 0:
    print("Positive")
  1. 0
  2. -1
  3. 1
  4. 2
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Qué se muestra?

reply = "later"
match reply:
    case "now" | "later" as chosen:
        print(chosen)
    case _:
        print("Unknown")
  1. now
  2. later
  3. Unknown
  4. True
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un sensor acepta lecturas numéricas de -4 a 9, ambos incluidos. ¿Qué condición equivale a not (-4 <= reading <= 9)?
  1. reading <= -4 or reading >= 9
  2. reading < -4 and reading > 9
  3. reading >= -4 and reading <= 9
  4. reading < -4 or reading > 9
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Qué ocurre con EXIT?

EXIT = "x"
key = "z"
match key:
    case EXIT:
        print(EXIT)
  1. Sigue siendo "x" y no se muestra nada.
  2. Sigue siendo "x" y se muestra x.
  3. Pasa a ser "z" y se muestra z.
  4. Pasa a ser True y se muestra True.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Corrige y prueba reglas de decisión combinadas10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué palabra reservada introduce la condición adicional después de un patrón en case n ___ n > 4:?
  1. and
  2. if
  3. as
  4. elif
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Una solicitud de datos acepta "go" aunque haya espacios en blanco alrededor o diferencias de mayúsculas y minúsculas. Debe rechazar "gopher" y "stop". ¿Qué condición lo implementa?
  1. answer.strip().lower() in "go"
  2. answer.strip().lower() == "go"
  3. "go" in answer.strip().lower()
  4. answer.strip() == "go"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Qué se muestra?

units = 0
amount = 15
result = amount / units if units != 0 else "No units"
print(result)
  1. Solo No units
  2. Solo 0
  3. Solo 15
  4. Se provoca un ZeroDivisionError.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Para puntuaciones enteras, la categoría es "High" con al menos 70 puntos, "Mid" de 35 a 69 y "Low" por debajo de 35. Las comprobaciones usan >= en una sola cadena. ¿Qué orden de ramas y etiquetas implementa la regla?
  1. >= 35: Mid; >= 70: High; en otro caso: Low
  2. >= 70: High; >= 35: Low; en otro caso: Mid
  3. >= 35: High; >= 70: Mid; en otro caso: Low
  4. >= 70: High; >= 35: Mid; en otro caso: Low
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un servicio solo debe ejecutarse cuando esté disponible al menos una de dos conexiones, wired y wireless, y no haya mantenimiento activo. ¿Qué condición implementa toda la regla?
  1. wired or wireless and not maintenance
  2. wired and wireless and not maintenance
  3. (wired or wireless) and not maintenance
  4. (wired or wireless) or not maintenance
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Las puntuaciones son enteros de 0 a 12. Las válidas de al menos 9 necesitan "High"; las demás válidas, "Low"; y las no válidas, "Invalid". Un archivo de programa clasifica con if score >= 9: y else:, pero nunca valida el rango. ¿Qué estructura lo corrige para cualquier puntuación entera?
  1. Comprueba score >= 0 fuera; clasifica dentro; en otro caso, muestra Invalid.
  2. Comprueba 0 <= score <= 12 fuera; clasifica dentro; en otro caso, muestra Invalid.
  3. Comprueba score <= 12 fuera; clasifica dentro; en otro caso, muestra Invalid.
  4. Clasifica primero; después comprueba 0 <= score <= 12 y muestra Invalid si falla.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué valor se almacena en chosen?

preferred = ""
alternate = "Morgan"
chosen = preferred or alternate or "Visitor"
  1. "Morgan"
  2. "Visitor"
  3. True
  4. ""
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Para puntuaciones enteras, un clasificador debe usar "Top" con al menos 80, "Pass" de 40 a 79 y "Retry" por debajo de 40. ¿Qué entrada de prueba revela un error en este código?

if score >= 40:
    print("Pass")
elif score >= 80:
    print("Top")
else:
    print("Retry")
  1. 39
  2. 40
  3. 79
  4. 80
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Qué se muestra?

value = True
match value:
    case 1:
        print("Number case")
    case True:
        print("Boolean case")
    case _:
        print("Other case")
  1. Solo Boolean case
  2. Number case y después Boolean case
  3. Solo Number case
  4. Solo Other case
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una cadena de cuatro ramas muestra una de cuatro etiquetas. Cuatro entradas distintas muestran todas la primera etiqueta. ¿Cuántas ramas han cubierto estas pruebas?
  1. Una rama
  2. Dos ramas
  3. Tres ramas
  4. Cuatro ramas
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

55 Términos Clave, cada uno con su definición

A

Asignación
Una asignación almacena un valor bajo un nombre de variable mediante =, sustituyendo cualquier valor que ya estuviera asociado a ese nombre.
La asignación score = 28 cambia score; escribir score == 28 solo compara su valor actual.

B

Bloque
Un bloque es un grupo de sentencias con el mismo nivel de sangría que Python trata como el cuerpo de una sentencia condicional o de otro tipo.
Dos llamadas a print() con sangría bajo una comprobación de temperatura están en el bloque que controla la comprobación.

C

Cláusula elif
Una cláusula elif añade otra rama condicional a una cadena if y solo se considera después de que hayan fallado todas las condiciones anteriores.
Solo se llega a la cláusula elif para puntuaciones de al menos 80 después de que falle la comprobación de 90.
Cobertura de ramas
La cobertura de ramas comprueba si las pruebas elegidas han ejecutado cada rama al menos una vez, incluidas las ramas para los casos restantes y las anidadas.
La cobertura de ramas de una cadena de cuatro ramas necesita al menos cuatro entradas que tomen caminos distintos.
Comparación con distinción entre mayúsculas y minúsculas
Una comparación con distinción entre mayúsculas y minúsculas trata las letras mayúsculas y minúsculas como caracteres distintos al comprobar la igualdad o el orden del texto.
Una comparación con distinción entre mayúsculas y minúsculas rechaza "Yes" cuando el texto exacto requerido es "yes".
Comparación encadenada
Una comparación encadenada combina comparaciones entre valores vecinos en una sola expresión y solo se cumple cuando se cumplen todas las comparaciones de la cadena.
La comparación encadenada 2 <= level <= 9 incluye 2 y 9, pero rechaza un nivel de 10.
Comprobación de identidad
Una comprobación de identidad usa is o is not para comprobar si las referencias identifican el mismo objeto, habitualmente para reconocer None.
La comprobación de identidad result is None distingue un resultado ausente de un valor real de cero.
Condición de guarda del caso
Una condición de guarda del caso es una condición if después de un patrón que debe cumplirse antes de ejecutar su cuerpo; si es falsa, permite probar casos posteriores.
La condición de guarda del caso en case n if n < 0: comprueba el número capturado antes de elegir el caso negativo.
Condición de protección
Una condición de protección es una comprobación situada antes de una operación para que la evaluación en cortocircuito pueda evitar esa operación cuando fallaría.
Una condición de protección comprueba count != 0 antes de la división en count != 0 and total / count > 10.
Condición externa
Una condición externa controla la entrada en un bloque que contiene otra decisión y determina si se llega o no a la comprobación interna.
Cuando la condición externa has_ticket es falsa, se omite la comparación interna de edad.
Condicional anidado
Un condicional anidado es un condicional dentro de otra rama, por lo que solo se llega a su comprobación cuando la ejecución entra en esa rama externa.
El condicional anidado comprueba la edad de un visitante solo después de que se cumpla la comprobación externa de entrada.
Condiciones equivalentes
Las condiciones equivalentes dan el mismo valor de verdad para todas las combinaciones permitidas de sus entradas, aunque sus formas escritas sean distintas.
Las condiciones equivalentes not (age >= 18) y age < 18 coinciden para cualquier edad expresada como número entero.
Conjunción
Una conjunción es una condición combinada con and que solo se cumple cuando se cumplen ambos requisitos, como los dos límites de un rango.
La conjunción age >= 13 and age <= 19 rechaza las edades situadas a ambos lados del rango adolescente.
Conversión de tipos
Una conversión de tipos crea un valor de otro tipo, como al transformar texto con dígitos en un entero mediante int() antes de comparar magnitudes.
La conversión de tipos de level = int(input("Level: ")) permite comprobar un límite numérico.

D

Decisión de dos alternativas
Una decisión de dos alternativas elige exactamente uno de dos caminos mediante if y else, con un cuerpo para cada valor de verdad.
Una decisión de dos alternativas asigna un gasto de envío en ambos caminos antes de mostrar el total.
Diagrama de flujo
Un diagrama de flujo representa los caminos de un programa y muestra una decisión como un rombo con rutas separadas de verdadero y falso hacia la siguiente acción.
Un diagrama de flujo muestra cómo ambas rutas vuelven a unirse después del cuerpo de una decisión de temperatura de una sola alternativa.
Disyunción inclusiva
Una disyunción inclusiva acepta cualquiera de las alternativas y también ambas a la vez; el or lógico de Python sigue este significado.
La disyunción inclusiva permite que is_member or has_coupon se cumpla cuando se dispone tanto de una membresía como de un cupón.

E

Evaluación en cortocircuito
La evaluación en cortocircuito omite un operando lógico posterior cuando el operando izquierdo ya ha determinado si se cumple la condición.
La evaluación en cortocircuito omite total / count después de una comprobación falsa count != 0 combinada con and.
Expresión condicional
Una expresión condicional selecciona y produce uno de dos valores mediante a if condition else b, evaluando solo el valor seleccionado.
La expresión condicional fee = 0 if has_pass else 4 almacena 4 cuando no se dispone del pase.

L

Leyes de De Morgan
Las leyes de De Morgan reescriben un grupo booleano negado negando cada parte e intercambiando and y or, de modo que conservan su valor de verdad.
Las leyes de De Morgan cambian not (A or B) por not A and not B, invirtiendo ambas partes.
Límite incluido
Un límite incluido es un límite que pertenece al rango aceptado y se expresa con <= o >= en una comparación numérica.
El límite incluido de age >= 18 permite que una persona de exactamente 18 años cumpla la condición.

O

Operador de comparación
Un operador de comparación comprueba la igualdad o el orden de valores y produce un resultado booleano, como hace <= al incluir un límite.
El operador de comparación de weight <= 8 acepta un peso de exactamente 8 kilogramos.
Operador de pertenencia
Un operador de pertenencia comprueba si un valor aparece dentro de otro; para cadenas, in y not in comprueban subcadenas exactas.
El operador de pertenencia de "rain" in "raincoat" encuentra el texto y devuelve True.
Operador lógico
Un operador lógico combina o invierte valores de verdad; Python usa las palabras en minúsculas and, or y not para estas operaciones.
Un operador lógico combina los dos requisitos de has_ticket and is_open en una sola comprobación.
Operando
Un operando es un valor o una expresión sobre los que actúa un operador; and y or devuelven uno de sus operandos en lugar de devolver siempre un booleano.
El operando izquierdo de "" or "Guest" se considera falso, así que la expresión devuelve el operando derecho.

P

Patrón as
Un patrón as da nombre al valor examinado aceptado por un patrón más específico y conserva el valor real que ha coincidido para usarlo en el cuerpo.
El patrón as de case "y" | "yes" as reply: almacena "y" cuando esa es la cadena proporcionada.
Patrón comodín
Un patrón comodín es _, que acepta cualquier valor examinado sin darle nombre; un caso comodín sin condición de guarda debe aparecer al final.
Un patrón comodín muestra "Unknown command" cuando fallan los patrones anteriores de comandos fijos.
Patrón de alternativas
Un patrón de alternativas combina patrones alternativos con | y tiene éxito cuando coincide cualquiera de ellos, compartiendo un solo cuerpo de caso.
El patrón de alternativas case "open" | "load": ejecuta el mismo cuerpo para cualquiera de las dos cadenas de comando.
Patrón de captura
Un patrón de captura es un nombre sin más que acepta cualquier valor examinado y lo asigna a ese nombre, aunque el nombre ya almacene un valor.
El patrón de captura case STOP: sobrescribe STOP; escribir en mayúsculas no lo convierte en una consulta.
Patrón de valor
Un patrón de valor es un nombre con punto que consulta un valor existente y compara el valor examinado con él por igualdad, sin capturarlo.
El patrón de valor math.pi compara con un valor existente de un módulo en lugar de asignar un nombre sin punto.
Patrón literal
Un patrón literal comprueba un número fijo, una cadena, un booleano o None; los literales numéricos y de cadena se comparan por igualdad.
El patrón literal case 6: acepta el número 6, pero rechaza el texto "6" devuelto por la entrada.
Precedencia de operadores
La precedencia de operadores determina cómo agrupa sus operadores una expresión sin paréntesis adicionales; and se agrupa antes que or.
La precedencia de operadores interpreta A or B and C como A or (B and C), salvo que los paréntesis lo cambien.
Prueba de valores límite
Una prueba de valores límite comprueba un límite y entradas próximas para detectar una comparación que incluye o excluye un extremo incorrectamente.
Una prueba de valores límite usa 17, 18 y 19 para comprobar una regla de enteros escrita como age >= 18.
Pseudocódigo
El pseudocódigo describe los pasos de un programa en lenguaje cotidiano y aclara las elecciones previstas antes de escribirlas con la sintaxis de Python.
El pseudocódigo puede indicar «Rechaza una puntuación fuera de rango; en caso contrario, asigna su calificación» antes de programar.
Punto de código Unicode
Un punto de código Unicode es el número asignado a un carácter; Python usa estos números al comparar cadenas de izquierda a derecha.
El punto de código Unicode de "Z" es menor que el de "a", así que "Zebra" < "apple" es verdadero.

R

Rama else
Una rama else es el cuerpo alternativo que se ejecuta cuando la condición de su if correspondiente es falsa; la cabecera else: no tiene condición.
En una comprobación if de número par, la rama else se ejecuta para -7, porque su resto no es cero.
Rama inalcanzable
Una rama inalcanzable es una rama en la que ninguna entrada puede entrar porque las decisiones anteriores o los requisitos contradictorios siempre lo impiden.
Se produce una rama inalcanzable cuando elif score >= 90: va después de la comprobación más amplia if score >= 60:.
Rama para los casos restantes
Una rama para los casos restantes trata las entradas que los casos anteriores no aceptaron, como un else final en una sentencia condicional de varias alternativas.
Una rama para los casos restantes puede mostrar "Unknown option" para entradas de menú distintas de "1" o "2".
Reducción del anidamiento
La reducción del anidamiento reescribe decisiones anidadas con menos niveles de sangría, manteniendo las mismas elecciones de ramas y acciones.
Reducir el anidamiento de dos comprobaciones con una acción compartida permite sustituirlo por una condición con and.
Regla de la primera coincidencia
La regla de la primera coincidencia selecciona la primera rama que cumple su condición en una cadena de decisión y omite todas las condiciones y cuerpos restantes.
Según la regla de la primera coincidencia, una puntuación de 95 queda abarcada por >= 60 si esa comprobación amplia aparece primero.

S

Sangría
La sangría es el espacio inicial que indica a qué bloque pertenece una sentencia; la convención de Python usa 4 espacios por nivel.
Quitar un nivel de sangría a print("Done") dentro del cuerpo de un if hace que se ejecute después de toda la decisión.
Sentencia if
Una sentencia if comprueba una condición y ejecuta su cuerpo con sangría solo cuando la condición se considera verdadera; después continúa tras ese cuerpo.
La sentencia if con cabecera if stock > 0: omite su cuerpo cuando stock es cero.
Sentencia match
Una sentencia match comprueba un valor examinado con patrones de caso ordenados y ejecuta solo el cuerpo del primer caso que coincide; después continúa.
La sentencia match para "stop" omite case "start": y ejecuta el cuerpo bajo case "stop":.
Sentencia pass
Una sentencia pass es una sentencia válida que no realiza ninguna acción y permite que exista un bloque obligatorio antes de escribir su código útil.
Una sentencia pass con sangría mantiene válido un cuerpo if sin terminar sin producir salida.

T

Tabla de seguimiento
Una tabla de seguimiento registra los valores de las variables, las condiciones alcanzadas y las acciones en orden de ejecución para poder seguir a mano el camino de un programa.
Una tabla de seguimiento marca las comprobaciones posteriores de calificación como omitidas después de que una rama anterior asigne la calificación.
Tabla de verdad
Una tabla de verdad enumera todas las combinaciones de entradas booleanas y el resultado de cada una, lo que permite comprobar por completo una condición compuesta.
Una tabla de verdad para dos entradas tiene cuatro filas, incluido el caso en que ambas entradas son verdaderas.
Tolerancia
Una tolerancia es la cantidad de diferencia que acepta una comprobación numérica cuando los valores calculados pueden contener pequeños errores de aproximación.
Una tolerancia de 1e-9 permite que abs(a - b) < 1e-9 acepte una pequeña diferencia entre números de coma flotante calculados.

U

Umbral
Un umbral es un valor en el que una decisión cambia de resultado; el operador de comparación determina qué lado incluye ese valor.
Un umbral de calificación de 90 asigna el 90 a la categoría superior cuando la comprobación es score >= 90.

V

Validación de datos de entrada
La validación de datos de entrada comprueba si los datos proporcionados cumplen las reglas permitidas del programa antes de usarlos en otra decisión.
La validación de datos de entrada con 0 <= score <= 100 rechaza 150 antes de que se pueda asignar una calificación.
Valor booleano
Un valor booleano es uno de los dos valores True y False, que Python usa para expresar el resultado de una comprobación de sí o no.
El valor booleano almacenado por is_ready = count >= 4 es True cuando count es igual a 4.
Valor considerado falso
Un valor considerado falso es un valor que hace que una condición no se cumpla, como el cero, None, False, el texto vacío y las colecciones incorporadas vacías.
El cero, considerado falso, hace que quantity or 1 elija el valor predeterminado aunque se haya introducido cero intencionadamente.
Valor considerado verdadero
Un valor considerado verdadero es un valor que hace que una condición se cumpla, como los números distintos de cero y las cadenas no vacías, incluso las que dicen falso.
El valor "False", considerado verdadero, cumple if answer: porque sus caracteres hacen que la cadena no esté vacía.
Valor de verdad en un contexto booleano
El valor de verdad en un contexto booleano es el valor de verdad que usa Python cuando un valor cualquiera aparece en una condición, permitiendo que números o texto controlen una rama.
El valor de verdad permite que if name: rechace una respuesta vacía sin una comparación explícita con "".
Valor examinado
El valor examinado es el valor que una sentencia match comprueba con sus patrones de caso y que se escribe después de la palabra reservada match en la cabecera.
En match command:, el valor actual de command es el valor examinado que se usa en cada intento de coincidencia.
Valor predeterminado
Un valor predeterminado es un valor alternativo que se usa cuando el preferido está ausente o no es adecuado, como el texto seleccionado por una expresión con or.
El valor predeterminado "Guest" se selecciona en name or "Guest" cuando name es la cadena vacía.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar