Bucles en Python

Aprende a hacer que un programa de Python repita tareas. Escribe bucles while que se ejecuten hasta que cambie una condición y bucles for que recorran cadenas, listas y rangos de números, y contrólalos con break, continue y el bloque else del bucle. Aplica los patrones habituales para contar, sumar, calcular medias, encontrar el valor máximo y buscar elementos, crea bucles anidados para cuadrículas y combinaciones, y sigue su ejecución a mano para detectar errores de desfase de una unidad (off-by-one) y bucles que nunca terminan.

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

Lo que aprenderás

  1. Escribe bucles while que repitan un bloque de código mientras una condición sea verdadera, asegúrate de que todos terminen y úsalos para leer datos de entrada hasta que el usuario termine.
    • Escribe un bucle while que cuente y actualice valores
      Lee y escribe las tres partes que hacen funcionar un bucle while: un valor inicial, una condición que se evalúa antes de cada pasada y una actualización en el cuerpo con sangría.
    • Asegúrate de que un bucle while termine
      Reconoce los bucles infinitos, explica por qué se producen, corrígelos y detén un programa atascado en uno.
    • Lee datos de entrada hasta que el usuario termine
      Usa bucles while para seguir leyendo valores hasta que aparezca un valor de parada y para volver a preguntar hasta que el usuario dé una respuesta aceptable.
  2. Usa bucles for para recorrer cada elemento de una cadena o lista y cada número de un rango, y decide cuándo conviene más un bucle for o un bucle while.
    • Recorre los elementos de una secuencia con un bucle
      Escribe bucles for que recorran en orden cada carácter de una cadena o cada valor de una lista corta, y usa correctamente la variable del bucle.
    • Genera secuencias numéricas con range
      Usa range con uno, dos o tres argumentos para repetir un número fijo de veces o recorrer enteros separados por un paso constante, también en orden descendente.
    • Elige entre un bucle for y un bucle while
      Decide qué tipo de bucle se adapta a una tarea y convierte un bucle de conteo de una forma a la otra.
  3. Cambia el flujo normal de un bucle: sal antes de tiempo, omite el resto de una iteración y ejecuta código solo cuando el bucle haya terminado sin que se haya interrumpido.
    • Sal de un bucle de forma anticipada con break
      Usa break para terminar un bucle en cuanto complete su tarea, incluido el patrón while True para bucles de entrada.
    • Pasa a la siguiente iteración con continue
      Usa continue para omitir el resto de una iteración, evita su problema en los bucles while y distingue entre continue, break y pass.
    • Ejecuta código cuando un bucle termine sin break
      Añade un bloque else a un bucle for o while para informar del caso en que no se ejecutó ningún break, y usa una variable indicadora para la misma tarea.
  4. Usa los patrones habituales de bucles para contar valores, sumarlos y calcular su media, encontrar el valor máximo y el mínimo y buscar elementos que cumplan una condición.
    • Cuenta y acumula valores
      Usa contadores y acumuladores para obtener un conteo, un total, un producto, una media o un fragmento de texto a lo largo de las iteraciones de un bucle.
    • Encuentra el valor máximo y el mínimo
      Lleva un registro del mejor valor encontrado hasta el momento para hallar un máximo o un mínimo, elige un valor inicial seguro y registra también dónde apareció.
    • Busca elementos que cumplan una condición
      Comprueba los elementos uno a uno para encontrar una coincidencia, decide «no encontrado» solo después de comprobarlos todos y responde a preguntas como «¿hay alguno…?» y «¿todos…?».
  5. Coloca un bucle dentro de otro para trabajar con filas y columnas, combinaciones y figuras, predice cuántas veces se ejecuta el cuerpo interno y controla ambos bucles.
    • Crea un bucle dentro de otro bucle
      Escribe bucles anidados para cuadrículas, tablas, combinaciones y patrones crecientes, y cuenta cuántas veces se ejecuta el cuerpo interno.
    • Controla el flujo de ejecución de bucles anidados
      Usa condiciones, break, continue y variables indicadoras dentro de bucles anidados, sabiendo que cada sentencia afecta solo a su propio bucle.
  6. Predice exactamente qué hace un bucle siguiendo su ejecución a mano, cuenta sus iteraciones y detecta y corrige errores de desfase de una unidad y otros errores habituales de programación en bucles.
    • Sigue la ejecución de un bucle con una tabla de seguimiento
      Ejecuta un bucle a mano en una tabla de seguimiento para predecir su salida, sus valores finales y su número de iteraciones, y usa llamadas a print para seguirlo automáticamente.
    • Detecta y corrige errores de desfase de una unidad
      Detecta bucles que se ejecutan una vez de más o de menos, usa reglas exactas para contar iteraciones y corrige los límites.

Guía de estudio de Bucles en Python

6 capítulos

1

Repite acciones con bucles while

Un programa puede seguir pidiendo datos de entrada o repetir un cálculo hasta alcanzar un objetivo. Un bucle while lo hace posible comprobando una condición antes de cada pasada por su cuerpo. Relacionarás el valor inicial, la comprobación y la actualización, y después usarás esa estructura para la entrada y la validación. Seguir los cambios de los valores también revela por qué un bucle termina, omite todo su cuerpo o sigue ejecutándose sin alcanzar una salida.

1.1 Cómo repite tareas un bucle while

Un bucle repite un bloque de código. Cada pasada por el bloque es una iteración. Un bucle while comprueba una condición antes de cada pasada y ejecuta su cuerpo mientras esa condición sea verdadera. Esto encaja con una tarea como «seguir sumando hasta que el total llegue a 100».

Inicio, comprobación y actualización

Un bucle de conteo necesita un valor inicial, una condición y una actualización. La cabecera termina en dos puntos. Aplica al cuerpo una sangría de cuatro espacios:

n = 3
while n > 0:
    print(n)
    n = n - 1
print("Liftoff!")

La salida es:

3
2
1
Liftoff!

En la primera comprobación, n > 0 es verdadero porque n es 3. Python imprime 3, resta 1 y vuelve a la cabecera. Repite con 2 y después con 1. La actualización hace que n sea igual a 0, así que la siguiente comprobación es falsa. Python omite el cuerpo y ejecuta el último print.

La sangría determina qué se repite. Ambas líneas con sangría pertenecen al cuerpo. La última línea está alineada con while, así que se ejecuta una vez después del bucle. Un if comprueba su condición una vez; while vuelve a comprobarla después de completar cada ejecución del cuerpo.

La comprobación se hace al principio

Cambiar una variable no interrumpe el resto de la ejecución actual del cuerpo:

n = 1
while n > 0:
    n -= 1
    print("Still in this pass")
print(n)

Esto imprime Still in this pass y después 0, en líneas separadas. La actualización hace falsa la condición, pero Python solo la comprueba al volver a la cabecera. Empezar con n = 0 omitiría todo el cuerpo: un bucle while puede ejecutarse cero veces.

Actualizaciones breves y cambios de valores

n -= 1 significa n = n - 1. Del mismo modo, count += 1 suma 1, balance *= 1.07 multiplica por 1,07 y n //= 10 sustituye n por su cociente entero entre 10. Python no tiene operador de incremento: count++ es un error de sintaxis. Escribir ++count aplica dos veces el más unario y deja el entero sin cambios.

Aquí un bucle elimina un dígito en cada pasada:

n = 472
total = 0
while n > 0:
    total += n % 10
    n //= 10
print(total)

El resto (residuo) n % 10 es el último dígito. Primero se suma 2 y n pasa a ser 47. Después se suma 7 y n pasa a ser 4. Por último se suma 4 y n pasa a ser 0. La salida es 13. La actualización prepara la siguiente pasada y acerca el bucle a la salida.

Un bucle con un objetivo no necesita tener un número de repeticiones conocido de antemano. Partir de un saldo de 1000, multiplicarlo por 1,07 e incrementar un contador de años hasta que el saldo alcance 2000 requiere 11 pasadas. Tras 10 pasadas, el saldo es aproximadamente 1967,15; tras 11, es aproximadamente 2104,85.

Las condiciones pueden combinar comparaciones con and, or y not. También funciona el valor de verdad en un contexto booleano: para un entero, while n: repite mientras n sea distinto de cero. Usa una condición cuyo significado resulte fácil de seguir. Mantén una sangría uniforme con espacios; los niveles que no coinciden pueden lanzar IndentationError, y mezclar tabulaciones y espacios puede lanzar TabError.

Puntos clave

  • Un bucle while comprueba su condición antes de cada iteración, así que su cuerpo puede ejecutarse cero veces.
  • Inicializa antes del bucle y actualiza dentro de él para avanzar hacia la salida.
  • Las líneas posteriores a una actualización se ejecutan antes de que vuelva a comprobarse la condición.
  • La sangría determina qué sentencias se repiten.
  • Usa += y -= para las actualizaciones; Python no tiene operador de incremento ++.

1.2 Por qué un bucle sigue ejecutándose

Un bucle infinito sigue repitiéndose sin alcanzar una salida. Puedes ver la misma salida desplazándose por la pantalla o un programa que parece no hacer nada. Para encontrar la causa, sigue los valores usados en la condición y busca una vía de salida alcanzable.

Localiza la actualización

Este bucle sigue imprimiendo 3:

n = 3
while n > 0:
    print(n)

La comprobación sigue siendo verdadera porque nada cambia n. Añade n -= 1 dentro del cuerpo para que se impriman los valores 3, 2 y 1 antes de que termine el bucle. Poner esa actualización después del bucle no ayuda: el programa no puede alcanzarla mientras el bucle siga ejecutándose.

La dirección también importa. Con while n > 0:, una actualización de n += 1 hace crecer un valor positivo. Los enteros de Python no pasan a ser negativos al superar un máximo fijo que permita una salida accidental. Expresa el cambio que esperas, como «queda un intento menos», y comprueba que el código realiza ese cambio en cada ruta por el cuerpo.

Un objetivo puede no alcanzarse

Una actualización puede cambiar el valor en cada pasada y aun así no alcanzar nunca un objetivo de igualdad:

n = 1
while n != 10:
    print(n)
    n += 2

Los valores son 1, 3, 5, 7, 9, 11 y así sucesivamente. Siempre son impares, así que ninguno es igual a 10. Para la tarea «imprimir valores impares menores que 10», usa while n < 10:. En cuanto n pasa a ser 11, esa condición es falsa. La comparación elegida debe corresponder a si la tarea termina en un valor o al cruzar un límite.

Pasos decimales e igualdad exacta

Muchas fracciones decimales se almacenan de forma aproximada como números de coma flotante. Sumar repetidamente 0.1 a 0.0 diez veces da 0.9999999999999999. Por tanto, un bucle que espera una igualdad exacta con 1.0 no se detiene donde se pretendía.

Cuando la tarea consiste en recorrer un conjunto fijo de décimas, cuenta con enteros y calcula cada decimal:

for i in range(11):
    x = i / 10
    print(x)

Esto recorre 11 valores desde 0.0 hasta 1.0. El conteo entero controla las repeticiones; el decimal almacenado no decide si el bucle debe detenerse.

Comprueba todas las rutas por el cuerpo

Antes de ejecutar un bucle while, localiza sus valores iniciales, su condición y todas las sentencias que cambian esos valores. Comprueba que el cambio puede hacer falsa la condición. Si un if omite una actualización, sigue también esa ruta. Una línea temporal como print("n =", n) dentro del cuerpo puede mostrar un valor atascado o que se aleja del límite.

Para interrumpir un programa en ejecución, pulsa Ctrl+C en una terminal o usa el botón Detener o Interrumpir del editor. En una terminal, Python suele mostrar KeyboardInterrupt con una traza de la excepción.

Repetición deliberada

while True: mantiene deliberadamente verdadera la condición de su cabecera. Su cuerpo usa break para salir del bucle cuando ocurre un evento, como que el usuario introduzca «quit». La salida debe ser alcanzable. Un bucle de entrada puede seguir esperando porque el usuario no ha solicitado salir; un error de programación es un bucle cuya lógica hace imposible la salida prevista.

Puntos clave

  • Comprueba que toda ruta que se repite pueda alcanzar una salida.
  • Una actualización ausente, mal situada o en la dirección equivocada puede mantener un bucle while en ejecución.
  • El tamaño del paso puede hacer que se sobrepase un objetivo de igualdad sin alcanzarlo.
  • Usa un contador entero para un número fijo de pasos decimales.
  • Ctrl+C o la opción de interrumpir del editor detienen un programa en ejecución.
  • Un bucle deliberado while True sale mediante un break alcanzable.

1.3 Bucles de entrada y respuestas aceptables

Un bucle de entrada puede recoger una cantidad desconocida de datos o seguir preguntando hasta que una respuesta sea aceptable. En ambos casos, la nueva entrada debe influir en la siguiente decisión de repetir.

Detente ante un valor centinela

Un valor centinela es una entrada especial que significa «no hay más datos». Elige un valor que no pueda ser un dato real. Para conteos positivos, 0 puede servir; si 0 es una medida válida, elige otra señal de parada.

La lectura inicial obtiene el primer valor antes de comprobar la condición:

total = 0
number = int(input("Number (0 to stop): "))
while number != 0:
    total += number
    number = int(input("Number (0 to stop): "))
print("Total:", total)

Para las entradas 4, 7 y 0, el cuerpo suma primero 4 y después 7. Leer 0 hace falsa la siguiente condición. El programa imprime Total: 11; nunca procesa el centinela. Si la primera entrada es 0, el cuerpo se ejecuta cero veces y el total sigue siendo 0.

La lectura final dentro del cuerpo es esencial. Sin ella, el mismo primer valor se procesa indefinidamente. La comprobación también debe hacerse antes de procesar un valor recién leído: de lo contrario, un centinela puede contarse como dato.

Mantén la coherencia de los tipos

input() devuelve texto. La cadena "0" no es igual al entero 0. Convierte la entrada numérica con int() antes de compararla con un centinela numérico, o conserva la entrada como texto y compara con una cadena como "done". Una conversión numérica espera una cadena numérica válida; una comprobación de rango evalúa el número resultante.

Para una media, mantén un contador junto al total. Con el centinela -1 y las entradas 8, 6, 10 y -1, el total es 24 y el conteo es 3. Divide después del bucle para obtener 8.0. Si la primera entrada es -1, el conteo sigue siendo 0, así que usa if count > 0: antes de dividir. Esto permite manejar un conjunto de datos vacío sin ZeroDivisionError.

Vuelve a preguntar mientras la respuesta no sea válida

Un bucle de validación describe las respuestas no aceptables en su condición:

age = int(input("Age (0-120): "))
while age < 0 or age > 120:
    print("Please enter an age from 0 to 120.")
    age = int(input("Age (0-120): "))
print("Thank you.")

Con 150, -2 y 34, el aviso aparece dos veces. El valor 34 hace falsas ambas comparaciones, así que el bucle termina. También se aceptan los extremos 0 y 120.

La palabra or importa: una edad no es válida si está por debajo del mínimo o por encima del máximo. Escribir age < 0 and age > 120 no rechazaría nada, porque un número no puede cumplir ambas condiciones.

Para una respuesta de sí o no, la comprobación de invalidez es answer != "y" and answer != "n". Una respuesta debe ser distinta de ambas cadenas aceptadas para rechazarse. Con or, incluso "y" provocaría otra repetición porque es distinta de "n". Sigue la ejecución con una respuesta aceptable y otra no aceptable para comprobar una condición de este tipo.

Las mismas tareas pueden usar while True con una sola lectura en el cuerpo, seguida de una comprobación de salida y break. Esto sitúa la decisión inmediatamente después de la entrada y evita escribir la lectura dos veces.

Puntos clave

  • Un valor centinela marca el final de los datos y debe comprobarse antes de procesarlo.
  • Un bucle con lectura inicial lee antes del bucle y vuelve a leer al final del cuerpo.
  • Compara tipos compatibles: input devuelve una cadena.
  • La validación se repite mientras la respuesta actual no sea válida.
  • Comprueba que el conteo sea positivo antes de calcular una media.
2

Recorre secuencias con bucles for y range

Cuando una tarea recorre cada carácter, cada valor de una lista o una secuencia conocida de números, un bucle for se encarga de avanzar. Puedes concentrarte en la acción para cada elemento. Un rango proporciona pasos enteros sin escribir una lista larga. Su inicio, su límite de parada excluido y su paso explican tanto los valores recorridos como los casos vacíos. Comparar esta estructura con los bucles while te ayudará a elegir una forma clara de expresar una tarea.

2.1 Recorre caracteres y valores de listas

Un bucle for recorre en orden los elementos de una secuencia. En cada pasada, Python asigna el siguiente elemento a la variable del bucle y ejecuta el cuerpo con sangría. Un bucle sobre una secuencia suele llamarse bucle de iteraciones determinadas porque los elementos le proporcionan un conjunto definido de tareas.

Un elemento cada vez

Una cadena es una secuencia de caracteres:

for ch in "cat":
    print(ch)

Esto imprime c, a y t en líneas separadas. Los espacios y los signos de puntuación también cuentan como caracteres. La cadena "hi there" tiene ocho caracteres, incluido su espacio, así que recorrer cada carácter requiere ocho pasadas.

Una lista contiene una secuencia de valores. Su forma literal usa corchetes y comas:

scores = [3, 41, 12]
for score in scores:
    print(score * 2)

La salida es 6, 82 y 24, cada uno en su propia línea. score contiene un número cada vez, no toda la lista ni su posición. No hace falta actualizar manualmente un contador para pasar de 3 a 41 y a 12.

Usa un nombre que describa un elemento: name en names o score en scores. Si el cuerpo nunca necesita el valor actual, _ es un nombre habitual para esa variable del bucle que no se usa.

La asignación no sustituye un elemento

La variable del bucle es una variable normal. Asignarle un número diferente no sustituye el número de la lista:

numbers = [1, 2, 3]
for n in numbers:
    n = n * 10
    print(n)
print(numbers)

El cuerpo imprime 10, 20 y 30. En cada nueva iteración, se asigna a n el siguiente elemento original de la lista. La última línea de salida es [1, 2, 3]: la lista en sí no ha cambiado. Después del bucle, n conserva 30, el último valor que se le asignó en el cuerpo.

Una secuencia vacía no da trabajo al cuerpo. Con for ch in "":, hay cero pasadas y el bucle no realiza ninguna asignación a ch. No des por hecho que un bucle creará su variable cuando pueda no haber elementos.

Pertenencia dentro de un bucle

En la cabecera de un for, in introduce la secuencia que se va a recorrer. En una condición, comprueba la pertenencia y produce True o False. Estos usos pueden combinarse:

vowels = 0
for ch in "education":
    if ch in "aeiou":
        vowels += 1
print(vowels)

Se recorre cada carácter, pero el contador solo cambia para e, u, a, i y o. La salida es 5. El if tiene sangría dentro del bucle y la actualización del contador tiene sangría dentro del if.

Este bucle también muestra por qué una variable del bucle y un contador tienen funciones distintas. ch contiene el carácter actual; vowels registra cuántos caracteres han cumplido la condición hasta el momento. El contador se inicializa antes del bucle para conservar su resultado entre pasadas.

Un entero por sí solo no puede proporcionar elementos: for i in 5: lanza TypeError. Para repetir una acción cinco veces, escribe for _ in range(5):. El rango proporciona los pasos, aunque el cuerpo no use sus valores.

Puntos clave

  • Un bucle for asigna en orden cada elemento de la secuencia a su variable del bucle.
  • Los espacios y los signos de puntuación son caracteres de una cadena.
  • Reasignar una variable numérica del bucle deja la lista original sin cambios.
  • Una secuencia vacía provoca cero ejecuciones del cuerpo y ninguna asignación a la variable del bucle.
  • En una condición, in comprueba la pertenencia; en la cabecera de un for, introduce los elementos que se van a recorrer.
  • Usa range(5), no el entero 5, para proporcionar cinco repeticiones.

2.2 Elige el inicio, el límite de parada y el paso de un rango

Un rango describe enteros separados por un paso constante. Es útil para repetir tareas un número fijo de veces, contar hacia delante o hacia atrás y seleccionar pasos regulares. Su límite de parada siempre queda excluido.

Tres formas
FormaSignificadoValores
range(5)Empieza en 0; paso de 10, 1, 2, 3, 4
range(2, 6)Empieza en 2; paso de 12, 3, 4, 5
range(1, 10, 2)Empieza en 1; paso de 21, 3, 5, 7, 9

Con un argumento, ese argumento es el límite de parada. Con dos, son el inicio y el límite de parada. Con tres, el último argumento es el paso que se suma después de cada valor. range(0, 10, 3) recorre 0, 3, 6 y 9; el siguiente paso llegaría a 12, así que no se proporciona.

El límite de parada sigue excluido incluso cuando un paso podría caer exactamente en él. range(0, 10, 5) proporciona solo 0 y 5. Con el paso positivo predeterminado de 1 y un límite de parada mayor que el inicio, el número de valores proporcionados es el límite de parada menos el inicio.

Cuenta hacia atrás con un paso negativo

range(5, 0, -1) proporciona 5, 4, 3, 2 y 1. Para incluir 0, sitúa el límite de parada por debajo: range(5, -1, -1) proporciona seis valores y termina en 0.

La dirección debe concordar con los límites. range(5, 0) está vacío porque su paso predeterminado es positivo. range(1, 5, -1) también está vacío porque empieza por debajo del límite de parada, pero avanza hacia abajo. Los rangos vacíos son válidos y provocan cero iteraciones; un paso cero, en cambio, lanza ValueError.

Sitúa el último valor necesario dentro del límite

Para sumar los enteros pares del 2 al 20:

total = 0
for n in range(2, 21, 2):
    total += n
print(total)

El límite de parada de 21 permite recorrer el 20. Los diez valores suman 110, así que el programa imprime 110. Usar 20 como límite de parada excluiría el 20 y daría 90.

Para una tabla de multiplicar, deja que el rango proporcione los factores:

for i in range(1, 11):
    print(7, "x", i, "=", 7 * i)

La primera línea de salida es 7 x 1 = 7 y la décima es 7 x 10 = 70. Si no se usa el número en sí, for _ in range(3): puede repetir un mensaje tres veces.

Inspecciona un rango y comprueba sus argumentos

list(range(2, 6)) produce [2, 3, 4, 5], lo que resulta útil para comprobar los límites. len(range(0, 10, 3)) es 4. Un rango almacena los límites y el paso que lo definen en lugar de construir una lista que contenga todos los enteros.

Los argumentos son enteros, incluidos el cero y los enteros negativos: range(-3, 3) recorre de -3 a 2. Un número de coma flotante como 3.0 se rechaza con TypeError, aunque no tenga parte fraccionaria. Un conteo introducido como texto puede convertirse primero con n = int(input("How many? ")) y usarse después en range(n).

Puntos clave

  • El límite de parada de un rango queda excluido en todas sus formas.
  • Si se omite el inicio, se usa 0; si se omite el paso, se usa 1.
  • Cuenta hacia atrás con un paso negativo y un límite de parada inferior al inicio.
  • Los límites que no concuerdan con la dirección del paso producen un rango vacío.
  • Los argumentos de range deben ser enteros y su paso no puede ser cero.
  • Inspecciona los valores proporcionados con list() y su cantidad con len().

2.3 Elige un bucle adecuado para la tarea

Elige un bucle preguntándote qué controla la repetición. Si hay una secuencia de elementos que recorrer o un número de repeticiones, for suele expresar la tarea directamente. Si la siguiente repetición depende de una condición cambiante o de una entrada futura, while sitúa esa decisión en su cabecera.

Elementos definidos o una condición cambiante
TareaBucle adecuadoMotivo
Mostrar cada nombre de una listafor name in names:La lista proporciona los elementos.
Repetir un mensaje el número de veces elegido por el usuariofor _ in range(n):El número introducido proporciona un conteo.
Leer mensajes hasta «quit»whileEl momento de parada depende de entradas futuras.
Hacer crecer un saldo hasta un objetivowhile balance < target:El saldo actual decide si se repite.

No es necesario escribir el conteo como un literal en el programa. Después de leer n de la entrada, range(n) sigue proporcionando un conjunto determinado de pasos. Un bucle de iteraciones indeterminadas depende de una condición cuyo momento de parada no se especifica como un número de repeticiones.

Suponer un número grande de repeticiones no se adapta bien a «hasta terminar». Un bucle sobre range(1000) puede agotar sus intentos antes de que el usuario termine, y una versión sin comprobación de salida continuará cuando el trabajo ya esté completo.

Reescribe un bucle de conteo

Estos dos bucles imprimen del 1 al 5, cada número en su propia línea:

for i in range(1, 6):
    print(i)
i = 1
while i < 6:
    print(i)
    i += 1

En la versión while, el inicio del rango pasa a ser la inicialización, el límite de parada excluido pasa a ser la comparación < y el paso pasa a ser la actualización. El cuerpo usa i antes de esa actualización. Mover la actualización antes de print(i) desplazaría los valores impresos.

Contar hacia atrás cambia tanto la comparación como la actualización:

i = 10
while i > 0:
    print(i)
    i -= 2

Esto imprime 10, 8, 6, 4 y 2, igual que lo haría for i in range(10, 0, -2):. El rango descendente excluye su límite de parada, así que la condición while correspondiente es i > 0.

Ambas formas realizan la misma tarea de imprimir el conteo; los valores finales de sus variables de bucle son distintos. La versión while realiza su última actualización a 0 antes de detenerse. La versión for termina después de asignar el último valor proporcionado, 2.

Un rango conserva los límites que recibió
n = 3
for i in range(n):
    n = 10
    print(i)

Esto sigue imprimiendo 0, 1 y 2. El rango se creó usando 3; asignar 10 a n no lo reconstruye. Un break puede terminar el bucle antes de tiempo, pero cambiar esa variable separada no cambia los números que proporciona el rango.

En cambio, una cabecera while vuelve a evaluar su expresión cada vez que se regresa a ella. Si esa expresión usa n, cambiar n en el cuerpo puede cambiar cuándo termina el bucle. Cuando ambas formas expresan claramente una tarea de conteo, la versión for se encarga de avanzar sin una actualización manual que puedas olvidar.

Puntos clave

  • Usa for para recorrer elementos proporcionados o un conteo conocido, incluso si se lee durante la ejecución.
  • Usa while cuando una condición cambiante o una entrada futura controle la repetición.
  • Al convertir un bucle de conteo, debes conservar el inicio, el límite, el paso y el orden de las operaciones.
  • Cambiar una variable usada para crear un rango no cambia ese rango.
3

Controla un bucle con break, continue y else

Normalmente, un bucle completa su cuerpo y vuelve para otra pasada. A veces debe detenerse en cuanto aparece un resultado, u omitir el elemento actual y continuar. Break y continue expresan esas decisiones. Un bucle también puede tener un bloque else para la finalización normal. Seguir el salto exacto de cada sentencia te ayudará a leer búsquedas, bucles de entrada e intentos limitados sin confundir una salida anticipada con una finalización normal.

3.1 Termina antes de tiempo con break

break termina inmediatamente el bucle más interno que lo contiene. Python omite el resto de ese cuerpo y todas las iteraciones restantes, y después continúa tras el bucle. Una condición dentro del cuerpo decide cuándo debe producirse esta salida anticipada.

Detente al encontrar el primer resultado

Busca el primer múltiplo de 7 mayor que 50:

for n in range(51, 100):
    if n % 7 == 0:
        print(n)
        break

El bucle comprueba 51, 52, 53, 54, 55 y 56. El resto es cero en 56, así que Python imprime 56 y sale del bucle. Requiere seis iteraciones, aunque el rango puede proporcionar 49 números. Sin break, el bucle también imprimiría los múltiplos de 7 posteriores.

break tiene sangría dentro del if, así que solo se ejecuta cuando hay una coincidencia. Si estuviera alineado con if, se ejecutaría en la primera iteración, independientemente de la comprobación. Un break dentro de un if termina el bucle que contiene ese if; no se limita a terminar el bloque condicional.

Lee una vez y después decide si procesar

Un bucle while True sitúa la decisión de salida después de leer la entrada:

while True:
    line = input("> ")
    if line == "done":
        break
    print(line)
print("Done!")

Para las entradas «hello», «there» y «done», las líneas de respuesta son:

hello
there
Done!

El centinela se comprueba antes de la línea de procesamiento. Cuando aparece, break salta por encima de print(line). El print final sin sangría se ejecuta después del bucle. Solo hay una sentencia de entrada porque cada pasada empieza leyendo una línea nueva.

Un total numérico usa el mismo orden: inicializa total = 0 antes del bucle; lee y convierte un número; sal con break si es 0; en caso contrario, súmalo. Para 4, 7 y 0, el total es 11. Procesar antes de comprobar la salida permitiría que el centinela entrara en el cálculo, lo que importa cuando el valor de parada podría alterar un conteo, un producto o una media.

Valida al leer la entrada
while True:
    age = int(input("Age: "))
    if 0 <= age <= 120:
        break
    print("Please enter an age from 0 to 120.")
print("Accepted:", age)

La comparación encadenada acepta una edad de 0 a 120, ambos incluidos. Significa 0 <= age and age <= 120. Un número aceptado provoca la salida antes del aviso; un número fuera de ese rango llega al aviso y después a otra lectura. En esta forma, el if describe una respuesta válida, mientras que un bucle de validación controlado desde la cabecera describe una no válida.

Interpreta el salto literalmente

Una sentencia después de break en el mismo bloque no puede ejecutarse. Coloca un mensaje o un resultado guardado antes del break cuando pertenezca al caso de éxito. Coloca el código después del bucle cuando deba ejecutarse tanto tras una salida anticipada como tras una finalización normal.

break debe estar dentro de un bucle; de lo contrario, Python lanza SyntaxError. Varios puntos de salida separados pueden dificultar el seguimiento de un bucle. Cuando una única condición describe de forma natural la regla de parada de la tarea, mantenerla en la cabecera puede facilitar el seguimiento de la ruta.

Puntos clave

  • Break termina inmediatamente el bucle más interno que lo contiene.
  • Coloca el break dentro de la condición que deba provocar la salida.
  • Un bucle de entrada while True lee, comprueba si aparece el centinela y después procesa los datos.
  • Las sentencias después de break en el mismo bloque son inalcanzables.

3.2 Omite un elemento con continue

continue omite el resto de la iteración actual. El bucle sigue activo: un bucle for toma su siguiente elemento y un bucle while vuelve a su condición. Resulta útil cuando un elemento no debe recibir ninguna parte del procesamiento posterior a una comprobación.

Omite valores seleccionados
total = 0
for n in range(1, 11):
    if n % 3 == 0:
        continue
    total += n
print(total)

El rango proporciona los diez enteros del 1 al 10. En 3, 6 y 9, continue omite la suma. La suma de los diez es 55; excluir esos tres valores resta 18, así que el programa imprime 37.

Continue no elimina una iteración del rango. El cuerpo sigue empezando con cada valor, incluidos los que se omiten. Cambia qué líneas posteriores se ejecutan en esa pasada.

Un filtro positivo puede expresar la misma tarea. En un bucle sobre [5, -2, 8, -7, 3], if n < 0: continue seguido de print(n) imprime 5, 8 y 3. Poner el print dentro de if n >= 0: da la misma salida. Continue suele ser útil cuando siguen varias líneas de procesamiento, porque los elementos rechazados pueden salir inmediatamente de esa parte del cuerpo.

No omitas una actualización de while
i = 0
while i < 5:
    if i == 2:
        continue
    print(i)
    i += 1

Esto imprime 0 y 1 y después se atasca en 2. En 2, continue salta a la condición sin alcanzar la actualización. La condición sigue siendo verdadera y se vuelve a tomar la misma rama.

Para omitir la impresión de 2 y seguir avanzando, actualiza también en esa rama:

i = 0
while i < 5:
    if i == 2:
        i += 1
        continue
    print(i)
    i += 1

Ahora la salida es 0, 1, 3 y 4 en líneas separadas. La ruta que omite la impresión avanza de 2 a 3. Cada ruta por este cuerpo realiza exactamente una actualización.

Break, continue y pass
SentenciaEfecto al alcanzarla
breakTermina inmediatamente el bucle que la contiene.
continueOmite el resto de esta pasada y comienza la siguiente comprobación o el siguiente elemento del bucle.
passNo hace nada; continúa normalmente con la siguiente sentencia.

Para un bucle sobre [1, 2, 3, 4], supón que un if n == 2: contiene una de estas sentencias y que print(n) va después del if. Break imprime solo 1. Continue imprime 1, 3 y 4. Pass imprime los cuatro valores porque no omite el print.

pass puede ocupar un cuerpo donde Python exige una sentencia mientras se desarrolla el código. No proporciona una actualización ni una salida: while True: pass sigue ejecutándose. Break y continue deben estar dentro de un bucle y afectan solo al bucle más interno que los contiene.

Puntos clave

  • Continue omite las sentencias restantes de la pasada actual y después el bucle continúa.
  • Un elemento omitido sigue contando como una iteración.
  • Toda ruta que se repita por el cuerpo de un while debe mantener el avance hacia una salida.
  • Pass no hace nada ni omite las sentencias posteriores.
  • Break termina el bucle; continue lo mantiene activo.

3.3 Qué significa el else de un bucle

Un bloque else puede pertenecer a un bucle for o while. Se ejecuta una vez cuando el bucle termina normalmente: un bucle for agota sus elementos o la condición de un while se vuelve falsa. Se omite cuando ese bucle termina mediante break. Interprétalo como el caso sin break.

Informa de una búsqueda sin coincidencias
for n in [4, 9, 15, 22]:
    if n % 5 == 0:
        print("First multiple of 5:", n)
        break
else:
    print("No multiple of 5")

El bucle llega a 15, imprime First multiple of 5: 15 y sale mediante break. Se omite el else. Con [4, 9, 22], el bucle usa todos los elementos sin ejecutar break e imprime No multiple of 5 una vez.

La alineación es decisiva. El else está alineado con for, así que pertenece al bucle. Un else alineado con el if interno se ejecutaría para cada elemento que no coincidiera, anunciando el fracaso antes de que terminara la búsqueda.

Una lista vacía también llega al else del bucle. No hay elementos, así que el cuerpo se ejecuta cero veces y no se ejecuta ningún break. Del mismo modo, un bucle while cuya condición es falsa en la primera comprobación ejecuta su else inmediatamente.

Busca un divisor

Un número primo es un entero mayor o igual que 2 cuyos únicos divisores positivos son 1 y él mismo. Busca un divisor entre esos extremos:

n = 29
if n < 2:
    print("Not prime")
else:
    for d in range(2, n):
        if n % d == 0:
            print(n, "is divisible by", d)
            break
    else:
        print(n, "is prime")

Para 29, todos los restos son distintos de cero y el else del bucle imprime 29 is prime. Para 21, el primer divisor es 3 y el break omite el else del bucle. La comprobación externa se ocupa de los números menores que 2. Sin ella, un rango vacío para 1 llegaría al else e indicaría erróneamente que 1 es primo. Para 2, el rango también está vacío, pero la conclusión de que es primo es correcta.

Intentos limitados con while y else
attempts = 0
while attempts < 3:
    guess = input("Password: ")
    if guess == "open sesame":
        print("Welcome!")
        break
    attempts += 1
else:
    print("Too many attempts.")

Una respuesta correcta ejecuta el break, incluso en el tercer intento. Tres respuestas incorrectas elevan el contador a 3; la condición se vuelve falsa y el else imprime el mensaje de fracaso. Una sentencia normal después del bucle se ejecutaría en ambos casos, así que no los distinguiría.

Registra el resultado con una variable indicadora

Una variable indicadora es una variable booleana que registra si ha ocurrido algo. Empieza con found = False, cámbiala a True cuando aparezca una coincidencia y sal con break. Después del bucle, if not found: se ocupa del fracaso. Esto proporciona el mismo resultado de búsqueda que el else del bucle, usando un registro explícito del evento. Elige una forma cuya sangría y ruta de salida puedas explicar con claridad.

Puntos clave

  • El else de un bucle se ejecuta tras una finalización normal y se omite si se sale de ese bucle mediante break.
  • Un else alineado con un if interno tiene un significado distinto.
  • Con cero iteraciones también se llega al else del bucle.
  • Una búsqueda puede informar del fracaso una vez, después de que ningún elemento haya cumplido la condición.
  • Una variable indicadora booleana puede registrar un resultado para usarlo después del bucle.
  • Una búsqueda vacía de divisores necesita la regla aparte de que los números primos son mayores o iguales que 2.
4

Usa patrones habituales de bucles

Muchas tareas con bucles siguen un pequeño conjunto de patrones reutilizables. Un contador registra cuántas veces se cumple una condición, un acumulador construye un resultado y una variable que guarda el mejor valor hasta el momento conserva un máximo o un mínimo. Las búsquedas usan un registro similar para recordar una coincidencia. El valor inicial y el lugar donde cambia determinan qué significa el resultado final. También manejarás datos vacíos y empates, donde una pequeña elección puede cambiar la respuesta.

4.1 Construye conteos, totales, productos y texto

Un acumulador conserva un resultado entre iteraciones. Un contador es un acumulador particular que aumenta en 1 cada vez que ocurre un evento. Establece el valor inicial antes del bucle, actualízalo dentro y usa después el resultado terminado.

Cuenta eventos o suma valores
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        count += 1
print(count)

La condición se cumple para 15, 22 y 11, así que la salida es 3. La actualización suma 1 por cada elemento que cumple la condición; sumar n daría, en cambio, el total de los valores que la cumplen.

Para sumar todos los elementos, inicializa total = 0, elimina la comprobación if, añade total += n directamente en el cuerpo e imprime total después. Los cinco valores suman 60. Su media es 60 / 5, que da 12.0; la división con / devuelve un número de coma flotante para estos operandos enteros.

Para una media de valores filtrados, actualiza tanto el total como el conteo bajo la misma condición:

total = 0
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        total += n
        count += 1
if count > 0:
    print(total / count)
else:
    print("No matching values")

Aquí el total seleccionado es 48 y el conteo es 3, así que la salida es 16.0. Dividir entre la longitud de toda la lista usaría el grupo equivocado. La comprobación del conteo también permite manejar una lista vacía o sin coincidencias.

Elige un valor inicial adecuado para la operación
ResultadoValor inicialActualización
Conteo0Suma 1 por evento.
Suma0Suma cada valor seleccionado.
Producto1Multiplica por cada valor seleccionado.
Texto""Une cada fragmento nuevo al texto acumulado.

Un producto de los enteros del 1 al 5 empieza en 1 y termina en 120. Empezarlo en 0 mantendría todos los productos en 0.

La acumulación de texto también depende del orden:

rev = ""
for ch in "stressed":
    rev = ch + rev
print(rev)

Cada carácter nuevo se coloca delante del texto guardado y produce desserts. Cambiar la actualización a rev = rev + ch añade caracteres al final y reconstruye stressed.

Conserva el resultado entre iteraciones

Mover total = 0 al interior de un bucle de suma borra el trabajo anterior en cada pasada. Con [4, 15, 22, 8, 11], reiniciar antes de cada suma deja solo 11 al final. Inicializa fuera del bucle para que la siguiente suma use el subtotal anterior.

Un print dentro del cuerpo muestra la suma acumulada después de cada actualización: 4, 19, 41, 49 y 60 en este ejemplo. Un print después del bucle muestra solo 60. Elige su ubicación según la salida solicitada.

Para una lista sencilla almacenada, sum(values) da su total y len(values) da su conteo. Un bucle explícito te permite filtrar valores, llevar varios resultados a la vez o procesar los valores conforme llegan desde la entrada.

Puntos clave

  • Inicializa un acumulador antes del bucle para que conserve el trabajo anterior.
  • Un contador suma 1 por evento; un total suma el valor en sí.
  • Empieza las sumas en 0, los productos en 1 y el texto en una cadena vacía.
  • Para una media de valores filtrados, cuenta y suma los mismos valores seleccionados.
  • Comprueba que el conteo sea distinto de cero antes de dividir.
  • Imprime dentro del bucle para mostrar resultados acumulados y después del bucle para mostrar un resultado final.
  • Añadir un carácter antes o después del texto guardado cambia su orden.

4.2 Conserva el mejor valor encontrado hasta el momento

Para encontrar un máximo, conserva el mayor valor encontrado hasta el momento. Compara cada elemento nuevo con ese valor guardado y sustitúyelo solo cuando el nuevo sea mayor. El patrón de mínimo funciona del mismo modo, con la comparación invertida.

Empieza sin inventar un valor de los datos

None es el valor de Python para «todavía nada». Ofrece una forma clara de que el primer elemento se convierta en el mejor valor actual:

largest = None
for n in [12, -3, 25, 7]:
    if largest is None or n > largest:
        largest = n
print(largest)

Los valores guardados después de cada elemento son 12, 12, 25 y 25. El programa imprime 25. Con el primer elemento, largest is None es verdadero. El or de Python se detiene ahí, así que no intenta la comparación no válida de un número con None. En las pasadas posteriores, el valor guardado es un número y se usa la segunda comparación.

Para un mínimo, empieza con smallest = None y usa smallest is None or n < smallest. La misma lista produce -3.

Empezar un máximo en 0 puede dar un valor que nunca apareció. Para -5, -2 y -9, ningún valor supera 0, así que esa versión conservaría erróneamente 0. El máximo es -2. Empezar un mínimo en 0 tiene el problema correspondiente cuando todos los elementos son positivos.

Si se sabe que los datos contienen un elemento, también funciona usar ese primer valor como mejor valor inicial. Las funciones incorporadas resuelven los casos de listas sencillas almacenadas: max([12, -3, 25, 7]) da 25 y min([12, -3, 25, 7]) da -3. Un bucle propio puede conservar información relacionada, como dónde apareció el valor.

Guarda la posición cuando cambie el mejor valor
largest = None
best_day = None
day = 0
for temperature in [18, 23, 21, 26, 24]:
    day += 1
    if largest is None or temperature > largest:
        largest = temperature
        best_day = day
print(largest, best_day)

El contador de días avanza con cada elemento. El mejor día cambia solo cuando aparece un nuevo máximo. La salida final es 26 4, que significa una temperatura de 26 en el día 4. Guardar el día después del bucle solo guardaría el último día examinado.

Decide qué hacer con un empate

Para [5, 8, 8, 3], la comprobación n > largest conserva el primer 8 y su posición, 2 al contar desde 1. Sustituir > por >= también actualiza ante un valor igual y conserva el último 8, en la posición 3. El número máximo no cambia; la posición guardada es distinta.

Una lista vacía deja sin cambios el mejor valor inicializado en None. Comprueba ese estado antes de mostrar un número o realizar operaciones aritméticas con él. Significa que ningún elemento ha proporcionado un mejor valor.

La comparación puede usar una propiedad del elemento. Para conservar la palabra más larga entre «pera», «banana» e «higo», compara len(word) con la longitud de la palabra guardada. «Banana» tiene seis caracteres, así que gana. Guarda la propia palabra cuando pase a ser la mejor para que el resultado identifique el elemento, no solo su longitud.

Puntos clave

  • Compara cada elemento nuevo con el mejor hasta el momento y sustituye el mejor cuando mejore.
  • None registra que todavía no se ha encontrado un primer elemento.
  • La evaluación en cortocircuito de or evita comparar el primer número con None.
  • Cero no es un valor inicial general seguro para máximos o mínimos.
  • Guarda una posición al mismo tiempo que su mejor valor.
  • Una comparación estricta conserva el primer mejor valor empatado; permitir la igualdad conserva el último.

4.3 Busca y recuerda una coincidencia

Una búsqueda lineal comprueba elementos en orden hasta encontrar una coincidencia o agotar los elementos. Una coincidencia puede ser un valor exacto, el primer elemento que cumple una condición o una prueba para responder a una pregunta de «¿hay alguno?» o «¿todos?».

Recuerda el éxito
names = ["Ana", "Ben", "Chen"]
found = False
for name in names:
    if name == "Ben":
        found = True
        break
if found:
    print("Ben is on the list")
else:
    print("Ben is not on the list")

La variable indicadora empieza en falso porque todavía no se ha encontrado nada. La primera comprobación, Ana, la deja sin cambios. La segunda encuentra a Ben, pone la variable indicadora en verdadero y sale. La salida es Ben is on the list.

La variable indicadora registra un evento a lo largo de toda la búsqueda. No la reinicies cada vez que no haya coincidencia. Si un bucle continúa después de encontrar a Ben y asigna found = False al llegar a Chen, se pierde el resultado de éxito. Del mismo modo, «no encontrado» corresponde al momento en que todas las comprobaciones han fallado, no a un else por elemento que anuncia el fracaso para Ana antes de examinar a Ben.

Primera o última coincidencia

Para [7, 4, 9, 10], el primer número par es 4 y el último es 10. Este bucle guarda el primero:

match = None
for n in [7, 4, 9, 10]:
    if n % 2 == 0:
        match = n
        break
print(match)

La salida es 4. Elimina el break y cada coincidencia nueva sobrescribirá la anterior, dejando 10. Si nada coincide, el valor guardado sigue siendo None. Antes de decidir qué almacenar, elige si la tarea pide saber si existe una coincidencia, el primer elemento, el último o una posición.

Para indicar una posición, mantén un contador que avance con cada elemento examinado y guárdalo cuando haya una coincidencia. Indica cómo se numeran las posiciones: contar desde 1 sitúa a Chen en la posición 3 de la lista de nombres; la numeración habitual de posiciones de Python empieza en 0.

Para «alguno» basta un éxito; para «todos» basta un fallo

Una búsqueda de «alguno» empieza en falso y pasa a verdadero con el primer elemento que cumple la condición. Puede detenerse ahí porque un éxito responde a la pregunta.

Una búsqueda de «todos» empieza en verdadero y pasa a falso en el primer fallo:

all_positive = True
for n in [3, 8, -1, 5]:
    if n <= 0:
        all_positive = False
        break
print(all_positive)

El tercer valor, -1, refuta «todos los valores son positivos», así que la salida es False. No hace falta examinar 5. Cero también incumpliría la condición porque positivo significa mayor que cero. Si no hay elementos, la variable indicadora sigue siendo verdadera: no ha aparecido ningún contraejemplo.

Pertenencia exacta y condiciones propias

Para comprobar solo la igualdad, "Ben" in names da directamente True o False. Un bucle hace visible el estado cambiante de la búsqueda y permite que la comprobación exprese una condición propia, como «la primera palabra con más de cinco caracteres».

Las comparaciones de cadenas son exactas. "ben" es distinto de "Ben", y "Ben " incluye un espacio al final. Una búsqueda de una de esas cadenas no debe considerar iguales las demás.

Puntos clave

  • Una búsqueda lineal examina elementos en orden hasta que se cumple su regla de parada.
  • Inicializa una vez la variable indicadora de coincidencia y conserva un éxito registrado.
  • Indica que no se ha encontrado nada solo después de que toda la búsqueda haya fracasado.
  • Break conserva la primera coincidencia; sobrescribir en cada coincidencia conserva la última.
  • La comprobación de «alguno» se detiene ante un éxito; la de «todos», ante un contraejemplo.
  • La igualdad de cadenas distingue mayúsculas, minúsculas y espacios.
5

Escribe bucles anidados

Un bucle dentro de otro puede construir filas, comprobar combinaciones o repetir tareas para cada grupo. El bucle externo elige un grupo; el interno realiza su trabajo para ese grupo antes de que avance el externo. Esta estructura hace especialmente importantes la sangría y la ubicación de los reinicios. Contarás ejecuciones internas, construirás una cuadrícula pequeña y una figura creciente, y seguirás salidas anticipadas que afectan a un bucle o a ambos.

5.1 Filas, combinaciones y patrones crecientes

Un bucle anidado es un bucle dentro del cuerpo de otro. En cada iteración externa, el bucle interno empieza y realiza su trabajo. La variable externa permanece fija mientras cambia la interna.

Construye una fila cada vez
for row in range(1, 4):
    for col in range(1, 5):
        print(row * col, end=" ")
    print()

La salida tiene estas tres filas, cada una con un espacio al final después de su último número:

1 2 3 4 
2 4 6 8 
3 6 9 12 

Primero, row es 1 mientras col toma los valores del 1 al 4. Después, row pasa a ser 2 y el bucle interno empieza de nuevo en la columna 1. Por último, la fila 3 recibe las mismas cuatro columnas. El cuerpo interno se ejecuta doce veces.

end=" " sustituye el salto de línea habitual de print por un espacio. El print() vacío termina la fila. Está dentro del cuerpo externo, pero fuera del interno, así que se ejecuta tres veces. Darle un nivel más de sangría pondría cada número en su propia línea. Eliminar su sangría terminaría una línea una sola vez, después de ambos bucles.

Da a las variables de los bucles nombres distintos, como row y col. Reutilizar el nombre externo dentro del bucle interno sobrescribe el valor necesario para identificar la fila actual.

Cuenta el trabajo

Cuando cada pasada externa tiene el mismo número de pasadas internas, multiplica los conteos. Tres filas y cuatro columnas dan doce ejecuciones internas. Dos bucles de 100 pasadas cada uno dan 10 000 ejecuciones internas; tres niveles dan 1 000 000. Por tanto, un pequeño aumento de cada límite puede crear mucho más trabajo repetido.

Si el límite interno cambia con la variable externa, suma los conteos por separado:

for row in range(1, 5):
    for _ in range(row):
        print("*", end="")
    print()

Esto imprime:

*
**
***
****

Las longitudes de las filas son 1, 2, 3 y 4, con diez estrellas en total. Para un patrón con n filas de este tipo, el total es n(n+1)/2. Multiplicar cuatro por cuatro supondría erróneamente que cada fila tiene cuatro estrellas.

Reinicia un resultado para cada grupo

Para sumar cada fila de la cuadrícula de multiplicaciones, establece row_total = 0 dentro del bucle externo, justo antes del interno. Suma row * col dentro del cuerpo interno e imprime row_total después del bucle interno. Las salidas son 10, 20 y 30.

Inicializar una sola vez, antes de ambos bucles, conserva también los totales de las filas anteriores. Imprimir después de cada fila da entonces 10, 30 y 60. Ambas ubicaciones conservan un resultado, pero una conserva el resultado de una fila y la otra conserva una suma acumulada de toda la cuadrícula.

Recorre combinaciones

Dos bucles sobre range(1, 7) recorren los 36 resultados ordenados de dos dados. El primer bucle proporciona el primer dado y el segundo proporciona el segundo. Una condición dentro del cuerpo interno puede contar los pares cuya suma es 7. La cumplen seis: (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) y (6, 1). Invertir un par describe un resultado ordenado distinto.

Puntos clave

  • El bucle interno vuelve a empezar en cada iteración externa.
  • Multiplica los conteos de iteraciones solo cuando la longitud interna se mantenga fija.
  • Suma las longitudes de las filas cuando el límite interno dependa de la fila.
  • La sangría determina si una acción ocurre por elemento, por fila o una sola vez en total.
  • Reinicia un acumulador por fila dentro del bucle externo, antes del interno.
  • Los nombres distintos para las variables de los bucles mantienen disponibles los valores de fila y columna.

5.2 Omite y detén dentro de bucles anidados

Break y continue actúan sobre el bucle más interno que los contiene. En código anidado, localiza ese bucle antes de predecir qué ocurre después. Un break en el cuerpo interno no detiene por sí solo el bucle externo.

Sigue un break interno
for a in range(1, 4):
    for b in range(1, 4):
        if b > a:
            break
        print(a, b)

Con a = 1, se imprime el par 1 1. Cuando b pasa a ser 2, el break termina ese bucle interno. El bucle externo avanza a a = 2 y empieza un nuevo bucle interno con b igual a 1. Imprime 2 1 y 2 2, y después sale con break cuando b es igual a 3. Para a igual a 3, todos los valores de b permiten imprimir. Las seis líneas de salida son:

1 1
2 1
2 2
3 1
3 2
3 3
Detén ambos bucles con un resultado registrado

Una búsqueda de una combinación puede usar una variable indicadora y un break en cada nivel:

found = False
for a in range(1, 6):
    for b in range(1, 6):
        if a * b == 12:
            found = True
            break
    if found:
        break
if found:
    print(a, b)
else:
    print("No matching pair")

Las filas con a igual a 1 y 2 no tienen coincidencias. En la fila 3, b llega a 4 y el producto es 12. El break interno termina el bucle de b; la variable indicadora hace entonces que se ejecute el break externo. La salida final es 3 4.

La variable indicadora se inicializa antes de ambos bucles porque registra un resultado de toda la búsqueda. El if found: externo debe ir después del bucle interno, pero dentro del cuerpo externo. Su sangría hace que se compruebe una vez por fila completada o interrumpida.

Conserva los valores cuando continúa la búsqueda

Eliminar solo el break externo hace que la búsqueda continúe con las filas posteriores. En este ejemplo, una coincidencia posterior es 4 3, pero el bucle acaba examinando la fila 5 y termina con a = 5 y b = 5. Imprimir entonces las variables de los bucles da 5 5, no una coincidencia guardada.

Si la tarea necesita el último par coincidente, guarda best_a = a y best_b = b cada vez que haya una coincidencia. Esas variables separadas conservan una coincidencia mientras las variables de los bucles siguen cambiando. Comprueba la variable indicadora antes de mostrarlas cuando pueda no existir ninguna coincidencia.

Omite un par y continúa la fila

Un continue dentro del bucle interno pasa a su siguiente valor interno. Para dos bucles que recorren del 1 al 4, if a == b: continue antes del procesamiento omite cuatro pares iguales. Quedan doce pares ordenados de los dieciséis originales.

Un if también puede seleccionar pares sin saltar. Dos dados tienen tres pares ordenados con suma 10: (4, 6), (5, 5) y (6, 4). Una condición dentro del cuerpo interno los identifica.

Puntos clave

  • Un break interno termina solo el bucle interno; un continue interno omite solo la pasada interna actual.
  • Una variable indicadora y un segundo break pueden llevar una salida anticipada fuera de ambos bucles.
  • Coloca la comprobación externa de la variable indicadora después del bucle interno y dentro del cuerpo externo.
  • Las variables de los bucles siguen cambiando tras una coincidencia salvo que se detenga la búsqueda; guarda los valores coincidentes cuando sea necesario.
6

Sigue la ejecución y depura bucles

Un bucle puede parecer correcto y, aun así, recorrer un último valor equivocado, sumar un valor demasiado pronto o imprimir un separador de más. El seguimiento hace visible su comportamiento real: registra cada cambio en orden de ejecución y compáralo con el resultado previsto. Los ejemplos pequeños son especialmente útiles porque puedes comprobar cada pasada. Distinguirás las ejecuciones del cuerpo de las comprobaciones de la condición, inspeccionarás los valores finales y corregirás los límites con pruebas obtenidas del seguimiento.

6.1 Sigue los valores en orden de ejecución

El seguimiento de la ejecución consiste en ejecutar un programa a mano, sentencia a sentencia, mientras se registran sus valores y su salida. Una tabla de seguimiento da una columna a cada variable relevante. Indica si un valor se registra antes o después de una actualización para que las filas tengan un significado claro.

Sigue un bucle while
total = 0
i = 1
while i <= 4:
    total = total + i
    i = i + 1
print(total)

Empieza con total = 0 e i = 1. Comprueba la condición antes de entrar en el cuerpo. Por cada comprobación verdadera, ejecuta la suma antes del incremento:

Pasadai antestotal despuési después
1112
2233
3364
44105

La siguiente comprobación es 5 <= 4, que es falsa. No hay una quinta fila del cuerpo. El cuerpo se ejecuta cuatro veces, la condición se comprueba cinco veces y el print posterior al bucle muestra 10 una vez. Los valores finales son i = 5 y total = 10.

Distingue la comprobación fallida de una iteración: termina el bucle sin ejecutar su cuerpo. Si la condición inicial ya es falsa, no hay filas del cuerpo y las variables conservan sus valores iniciales.

El orden de las sentencias cambia el resultado

Si el incremento se mueve por encima de la suma, cada pasada usa el nuevo valor de i. Las cuatro sumas pasan a ser 2, 3, 4 y 5, y dan 14. La condición sigue comprobando i al principio, antes de ese incremento. Seguir solo los valores de la cabecera no mostraría qué valor usa realmente la suma.

Cuando un cuerpo contiene un break o un continue, deja de seguir sus líneas restantes en cuanto se produzca el salto. Con continue, vuelve a la cabecera o al siguiente elemento; con break, continúa después del bucle. Un seguimiento debe seguir esas rutas, no limitarse a copiar todas las sentencias del cuerpo en cada fila.

Sigue caracteres y bucles anidados

Un bucle for asigna el siguiente elemento al principio de su pasada:

rev = ""
for ch in "abc":
    rev = ch + rev
print(rev)

El texto guardado pasa a ser "a", después "ba" y después "cba". La salida es cba. Registra el texto real, incluido su orden, en lugar de escribir solo que «se añadió un carácter».

Para bucles anidados, usa una fila por cada iteración interna. Registra ambas variables de los bucles para que el valor externo se repita en las filas que le corresponden. En un bucle de dos filas y tres columnas, los valores de fila son 1, 1, 1, 2, 2, 2 y los de columna son 1, 2, 3, 1, 2, 3.

Genera un seguimiento con print

Un print("i =", i, "total =", total) temporal después de ambas actualizaciones en el bucle de suma muestra i y total al final de cada pasada. Colocarlo antes de las actualizaciones muestra otro momento. Compara la ubicación del print con las etiquetas de las columnas de tu tabla. Elimina las salidas de diagnóstico después de corregir el código para que no se conviertan en salida adicional del programa.

Para una pregunta de «¿qué imprime?», registra solo las sentencias que realmente imprimen. El cambio de una variable no es una salida por sí mismo; pueden producirse varias actualizaciones antes de un único print final.

Puntos clave

  • Sigue las sentencias en el orden exacto en que las ejecuta Python.
  • Etiqueta los valores registrados según sean anteriores o posteriores a la actualización correspondiente.
  • Un bucle while que termina normalmente comprueba su condición una vez más de las que ejecuta su cuerpo.
  • Break y continue cambian qué sentencias aparecen en un seguimiento.
  • Registra la salida por separado de los cambios de las variables.

6.2 Corrige límites y separadores

Un error de desfase de una unidad hace que se recorra un valor de más o de menos, o desplaza una unidad los valores recorridos. Suele deberse al límite de parada excluido de un rango, a la elección entre < y <= o al valor inicial de un contador.

Define los extremos previstos

Para sumar del 1 al 10, range(1, 10) se queda corto. Proporciona solo del 1 al 9 y da un total de 45. range(1, 11) incluye el 10 y da 55. Para un rango de enteros ascendente con paso 1, usa el límite de parada n + 1 para incluir el valor final n.

Con el paso predeterminado de 1, range(a, b) proporciona b - a valores cuando b es mayor que a. Un break puede terminar el bucle antes de usarlos todos. Con otros tamaños de paso, enumera los valores de un caso pequeño o usa len(range(...)) para comprobar el conteo.

El conteo de un bucle while depende conjuntamente de su inicio, su comparación y su actualización. Para un entero no negativo n, con i += 1 al final de cada pasada y sin salida anticipada:

Inicio y condiciónEjecuciones del cuerpo
i = 0; while i < n:n
i = 1; while i <= n:n
i = 0; while i <= n:n + 1

Con n igual a 0, los dos primeros omiten el cuerpo. El tercero se ejecuta una vez con i igual a 0. Este caso pequeño revela la pasada adicional sin seguir un bucle largo.

Límites de la cuenta atrás

Empezando en 5 e imprimiendo antes de n -= 1, while n > 0: imprime cinco valores y termina en 1. Usar n >= 0 imprime seis y termina en 0. Los rangos descendentes correspondientes son range(5, 0, -1) y range(5, -1, -1).

Comprueba también el orden. Actualizar un contador antes de usarlo puede desplazar todos los valores aunque el bucle tenga el número previsto de pasadas. Un seguimiento debe registrar el primer y el último valor que usa realmente el cálculo.

Elementos y huecos entre ellos

Un error de conteo de elementos e intervalos confunde el número de elementos con el de huecos. Cinco tramos de valla necesitan seis postes. Cinco números impresos necesitan solo cuatro separadores entre ellos.

for i in range(1, 6):
    print(i, end="-")

Esto imprime 1-2-3-4-5-, incluido un guion final no deseado. Cada print añade un guion después de un elemento, incluso del último.

Una corrección consiste en imprimir el primer elemento por separado y después un separador antes de cada elemento posterior:

print(1, end="")
for i in range(2, 6):
    print("-" + str(i), end="")
print()

La salida es 1-2-3-4-5. El bucle imprime cuatro fragmentos de guion y número, y el print vacío final termina la línea. Esta versión tiene un primer elemento conocido; un caso general de datos vacíos debe omitir también la impresión de ese primer elemento.

Comprueba la corrección con casos pequeños

Anota el primer valor previsto, el último y el conteo antes de cambiar el código. Elige los límites y la comparación que correspondan y después sigue una ejecución corta. Comprueba cero y un elemento, además de un caso normal. Cero revela trabajo que debería omitirse; uno revela un separador innecesario o una actualización de más. Cambia el límite que causa el error para que la repetición del código coincida con la tarea.

Puntos clave

  • Comprueba conjuntamente el inicio, el último valor necesario y el número de pasadas.
  • Un rango ascendente con paso de uno incluye n cuando su límite de parada es n + 1.
  • La comparación y la actualización del while determinan conjuntamente su conteo.
  • Los rangos descendentes también excluyen su límite de parada.
  • En una secuencia no vacía, el número de elementos y el de separadores difieren en uno.
  • Sigue casos pequeños, especialmente cero y un elemento, después de corregir un límite.

Ejemplos de Bucles en Python

6 Lecciones Interactivas

1

Haz que un bucle while avance y termine

15 pasos
Sigue los valores cambiantes, corrige un objetivo inalcanzable y recoge datos de entrada sin contar la señal de parada.
  1. 1
    IntroducciónLa repetición necesita una decisión

    Un programa que sigue pidiendo una respuesta necesita una regla para realizar otro intento. Un bucle while sitúa esa regla en una condición que se comprueba antes de cada pasada.

    Seguirás una cuenta atrás, descubrirás por qué un valor cambiante puede aun así no alcanzar su salida y construirás un bucle de entrada cuya señal de parada nunca llegue a los cálculos.

  2. 2
    ExplicaciónPrepara la cuenta atrás

    Un bucle while repite un cuerpo con sangría mientras su condición sea verdadera. Da a su valor de control un inicio antes de la cabecera:

    remaining = 4
    while remaining > 0:
        print(remaining)
        remaining -= 1
    

    Aquí el inicio es 4, la comprobación pregunta si queda alguno y la actualización resta 1. La impresión ocurre antes de esa resta.

  3. 3
    EjemploEjecuta las dos primeras pasadas

    La primera comprobación usa remaining igual a 4 y se cumple. El print muestra 4 y después la actualización cambia remaining a 3. Python vuelve a la cabecera.

    La siguiente comprobación usa 3, así que el cuerpo imprime 3 y cambia el valor a 2. La condición no vuelve a comprobarse entre el print y la actualización; esas sentencias se ejecutan en el orden escrito.

  4. 4
    EjemploLlega a la comprobación fallida

    Las dos pasadas siguientes imprimen 2 y 1. Después de la última actualización, remaining es 0. La comprobación remaining > 0 es ahora falsa, así que el cuerpo no vuelve a ejecutarse.

    Se imprimieron cuatro valores, pero la cabecera se comprobó cinco veces: cuatro comprobaciones verdaderas y una última falsa. Empezar con remaining igual a 0 no habría producido ninguna pasada por el cuerpo.

  5. 5
    DesafíoCambia el orden

    En la cuenta atrás, mueve remaining -= 1 por encima de print(remaining). ¿Qué cuatro valores se imprimen, empezando en 4?

    ---reveal---

    La salida es 3, 2, 1 y 0. Cada comprobación sigue admitiendo el valor positivo anterior, pero el print usa el valor actualizado. Hacer falsa la condición durante el cuerpo no interrumpe ese cuerpo; la cabecera la comprobará al volver a ella.

  6. 6
    ConsejoEncuentra por qué no avanza

    Si una cuenta atrás sigue imprimiendo 4, busca la actualización y comprueba su sangría. Una actualización después del bucle no puede ayudarlo a terminar porque todavía no se ha alcanzado.

    Si la actualización suma 1 bajo while remaining > 0:, el valor se aleja de la salida. Un print temporal después de la actualización muestra si el valor cambia en la dirección prevista.

  7. 7
    EjemploCambiar no garantiza alcanzar el objetivo
    n = 2
    while n != 7:
        print(n)
        n += 2
    

    Esto recorre 2, 4, 6, 8 y los números pares posteriores. La variable cambia cada vez, pero ninguno de esos valores es igual a 7. Si la tarea es imprimir valores pares menores que 7, while n < 7: expresa esa tarea: la siguiente comprobación falla cuando n pasa a ser 8.

  8. 8
    DesafíoCorrige un objetivo que se sobrepasa

    Un bucle empieza en 5, imprime n mientras n != 12 y suma 2 al final. La tarea es imprimir sus valores impares menores que 12. ¿Por qué falla y qué cabecera lo corrige?

    ---reveal---

    Los valores siguen siendo impares y nunca son iguales a 12. Usa while n < 12:. Imprime 5, 7, 9 y 11, y después se detiene cuando n llega a 13. Cambiar la actualización a 1 alteraría la secuencia de números impares requerida.

  9. 9
    Idea claveCuenta pasos decimales con enteros

    Las sumas decimales repetidas pueden no alcanzar un objetivo de igualdad: diez sumas de 0.1 a 0.0 dan 0.9999999999999999.

    Para una secuencia fija de décimas, deja que los enteros controlen las pasadas:

    for i in range(11):
        x = i / 10
        print(x)
    

    Esto calcula once valores de 0,0 a 1,0 sin exigir que un decimal almacenado alcance una igualdad exacta para detenerse.

  10. 10
    ExplicaciónLee antes de comprobar

    Un valor centinela significa «no hay más datos». Para una colección de conteos positivos, 0 puede marcar el final. Una lectura inicial obtiene el primer número antes del bucle para que su cabecera tenga un valor que comprobar.

    total = 0
    number = int(input("Count (0 to stop): "))
    

    La conversión importa: input devuelve texto, mientras que este bucle comparará números.

  11. 11
    EjemploProcesa y después lee el siguiente valor
    while number != 0:
        total += number
        number = int(input("Count (0 to stop): "))
    print(total)
    

    Añade esto debajo de la preparación. Las entradas 6, 9 y 0 suman 6 y después 9, dejando un total de 15. El nuevo 0 no supera la siguiente comprobación de la cabecera y no se suma. Sin la lectura final dentro del cuerpo, el primer valor se procesaría repetidamente.

  12. 12
    ConexiónRechaza solo las respuestas no aceptables

    La recogida de datos se detiene ante un valor especial. La validación, en cambio, se repite hasta que un valor es aceptable. Para aceptar un entero del 1 al 5, repite mientras choice < 1 or choice > 5 y lee una nueva elección dentro del cuerpo.

    La condición debe describir cualquiera de los dos incumplimientos. Usar and no rechazaría nada: un número no puede ser menor que 1 y mayor que 5 a la vez.

  13. 13
    DesafíoDistingue los datos de la señal de parada

    Las puntuaciones son no negativas y -1 es el centinela. Para las entradas 0, 9 y -1, ¿qué total y qué conteo debe usar un bucle de media? ¿Qué ocurre si -1 llega primero?

    ---reveal---

    Usa un total de 9 y un conteo de 2, que dan una media de 4,5. Cero es un dato, mientras que -1 se excluye. Si -1 es el primero, el conteo sigue siendo 0; informa de que no hay datos en lugar de dividir. La comprobación del centinela debe preceder a ambas actualizaciones.

  14. 14
    DesafíoComprueba una ruta completa de entrada

    Un bucle con lectura inicial repite con text != 0, pero text procede directamente de input. Introducir 0 no lo detiene. Explica el problema de tipos y da dos correcciones válidas.

    ---reveal---

    Input proporciona "0", una cadena distinta del entero 0. Compara con "0" para conservar un centinela de texto, o convierte la entrada con int antes de compararla con 0. Tanto la primera lectura como las posteriores deben mantener esa elección.

  15. 15
    RepasoSigue una ruta antes de ejecutar

    Para un nuevo bucle while, sigue una pasada normal, la pasada de parada prevista y un caso que deba ejecutarse cero veces. En cada ruta repetitiva, identifica la siguiente entrada o actualización que permita avanzar.

    Para un cálculo con datos de entrada, mantén la comprobación de parada antes del procesamiento y decide cómo informar de los datos vacíos. Esas comprobaciones detectan tanto un bucle atascado como un resultado engañoso.

2

Deja que los elementos y los rangos guíen la repetición

13 pasos
Recorre valores directamente, construye rangos ascendentes y descendentes y compara un bucle de conteo for con while.

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

  1. 1
    IntroducciónDa un turno a cada elemento
  2. 2
    ExplicaciónLa variable contiene el elemento actual
  3. 3
    EjemploLos caracteres incluyen los espacios
  4. 4
    DesafíoReasigna la variable del elemento
  5. 5
    ExplicaciónEmpieza en cero cuando solo se da un límite de parada
  6. 6
    EjemploElige un paso e inspecciónalo
  7. 7
    ConsejoLos valores descendentes necesitan un paso negativo
  8. 8
    DesafíoIncluye el último valor necesario
  9. 9
    ConexiónAdapta la regla de parada a la tarea
  10. 10
    EjemploConvierte un conteo descendente
  11. 11
    DesafíoUna asignación posterior no reconstruye range
  12. 12
    DesafíoConvierte el límite y conserva los datos
  13. 13
    RepasoComprueba primero los valores proporcionados
3

Decide qué ocurre tras una coincidencia o una omisión

14 pasos
Sigue break, continue y el else de un bucle en búsquedas y bucles de entrada.

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

  1. 1
    IntroducciónTres pasos siguientes distintos
  2. 2
    ExplicaciónBreak sale del bucle que lo contiene
  3. 3
    EjemploLee antes de una salida a mitad del cuerpo
  4. 4
    DesafíoLocaliza la salida
  5. 5
    ExplicaciónContinue sale solo de esta pasada
  6. 6
    ConsejoOmitir una actualización puede atascar while
  7. 7
    Idea clavePass no omite nada
  8. 8
    DesafíoPredice tres versiones
  9. 9
    ExplicaciónElse pertenece al bucle
  10. 10
    Idea claveCero pasadas también terminan normalmente
  11. 11
    ConexiónRegistra explícitamente el mismo evento
  12. 12
    DesafíoÉxito en el último intento permitido
  13. 13
    DesafíoCombina la omisión con la finalización normal
  14. 14
    RepasoSeñala el destino de un salto
4

Construye y conserva el resultado de un bucle

14 pasos
Sigue una media de valores filtrados, una búsqueda del mejor valor y decisiones de «alguno» o «todos».

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

  1. 1
    IntroducciónUn resultado se conserva para la siguiente pasada
  2. 2
    ExplicaciónCuenta y suma el mismo grupo
  3. 3
    EjemploTermina la media después de recoger los datos
  4. 4
    Idea claveLos valores iniciales se adaptan a la operación
  5. 5
    DesafíoEncuentra el error de reinicio
  6. 6
    ExplicaciónToma el primer elemento como primer mejor valor
  7. 7
    EjemploGuarda dónde apareció el mejor valor
  8. 8
    DesafíoManeja empates y datos vacíos
  9. 9
    ExplicaciónUna variable indicadora de búsqueda recuerda un evento
  10. 10
    EjemploLa comprobación de «todos» se detiene ante un contraejemplo
  11. 11
    DesafíoConserva la primera o la última
  12. 12
    ConexiónElige el estado que necesita la tarea
  13. 13
    DesafíoDescribe un resultado filtrado vacío
  14. 14
    RepasoDefine el resultado antes de elegir las actualizaciones
5

Construye filas y controla una búsqueda anidada

11 pasos
Sigue los reinicios internos, el trabajo creciente, los resultados por fila y una salida de ambos bucles.

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

  1. 1
    IntroducciónUna ejecución interna completa por pasada externa
  2. 2
    EjemploMantén fija la fila
  3. 3
    ExplicaciónTermina cada fila en el nivel externo
  4. 4
    Idea claveCuenta el trabajo interno fijo y creciente
  5. 5
    DesafíoReinicia un resultado por fila
  6. 6
    ExplicaciónUn break interno no detiene las filas
  7. 7
    EjemploLleva el éxito a la decisión externa
  8. 8
    ConsejoNo confundas las variables finales con una coincidencia guardada
  9. 9
    DesafíoElimina una salida
  10. 10
    DesafíoCombina un filtro y un límite creciente
  11. 11
    RepasoSigue una fila antes de multiplicar conteos
6

Sigue un error de límites hasta su causa

10 pasos
Registra las actualizaciones en orden, distingue comprobaciones y pasadas y corrige los separadores de la salida.

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

  1. 1
    IntroducciónHaz visible el trabajo real
  2. 2
    ExplicaciónElige cuándo registrar cada valor
  3. 3
    EjemploSigue las tres actualizaciones
  4. 4
    DesafíoMueve el incremento
  5. 5
    ConsejoUsa un print como punto de seguimiento
  6. 6
    EjemploDeja que cero revele la pasada adicional
  7. 7
    DesafíoComprueba ambos extremos de una cuenta atrás
  8. 8
    ExplicaciónDistingue los elementos de los huecos
  9. 9
    DesafíoRevisa una corrección completa
  10. 10
    RepasoVerifica los extremos previstos

Ejercicios de Bucles en Python

50 Preguntas de Práctica en 5 sets

Set 1: Mantén bajo control la entrada y los resultados10 Preguntas de Práctica

Pregunta 1 de 10

¿Cuántos elementos proporciona range(7, 2)?
  1. 2
  2. 5
  3. 6
  4. 0
Mostrar respuestaOcultar respuesta
Respuesta: D
Con dos argumentos, range usa el paso predeterminado positivo de 1. Empezar en 7 y avanzar hacia arriba no puede proporcionar un valor inferior al límite de parada excluido de 2, así que el rango está vacío. Un conteo de 5 correspondería a un rango descendente con un paso negativo explícito.

Pregunta 2 de 10

¿Qué imprime este programa?

for n in [2, 5, 8]:
    if n == 5:
        continue
    print(n)
  1. Solo 2
  2. 2, después 8
  3. 2, después 5 y después 8
  4. Solo 8
Mostrar respuestaOcultar respuesta
Respuesta: B
Con n igual a 5, continue omite el print e inicia la siguiente pasada, donde n pasa a ser 8. El valor anterior 2 ya se ha impreso, así que la salida es 2 y 8. Terminar después de 2 sería el comportamiento de break en el mismo lugar, no de continue.

Pregunta 3 de 10

¿Qué imprime este programa?

n = 1
while n > 0:
    n -= 1
    print("Inside")
print(n)
  1. Solo 0
  2. Solo Inside
  3. Inside, después 0
  4. Inside repetidamente
Mostrar respuestaOcultar respuesta
Respuesta: C
La condición es verdadera cuando el cuerpo empieza con n igual a 1. Restar 1 no interrumpe la pasada actual, así que el cuerpo imprime «Inside» de todos modos; la siguiente comprobación es falsa y el print final muestra 0. Omitir ese print interno requeriría otra sentencia de control.

Pregunta 4 de 10

Una respuesta de texto debe ser exactamente «yes» o «no». ¿Qué condición while vuelve a preguntar ante cualquier respuesta no aceptable y se detiene con cualquiera de las aceptables?
  1. answer != "yes" and answer != "no"
  2. answer != "yes" or answer != "no"
  3. answer == "yes" or answer == "no"
  4. answer == "yes" and answer == "no"
Mostrar respuestaOcultar respuesta
Respuesta: A
Una respuesta no aceptable es distinta de ambas cadenas aceptadas, así que las dos comprobaciones de desigualdad deben ser verdaderas para repetir. Con or entre ellas, incluso «yes» provoca otra repetición porque es distinto de «no». La condición describe las respuestas que se deben rechazar, no las que se deben aceptar.

Pregunta 5 de 10

¿Qué imprime este programa?

for n in []:
    if n == 7:
        break
else:
    print("Absent")
  1. Absent una vez
  2. No imprime nada
  3. Absent siete veces
  4. Un mensaje de TypeError
Mostrar respuestaOcultar respuesta
Respuesta: A
La lista está vacía, así que el cuerpo nunca se ejecuta y no se ejecuta ningún break. El agotamiento normal de la lista llega al else del bucle e imprime «Absent» una vez. Else no exige al menos una ejecución del cuerpo; la distinción decisiva aquí es si un break terminó el bucle.

Pregunta 6 de 10

¿Qué valor inicial permite que este bucle multiplique correctamente 2, 3 y 4?

product = ___
for n in [2, 3, 4]:
    product *= n
print(product)
  1. 0
  2. 2
  3. 1
  4. 24
Mostrar respuestaOcultar respuesta
Respuesta: C
Empezar en 1 deja el primer factor sin cambios y después la multiplicación produce 2, 6 y 24. Empezar en 0 mantendría el resultado en cero en cada pasada. Empezar en 2 añadiría un factor adicional de 2 antes de procesar los datos de la lista y produciría 48.

Pregunta 7 de 10

Una búsqueda de máximo empieza con largest = 0 y solo lo sustituye cuando un elemento es mayor. ¿Qué valor muestra incorrectamente para [-8, -3, -6]?
  1. -8
  2. -6
  3. -3
  4. 0
Mostrar respuestaOcultar respuesta
Respuesta: D
Ninguno de los tres elementos negativos es mayor que el valor inicial 0, así que la variable permanece en 0 aunque 0 no esté en los datos. El máximo real es -3. Empezar con None y aceptar el primer elemento evita inventar un candidato inicial mayor.

Pregunta 8 de 10

Esta búsqueda no tiene break. ¿Qué imprime y por qué?

found = False
for label in ["East", "West", "North"]:
    if label == "West":
        found = True
    else:
        found = False
print(found)
  1. True, porque una variable indicadora verdadera no puede cambiar después.
  2. False, porque la última falta de coincidencia reinicia la variable indicadora.
  3. False, porque West no es el primer elemento.
  4. True, porque el bucle se detiene en la etiqueta coincidente.
Mostrar respuestaOcultar respuesta
Respuesta: B
La iteración de West pone found en verdadero, pero la siguiente iteración de North ejecuta el else y lo vuelve a poner en falso. Una variable indicadora de búsqueda debe conservar el hecho de que hubo una coincidencia; elimina ese reinicio o sal con break al tener éxito. Encontrar una coincidencia no detiene un bucle salvo que su código lo indique.

Pregunta 9 de 10

¿Cuántos pares se imprimen?

for a in range(3):
    for b in range(4):
        if b == 2:
            break
        print(a, b)
  1. 2
  2. 9
  3. 6
  4. 12
Mostrar respuestaOcultar respuesta
Respuesta: C
Para cada valor de a, se imprime con b igual a 0 y 1, mientras que b igual a 2 provoca el break interno. El bucle externo sigue ejecutándose para los tres valores de a, lo que da dos impresiones por fila y seis en total. Un conteo de dos aplicaría incorrectamente el break interno a ambos bucles.

Pregunta 10 de 10

Un contador empieza con i igual a 0. El bucle usa while i <= n: y suma 1 al final de cada pasada, sin salida anticipada. Para cualquier entero no negativo n, ¿cuántas ejecuciones del cuerpo se producen?
  1. n + 1
  2. n
  3. n - 1
  4. 2n
Mostrar respuestaOcultar respuesta
Respuesta: A
El cuerpo usa valores de i de 0 a n, incluidos ambos extremos, así que hay n + 1 pasadas. El bucle habitual de n pasadas empieza en 0 y comprueba i < n; la igualdad adicional añade la pasada con i igual a n. Con n igual a 0, este bucle sigue ejecutándose una vez.
Set 2: Sigue los primeros pasos de un bucle10 Preguntas de Práctica

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

Pregunta 1 de 10

¿Qué imprime este programa?

n = 0
while n > 0:
    print("Go")
    n -= 1
print("End")
  1. Go, después End
  2. Solo End
  3. No imprime nada
  4. Go repetidamente
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Por qué este bucle sigue imprimiendo valores?

n = 2
while n != 9:
    print(n)
    n += 2
  1. Recorre todos los enteros, pero omite la comprobación.
  2. Reinicia n en 2 antes de cada comparación.
  3. Deja de actualizar n después de superar 9 por primera vez.
  4. Recorre valores pares y nunca llega a 9.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un bucle lee puntuaciones no negativas y usa -1 para detenerse. Las entradas son 12, 0, 18, -1. ¿Qué media debe mostrar, excluyendo el centinela?
  1. 10.0
  2. 7.25
  3. 15.0
  4. 9.666666666666666
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Cuántas veces se ejecuta el cuerpo de este bucle?

for ch in "up! ":
    print(ch)
  1. 2
  2. 3
  3. 4
  4. 5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué valores contiene list(range(3, 12, 4))?
  1. [3, 7]
  2. [3, 7, 11]
  3. [3, 7, 11, 15]
  4. [4, 8, 12]
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una pantalla debe mostrar 8, 6, 4, 2, 0 en ese orden. ¿Qué rango proporciona exactamente esos valores?
  1. range(8, -1, -2)
  2. range(8, 0, -2)
  3. range(8, -2, 2)
  4. range(8, 1, -2)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué imprime este programa?

for n in [5, 11, 14, 18]:
    if n % 2 == 0:
        print(n)
        break
print("Finished")
  1. 14, después 18 y después Finished
  2. 5, después Finished
  3. Solo 14
  4. 14, después Finished
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Qué imprime este programa?

count = 0
for amount in [6, 13, 9, 17]:
    if amount >= 10:
        count += 1
print(count)
  1. 4
  2. 30
  3. 2
  4. 17
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Cuántas veces se ejecuta el print interno?

for row in range(2):
    for col in range(5):
        print("seat")
  1. 10
  2. 7
  3. 5
  4. 25
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Cuáles son los valores finales de i y total?

i = 1
total = 0
while i < 5:
    i += 1
    total += i
  1. i es 4; total es 10.
  2. i es 5; total es 14.
  3. i es 5; total es 10.
  4. i es 6; total es 20.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Elige límites y conserva resultados de búsqueda10 Preguntas de Práctica

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

Pregunta 1 de 10

Un programa debe mostrar las décimas de 0,0 a 1,0. ¿Qué diseño evita controlar el bucle con sumas repetidas en coma flotante e igualdad exacta?
  1. Inicia x en 0,0 y repite hasta que x == 1.0.
  2. Cuenta i de 0 a 10 e imprime i / 10.
  3. Inicia x en 0,0 y repite mientras x != 1.0.
  4. Cuenta i de 0 a 9 e imprime i / 10.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué línea final imprime este programa?

values = [4, 7]
for value in values:
    value *= 3
print(values)
  1. [12, 21]
  2. [21, 21]
  3. [4, 7, 21]
  4. [4, 7]
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Qué rango proporciona exactamente los enteros mayores que -6 y menores o iguales que 6 que son múltiplos de 3, en orden descendente?
  1. range(6, -6, -3)
  2. range(6, -7, -3)
  3. range(3, -6, -3)
  4. range(6, -3, -3)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Cuántas veces imprime un valor este bucle?

limit = 4
for i in range(limit):
    limit = 1
    print(i)
  1. 1
  2. 3
  3. 4
  4. 5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Cuál es el primer número que se imprime?

for n in range(32, 50):
    if n % 6 == 0:
        print(n)
        break
  1. 32
  2. 42
  3. 36
  4. 48
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

¿Qué ocurre al ejecutar este programa?

n = 1
for divisor in range(2, n):
    if n % divisor == 0:
        break
else:
    print("Prime")
  1. No imprime nada porque el rango está vacío.
  2. Imprime Prime y clasifica incorrectamente el 1.
  3. Lanza un error cuando range empieza por encima de su límite de parada.
  4. Encuentra el divisor 1 y omite el bloque else.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

El código usa posiciones numeradas desde 1. ¿Qué imprime?

largest = None
best_position = None
position = 0
for n in [9, 14, 6, 14, 8]:
    position += 1
    if largest is None or n >= largest:
        largest = n
        best_position = position
print(best_position)
  1. 2
  2. 5
  3. 3
  4. 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una comprobación de que todos los valores son positivos empieza con all_positive = True, cambia a False y sale con break ante el primer valor n <= 0. Para [2, 7, 0, 9, -4], ¿qué resultado y número de elementos examinados da?
  1. False tras 3 elementos
  2. False tras 5 elementos
  3. True tras 2 elementos
  4. True tras 3 elementos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Cuántas estrellas imprime este programa en total?

for row in range(1, 6):
    for _ in range(row):
        print("*", end="")
    print()
  1. 10
  2. 15
  3. 20
  4. 25
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un bucle debe sumar todos los enteros del 1 al 7. ¿Qué rango debe proporcionar sus valores?
  1. range(1, 7)
  2. range(0, 7)
  3. range(2, 8)
  4. range(1, 8)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Sigue actualizaciones, filtros y salidas anidadas10 Preguntas de Práctica

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

Pregunta 1 de 10

¿Qué imprime este programa?

match = None
for n in [9, 12, 7, 16, 5]:
    if n % 4 == 0:
        match = n
print(match)
  1. 12
  2. 5
  3. 16
  4. None
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Cuántos pares se imprimen?

for a in range(1, 4):
    for b in range(1, 4):
        if a == b:
            continue
        print(a, b)
  1. 6
  2. 3
  3. 9
  4. 2
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Cuál es el valor final de total?

total = 0
for n in range(2, 7):
    if n == 4:
        continue
    total += n
    if total > 9:
        break
  1. 5
  2. 14
  3. 16
  4. 10
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una pantalla tiene 6 valores en una línea con una coma solo entre valores vecinos. ¿Cuántas comas debe imprimir?
  1. 6
  2. 5
  3. 7
  4. 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué imprime este programa?

for n in [3, 8, 5]:
    total = 0
    total += n
print(total)
  1. 16
  2. 13
  3. 0
  4. 5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

¿Cuántas veces se ejecuta el cuerpo y qué valor final tiene amount?

amount = 3
while amount < 40:
    amount *= 2
  1. 3 pasadas; amount es 24.
  2. 4 pasadas; amount es 40.
  3. 5 pasadas; amount es 96.
  4. 4 pasadas; amount es 48.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Primero se introduce un entero no negativo. El siguiente bucle debe rechazar los valores fuera del rango de 2 a 8 y aceptar ambos extremos. ¿Qué falla en su condición?

value = int(input("Value: "))
while value < 2 and value > 8:
    value = int(input("Value: "))
  1. Acepta solo los extremos; sustituye < por <=.
  2. No rechaza nada; sustituye and por or.
  3. Rechaza todos los valores; sustituye and por or.
  4. Omite la última lectura; mueve input antes de while.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Cuántas vocales cuenta este bucle?

count = 0
for ch in "Orbit":
    if ch in "aeiou":
        count += 1
print(count)
  1. 1
  2. 2
  3. 0
  4. 5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Los valores de texto de entrada son «6», «4», «stop». ¿Qué imprime este programa después de los mensajes de solicitud de datos?

total = 0
while True:
    text = input("Amount or stop: ")
    if text == "stop":
        break
    total += int(text)
print(total)
  1. 4
  2. Un mensaje de ValueError
  3. 10
  4. 6
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Qué imprime este programa antes de atascarse?

i = 0
while i < 4:
    if i == 1:
        continue
    print(i)
    i += 1
  1. 0, después 1
  2. Solo 0
  3. 0, después 2 y después 3
  4. No imprime nada
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Combina patrones de bucles y prueba los casos límite10 Preguntas de Práctica

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

Pregunta 1 de 10

Una tarea necesita todos los valores impares menores que 20 empezando en 3. Este código nunca termina. ¿Qué corrección conserva los valores que deben imprimirse?

n = 3
while n != 20:
    print(n)
    n += 2
  1. Usa while n <= 21:.
  2. Cambia el valor inicial a 2.
  3. Usa while n < 20:.
  4. Cambia la actualización a n += 1.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un usuario introduce un entero n y después un programa debe imprimir «Listo» exactamente n veces para n no negativo. ¿Qué cabecera de bucle expresa directamente ese conteo?
  1. for _ in range(n):
  2. while n >= 0:
  3. for _ in n:
  4. for _ in range(n + 1):
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Ambos bucles imprimen 4, 2. ¿Qué valores finales tienen sus variables del bucle?

for a in range(4, 0, -2):
    print(a)
b = 4
while b > 0:
    print(b)
    b -= 2
  1. a es 0; b es 0.
  2. a es 2; b es 2.
  3. a es 0; b es -2.
  4. a es 2; b es 0.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Qué se imprime en este bucle?

for n in [3, 6, 9]:
    if n == 6:
        pass
    print(n)
  1. 3, después 9
  2. 3, después 6 y después 9
  3. Solo 3
  4. Solo 6
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

El usuario introduce «bad», «bad» y después «key». ¿Qué mensaje se imprime después de estas solicitudes de datos?

attempts = 0
while attempts < 3:
    guess = input("Code: ")
    if guess == "key":
        print("Open")
        break
    attempts += 1
else:
    print("Locked")
  1. Solo Locked
  2. Open, después Locked
  3. No imprime nada
  4. Solo Open
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un programa debe conservar el primer día con la temperatura más alta. Los números de día empiezan en 1. ¿Qué comparación debe sustituir el espacio en blanco?

highest = None
best_day = None
day = 0
for temp in [-4, -1, -1, -3]:
    day += 1
    if highest is None or ___:
        highest = temp
        best_day = day
  1. temp > highest
  2. temp >= highest
  3. temp < highest
  4. temp <= highest
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué imprime este programa en dos líneas?

total = 0
for row in range(1, 3):
    for col in range(1, 4):
        total += row * col
    print(total)
  1. 6, después 12
  2. 6, después 18
  3. 18, después 18
  4. 1, después 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Qué imprime esta búsqueda anidada?

found = False
for a in range(1, 5):
    for b in range(1, 5):
        if a + b == 7:
            found = True
            break
    if found:
        break
print(a, b)
  1. 4 3
  2. 4 4
  3. 3 4
  4. 1 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Qué texto imprime este programa?

text = ""
for ch in "lamp":
    if ch == "a":
        continue
    text = ch + text
print(text)
  1. pml
  2. lmp
  3. pmal
  4. mlp
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Qué media imprime este programa?

total = 0
count = 0
for n in [3, 11, -1, 14, 6, 20]:
    if n <= 8:
        continue
    total += n
    count += 1
    if count == 2:
        break
if count > 0:
    print(total / count)
  1. 6.25
  2. 15.0
  3. 12.5
  4. 25.0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

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

A

Acumulador
Un acumulador es una variable que conserva y actualiza un resultado entre iteraciones, como una suma, un producto o un texto.
El acumulador total conserva las sumas anteriores cuando llega la siguiente medida.
Acumulador de productos
Un acumulador de productos multiplica los factores seleccionados por un resultado guardado y normalmente empieza en uno para conservar el primer factor.
Un acumulador de productos que empieza en uno da 24 después de multiplicar 2, 3 y 4.
Acumulador por fila
Un acumulador por fila construye un resultado para una iteración externa y se reinicia antes de que empiece el trabajo interno de esa iteración.
El acumulador por fila empieza de nuevo para la fila 2, de modo que su suma no incluya la fila 1.
Aproximación en coma flotante
Una aproximación en coma flotante almacena muchas fracciones decimales como valores binarios cercanos, por lo que las sumas repetidas pueden no alcanzar un objetivo exacto.
La aproximación en coma flotante hace poco fiable una parada por igualdad exacta tras sumas repetidas de 0,1.
Asignación aumentada
La asignación aumentada combina una operación y una asignación, sustituyendo el valor de una variable por su valor actualizado.
La asignación aumentada total += n suma el número actual al subtotal guardado.

B

Bucle
Un bucle repite un bloque de sentencias según una condición o una secuencia de elementos que proporciona el trabajo.
Un bucle de cuenta atrás imprime un valor y lo reduce antes de decidir si repite.
Bucle anidado
Un bucle anidado es un bucle colocado dentro del cuerpo de otro, lo que permite repetir el trabajo interno para cada elemento externo.
Un bucle anidado imprime un conjunto separado de columnas para cada fila de la cuadrícula de multiplicaciones.
Bucle controlado por un valor centinela
Un bucle controlado por un valor centinela repite el procesamiento de entradas hasta encontrar un valor designado que indica detenerse.
Un bucle controlado por un valor centinela puede recoger un número desconocido de medidas positivas.
Bucle de conteo
Un bucle de conteo recorre valores numéricos sucesivos mediante un valor inicial, una comprobación de límite y un paso.
Un bucle de conteo que empieza en 10 y avanza con paso -2 recorre 10, 8, 6, 4 y 2, tanto si se expresa con for como con while.
Bucle de iteraciones determinadas
Un bucle de iteraciones determinadas tiene una secuencia definida de elementos o un número de repeticiones, aunque ese número se calcule durante la ejecución.
Un bucle de iteraciones determinadas repite el saludo n veces después de leer n del usuario.
Bucle de iteraciones indeterminadas
Un bucle de iteraciones indeterminadas se repite según una condición cuyo punto de parada no se expresa como un número fijo de repeticiones.
Un bucle de iteraciones indeterminadas recoge mensajes hasta que el usuario escribe la palabra de parada elegida.
Bucle de validación de datos de entrada
Un bucle de validación de datos de entrada repite una solicitud mientras la respuesta proporcionada no cumpla las condiciones de un valor aceptable.
Un bucle de validación de datos de entrada vuelve a preguntar cuando el número de menú introducido queda fuera del rango de 1 a 4.
Bucle externo
Un bucle externo rodea a otro bucle y controla qué grupo o fila procesa el bucle interno en cada ejecución.
El bucle externo mantiene fijo row mientras el interno recorre todas las columnas de esa fila.
Bucle for
Un bucle for asigna elementos sucesivos de una secuencia a una variable y ejecuta su cuerpo por cada elemento proporcionado.
Un bucle for recorre en orden las puntuaciones registradas e imprime el doble de cada valor actual.
Bucle infinito
Un bucle infinito se repite sin alcanzar una salida mediante su condición u otra sentencia de control.
Un bucle al que le falta su actualización se convierte en un bucle infinito que sigue imprimiendo el mismo número positivo.
Bucle interno
Un bucle interno está dentro del cuerpo de otro bucle y empieza una nueva ejecución cada vez que se alcanza su cabecera.
El bucle interno vuelve a empezar en la columna 1 cuando la cuadrícula de multiplicaciones avanza a una fila nueva.
Bucle más interno
El bucle más interno es el bucle envolvente más cercano que contiene una sentencia y es el bucle al que afectan break o continue.
El bucle más interno pasa a su siguiente columna cuando su cuerpo ejecuta continue.
Bucle while
Un bucle while comprueba una condición antes de cada pasada y repite su cuerpo con sangría mientras la condición sea verdadera.
Un bucle while puede seguir duplicando una cantidad hasta que alcance un mínimo necesario.
Bucle while True
Un bucle while True tiene una cabecera siempre verdadera y depende de una sentencia de control en su cuerpo para salir cuando sea necesario.
Un bucle while True lee una línea, comprueba el centinela y repite en la salida solo los datos reales.
Búsqueda anidada
Una búsqueda anidada comprueba combinaciones mediante un bucle dentro de otro y puede mantener una variable indicadora de coincidencia entre ambos niveles.
La búsqueda anidada usa dos break para detener ambos bucles en su primer par que cumple la condición.
Búsqueda lineal
Una búsqueda lineal examina los elementos uno a uno en el orden de su secuencia hasta encontrar la coincidencia requerida o agotar los elementos.
Una búsqueda lineal del primer valor par en una lista de valores variados se detiene en cuanto llega a uno, como 8.

C

Caso límite
Un caso límite comprueba un extremo del trabajo previsto de un bucle, como cero elementos, un elemento o su último valor incluido.
El caso límite de n igual a cero revela la pasada adicional causada por comprobar i <= n.
Cláusula else de un bucle
La cláusula else de un bucle es un bloque que se ejecuta tras la finalización normal del bucle y se omite cuando ese bucle sale mediante break.
La cláusula else de un bucle imprime un mensaje de fracaso después de comprobar todos los candidatos sin encontrar coincidencias.
Coincidencia
Una coincidencia es un elemento que cumple una condición de búsqueda, que puede exigir igualdad u otra propiedad como la divisibilidad.
Cuando 18 es el primer número proporcionado divisible entre 6, la coincidencia 18 se guarda.
Coincidencia guardada
Una coincidencia guardada es un registro separado de un candidato que cumple la condición y que permanece disponible mientras cambian las variables actuales de los bucles.
Una coincidencia guardada de 3 y 4 sigue conteniendo esos valores incluso después de que la búsqueda continúe examinando pares posteriores.
Comprobación de pertenencia
Una comprobación de pertenencia verifica si un valor aparece en una secuencia y produce un resultado booleano mediante in.
La comprobación de pertenencia ch in "aeiou" decide si se incrementa un contador de vocales.
Comprobación de que al menos un elemento cumple la condición
Una comprobación de que al menos un elemento cumple la condición pregunta si algún elemento la cumple y puede terminar con éxito en cuanto uno lo haga.
La comprobación de que al menos un elemento cumple la condición cambia su variable indicadora a True en la primera puntuación superior al mínimo requerido.
Comprobación de que todos los elementos cumplen la condición
Una comprobación de que todos los elementos cumplen la condición pregunta si cada elemento la cumple y puede terminar sin éxito ante el primer incumplimiento.
La comprobación de que todos los elementos cumplen la condición se detiene en cero al evaluar si todos los valores registrados son positivos.
Contador
Un contador es un acumulador que aumenta en uno cada vez que ocurre un evento concreto o aparece un elemento aceptado.
El contador aumenta solo para las puntuaciones superiores al umbral elegido, no para todas las entradas.
Conversión de tipos
La conversión de tipos transforma un valor a otro tipo, como convertir texto numérico de entrada en un entero con int.
La conversión de tipos permite al bucle comparar la cadena introducida «0» con un centinela entero.
Cuerpo del bucle
El cuerpo del bucle es el bloque de sentencias con sangría que se repite por cada elemento o comprobación verdadera de la condición.
En un bucle de cuenta atrás, el cuerpo del bucle contiene tanto el print como la actualización que acerca el conteo a cero.

E

Empate
Un empate ocurre cuando varios elementos tienen el mismo mejor valor, por lo que una búsqueda de posición necesita elegir entre el primero y el último.
El empate entre dos puntuaciones de 12 conserva la posición anterior con una comprobación estricta de mayor que.
Error de conteo de elementos e intervalos
Un error de conteo de elementos e intervalos confunde el número de elementos con el de límites o huecos, como los separadores entre valores impresos.
Un error de conteo de elementos e intervalos imprime seis comas después de seis valores cuando solo se necesitan cinco comas internas.
Error de desfase de una unidad
Un error de desfase de una unidad produce una pasada de más o de menos, o desplaza una unidad el primer o el último valor previsto.
Un error de desfase de una unidad deja fuera el 10 cuando una suma usa range(1, 10).
Evaluación en cortocircuito
La evaluación en cortocircuito omite la parte posterior de una expresión booleana cuando la parte anterior ya determina el resultado.
La evaluación en cortocircuito de or evita comparar el primer elemento numérico con None.

F

Filtrado
El filtrado selecciona elementos que cumplen una condición para que solo ellos reciban un procesamiento concreto o contribuyan a un resultado.
Filtrar los valores negativos permite al bucle sumar solo las medidas aceptadas.
Finalización normal
La finalización normal termina un bucle for al agotar sus elementos o un bucle while por una condición falsa, sin ejecutar break.
La finalización normal de un bucle for vacío también llega a su bloque else.

I

Inicialización
La inicialización asigna a una variable su valor de partida antes de que un cálculo o un proceso repetido la use.
La inicialización pone el contador en cero antes de contar los valores que cumplen la condición.
Inicio
El inicio de un rango es su primer entero candidato; su valor predeterminado es cero cuando solo se proporciona el límite de parada.
Un inicio de 3 hace que range(3, 8) empiece en 3 en lugar del cero predeterminado.
Iteración
Una iteración es una pasada por el cuerpo de un bucle, durante la cual las sentencias de la ruta ejecutada se realizan en orden.
Cada iteración de un bucle de cuenta atrás imprime un número antes de actualizar el conteo restante.

K

KeyboardInterrupt
KeyboardInterrupt es la interrupción que Python suele notificar cuando un usuario detiene la ejecución en una terminal con Ctrl+C.
Detener un bucle atascado en una terminal con Ctrl+C produce KeyboardInterrupt y una traza de la excepción.

L

Lectura inicial
Una lectura inicial obtiene la primera entrada antes de un bucle para que su condición inicial tenga un valor que examinar.
La lectura inicial permite que un valor de parada inmediato omita por completo el cuerpo que procesa los datos.
Límite de parada excluido
El límite de parada excluido de un rango es la frontera que no se incluye y que limita los valores proporcionados en la dirección de su paso.
Un límite de parada de 11 permite que range(1, 11) incluya el 10 como último valor proporcionado.

M

Máximo
Un máximo es el mayor valor de un conjunto de datos; un bucle puede encontrarlo conservando el mayor valor encontrado hasta el momento.
El máximo de -8, -3 y -6 es -3, aunque todos los candidatos sean menores que cero.
Media aritmética
Una media es aquí la media aritmética, que se obtiene al dividir la suma de los valores seleccionados entre el número de esos valores.
La media de las puntuaciones que cumplen la condición usa su conteo y excluye las entradas rechazadas y el centinela.
Mínimo
Un mínimo es el menor valor de un conjunto de datos; un bucle sustituye su valor guardado cada vez que aparece un elemento menor.
La temperatura mínima pasa a ser -7 cuando esa lectura es inferior al mejor valor guardado.

N

None
None es el valor especial de Python para la ausencia de valor, usado en un bucle de búsqueda del mejor valor para marcar que todavía no se ha encontrado ningún elemento.
None permanece como mejor valor guardado cuando el bucle de búsqueda de máximo recibe una lista vacía.

P

Par ordenado
Un par ordenado registra dos valores con funciones distintas de primero y segundo, por lo que invertirlos puede describir otro resultado.
El par ordenado (2, 5) para dos dados es distinto de (5, 2) porque cambia el primer dado.
Paso
El paso de un rango es el cambio entero distinto de cero entre valores consecutivos proporcionados; su valor predeterminado es uno positivo.
Un paso de -2 hace que range(8, 0, -2) recorra valores pares descendentes.

R

Rango
Un rango describe enteros separados por un paso constante mediante un inicio, un límite de parada excluido y un paso distinto de cero, sin construir una lista completa.
El rango range(2, 11, 2) proporciona cinco valores pares del 2 al 10.
Rango vacío
Un rango vacío no proporciona valores porque ningún valor inicial cumple su límite en la dirección de su paso.
El rango vacío range(5, 1) no da trabajo al cuerpo de un bucle for y no lanza ningún error.

S

Salida anticipada
Una salida anticipada abandona un bucle antes de su final normal, como cuando una búsqueda ejecuta break tras encontrar una coincidencia.
En un bucle que busca un múltiplo de un número, una salida anticipada evita examinar números posteriores cuando ya se ha encontrado el primer múltiplo.
Salida de diagnóstico
Una salida de diagnóstico es una sentencia temporal de salida usada para inspeccionar el estado del programa en un punto de ejecución elegido.
Una salida de diagnóstico después de las actualizaciones muestra el contador y el total al final de la pasada.
Secuencia
Una secuencia es una colección ordenada de elementos, como los caracteres de una cadena o los valores de una lista.
La secuencia «a b» proporciona tres caracteres, incluido el espacio entre las letras.
Seguimiento de la ejecución
El seguimiento de la ejecución sigue el código sentencia a sentencia y registra los cambios y las rutas ejecutadas para predecir sus valores y su salida.
El seguimiento de la ejecución muestra que incrementar antes de sumar desplaza todos los valores usados en la suma.
Sentencia break
La sentencia break de Python termina inmediatamente el bucle más interno que la contiene y omite el resto de su cuerpo y sus iteraciones.
Break termina la búsqueda en cuanto se ha impreso el primer valor que cumple la condición.
Sentencia continue
La sentencia continue de Python omite las sentencias restantes de la iteración actual y pasa a la siguiente.
Continue omite la suma de un valor negativo y permite examinar los valores posteriores.
Sentencia pass
La sentencia pass de Python no realiza ninguna acción y puede ocupar un bloque donde se exige una sentencia.
Pass ocupa el cuerpo de un if sin terminar, pero el print posterior a ese if se ejecuta de todos modos.
Separador
Un separador es texto colocado entre elementos de salida adyacentes; una secuencia no vacía de n elementos necesita cubrir n - 1 huecos de este tipo.
Imprimir un separador antes de cada elemento posterior evita dejar un guion de más después del último.
Suma acumulada
Una suma acumulada es la suma obtenida en una fase concreta del procesamiento, antes del último elemento o al llegar a él.
Imprimir la suma acumulada dentro del cuerpo muestra cómo cambia el subtotal con cada elemento.

T

Tabla de seguimiento
Una tabla de seguimiento registra los estados de las variables a lo largo de las pasadas del bucle, con columnas etiquetadas para identificar cuándo se observan los valores.
La tabla de seguimiento separa i antes del cuerpo de i después del incremento.
Terminación
La terminación es el final de la ejecución de un bucle, que se alcanza cuando la repetición se detiene por una condición falsa o una sentencia de salida.
La terminación de un bucle de cuenta atrás ocurre después de que la actualización haga falsa su siguiente comprobación de la condición.

V

Valor centinela
Un valor centinela es un valor de entrada especial que señala el final de los datos y se mantiene separado de los datos reales.
El centinela -1 termina la recogida de puntuaciones y permite que cero siga siendo una puntuación válida.
Valor final
Un valor final es el valor que contiene una variable después de terminar el bucle, que puede diferir del último valor impreso.
Cuando un bucle de conteo imprime i y se detiene una vez que i llega a 5, el valor final de i es 5, aunque el último valor impreso fue 4.
Variable del bucle
Una variable del bucle contiene el elemento actual asignado por un bucle for y puede usarse en las sentencias de su cuerpo.
La variable del bucle score contiene una puntuación cada vez, mientras que scores nombra la lista completa.
Variable indicadora
Una variable indicadora es una variable booleana que registra si ha ocurrido un evento o una condición para tomar decisiones posteriores.
La variable indicadora found permanece en True después de una coincidencia para que el programa pueda informar del éxito tras la búsqueda.

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