Volver a la portadaPensamiento Computacional y Programación · III-IV medio · Cambiar asignatura
Empezar gratis
Diferenciado M2 · Pensamiento Computacional y Programación
Programación y robótica · Programación textual

Programación textual con Python

Te conviene dominar: Programación por bloques (I medio)
Te conviene dominar: Algoritmos y pensamiento computacional (I medio)

Cargas tu tarjeta Bip! y el torniquete del Metro decide en un instante si te deja pasar: ¿tienes saldo suficiente para el pasaje de $\$800$? Detrás hay un programa que compara, decide y descuenta. En esta página escribes esas mismas ideas como texto en Python: cada línea es una orden exacta y el computador la ejecuta tal cual, sin adivinar lo que querías decir. Al final volverás a esta pregunta y la programarás tú.

Python es el lenguaje de referencia de este curso, pero las ideas (variables, decisiones, ciclos, funciones) son las mismas en cualquier lenguaje. En el código se usa punto decimal (3.75), porque así lo exige Python; en los textos explicativos usamos coma.

Variables y tipos de dato

Variable como caja con etiqueta: tres líneas de código crean la caja puntos con un 0, le suman 1 y muestran su valor en pantalla. Código 1 puntos = 0 2 puntos = puntos + 1 3 print(puntos) Variable (caja) puntos 0 → 1 Pantalla 1

Sumarle algo a una variable no es un error: el signo = en programación no es una igualdad matemática, sino una orden de guardar. Primero se calcula lo de la derecha y luego se guarda el resultado en la caja de la izquierda.

Para seguir lo que hace un programa se usa una tabla de seguimiento (prueba de escritorio): una fila por línea y una columna por variable.

Practica★☆☆Sin empezar
Explica qué es una variable con el símil de una caja con etiqueta y describe qué hace cada línea: puntos = 0, puntos = puntos + 1, print(puntos). ¿Qué valor aparece en…

Explica qué es una variable con el símil de una caja con etiqueta y describe qué hace cada línea: puntos = 0, puntos = puntos + 1, print(puntos). ¿Qué valor aparece en pantalla y por qué no es un error sumarle algo a una variable que «ya tenía» un valor?

Resolver
Practica★☆☆Sin empezar
Clasifica estos valores según su tipo de dato (entero, decimal, texto o booleano) y pon un ejemplo de uso para cada tipo en un programa de una tienda: 13, 3,75, "Ana",…

Clasifica estos valores según su tipo de dato (entero, decimal, texto o booleano) y pon un ejemplo de uso para cada tipo en un programa de una tienda: 13, 3,75, "Ana", True.

Resolver
Practica★★☆Sin empezar
Predice la salida de este programa sin ejecutarlo, siguiendo el valor de las variables línea a línea: a = 4, b = 3, a = a + b, b = a - b, print(a), print(b). Escribe la…

Predice la salida de este programa sin ejecutarlo, siguiendo el valor de las variables línea a línea: a = 4, b = 3, a = a + b, b = a - b, print(a), print(b). Escribe la traza completa (qué vale cada variable tras cada línea) y no solo el resultado.

Resolver

Entrada, salida y texto

Los textos (cadenas) también tienen sus operaciones: se pueden pegar con +, medir con len() y acceder a cada letra con un índice que parte en 0.

palabra = "Chile"

print(len(palabra))      # 5

print(palabra[0])        # C

print(palabra + "no")    # Chileno
Practica★☆☆Sin empezar
Explica qué hacen las órdenes input() y print() en Python, qué diferencia hay entre ellas y escribe un programa de dos líneas que pregunte tu nombre y te salude usándolo.

Explica qué hacen las órdenes input() y print() en Python, qué diferencia hay entre ellas y escribe un programa de dos líneas que pregunte tu nombre y te salude usándolo.

Resolver
Practica★★☆Sin empezar
Escribe un programa de tres líneas que pida el nombre y la edad de una persona y escriba una frase completa usándolos (por ejemplo, «Mei tiene 14 años»). Explica qué…

Escribe un programa de tres líneas que pida el nombre y la edad de una persona y escriba una frase completa usándolos (por ejemplo, «Mei tiene 14 años»). Explica qué tipo de dato devuelve siempre input() y para qué sirve int() al pedir la edad.

Resolver

Condicionales: `if` y `else`

Código con if/else: si edad es mayor o igual que 12 se muestra "Puedes"; si no, "Aún no". Las líneas de cada bloque van con sangría. edad = int(input("Edad: ")) if edad >= 12: print("Puedes") else: print("Aún no") ← condición si es verdadera ← si no si es falsa

Las comparaciones dan un booleano: == (igual), != (distinto), <, >, <=, >=.

Practica★☆☆Sin empezar
La figura muestra un diagrama de flujo y, a su lado, el programa que hace lo mismo, pero con la condición tapada. Escribe la condición que falta en la línea del if (debe…

La figura muestra un diagrama de flujo y, a su lado, el programa que hace lo mismo, pero con la condición tapada.

inicio pedir la edad ¿edad ≥ 12? sí puedes participar no te falta poco edad = int(input("Edad: ")) if ?: print("Puedes") else: print("Aún no")

Escribe la condición que falta en la línea del if (debe comparar la variable edad con $12$), explica qué hace int(input("Edad: ")) y por qué las líneas dentro del if y del else van sangradas hacia la derecha.

Resolver
Practica★☆☆Sin empezar
Explica qué es un condicional con un ejemplo de tu vida diaria (si llueve tomo el paraguas; si no, los lentes de sol) y escríbelo en tres líneas de pseudocódigo:…

Explica qué es un condicional con un ejemplo de tu vida diaria (si llueve tomo el paraguas; si no, los lentes de sol) y escríbelo en tres líneas de pseudocódigo: condición, qué pasa si se cumple y qué pasa si no.

Resolver
Practica★★☆Sin empezar
Escribe un programa que pida un número y diga si es positivo, negativo o cero. Indica qué estructura usas (un condicional con dos ramas o tres), qué comparaciones haces…

Escribe un programa que pida un número y diga si es positivo, negativo o cero. Indica qué estructura usas (un condicional con dos ramas o tres), qué comparaciones haces y pruébalo mentalmente con los valores $7$, $-3$ y $0$.

Resolver

Varias ramas y condiciones compuestas

Cuando hay más de dos caminos se usa elif («si no, si…»). Python revisa las condiciones en orden: en cuanto una es verdadera, ejecuta su bloque y se salta las demás.

Las condiciones se pueden combinar con operadores lógicos (en Python, and, or, not; en pseudocódigo, y, o, no):

Operador Es verdadero cuando…
a and b las dos condiciones son verdaderas
a or b al menos una es verdadera
not a a es falsa

Por ejemplo, if precio >= 30 and precio <= 50: comprueba que el precio esté entre $30$ y $50$.

Practica★★☆Sin empezar
Un programa convierte la nota numérica en calificación: menos de $5$ es «reprobado», de $5$ a $6{,}9$ es «aprobado» y de $7$ en adelante es «notable». Escríbelo con if,…

Un programa convierte la nota numérica en calificación: menos de $5$ es «reprobado», de $5$ a $6{,}9$ es «aprobado» y de $7$ en adelante es «notable». Escríbelo con if, elif y else, explica por qué el orden de las condiciones importa y qué pasaría si la primera condición fuera nota > 5.

Resolver
Practica★★★Sin empezar
Una tienda aplica la siguiente política: compras menores de $\$30$ pagan $4{,}\$50$ de envío; compras entre $\$30$ y $\$50$ tienen envío gratis; compras superiores a…

Una tienda aplica la siguiente política: compras menores de $\$30$ pagan $4{,}\$50$ de envío; compras entre $\$30$ y $\$50$ tienen envío gratis; compras superiores a $\$50$ tienen envío gratis y un $10\ \%$ de descuento sobre el precio de la compra.

Un alumno programó este código:

precio = float(input("Total compra: "))

if precio > 50:

    total = precio * 0.90

if precio >= 30:

    total = precio

else:

    total = precio + 4.50

print("Total a pagar:", total)
  1. a) Realiza la traza con una compra de $60{,}\$00$. ¿Qué precio final imprime el programa? Justifica por qué se produce ese fallo de lógica al encadenar los condicionales.
  2. b) Reescribe el programa de forma correcta utilizando una estructura condicional anidada o con elif, e incluye una validación que avise si se ingresa un precio negativo o cero.
Resolver

El ciclo `for`

Dar diez vueltas al patio es un for: sabes cuántas vueltas harás.

for i in range(1, 11):

    print(3 * i)

Esto escribe la tabla del $3$ ($3 \cdot 1$ hasta $3 \cdot 10$). El cuerpo se repite $10$ veces. Para la tabla del $7$ basta cambiar el $3$ por $7$; mejor aún, guardarlo en una variable t y escribir print(t * i).

Un patrón muy útil: contar casos. Se inicia un contador en 0 y se le suma $1$ solo cuando se cumple la condición. Ojo: el contador no se reinicia dentro del ciclo.

cuenta = 0

for i in range(5):

    nota = float(input("Nota: "))

    if nota >= 5:

        cuenta = cuenta + 1

print(cuenta)
Practica★☆☆Sin empezar
Explica la diferencia entre un bucle for (repetir un número conocido de veces) y un bucle while (repetir mientras se cumpla una condición), y pon un ejemplo cotidiano de…

Explica la diferencia entre un bucle for (repetir un número conocido de veces) y un bucle while (repetir mientras se cumpla una condición), y pon un ejemplo cotidiano de cada uno: dar diez vueltas al patio frente a seguir remando hasta llegar a la orilla.

Resolver
Practica★★☆Sin empezar
Escribe un bucle for que muestre la tabla de multiplicar del $3$ (del $3 \cdot 1$ al $3 \cdot 10$), indica cuántas veces se repite el cuerpo del bucle y explica qué…

Escribe un bucle for que muestre la tabla de multiplicar del $3$ (del $3 \cdot 1$ al $3 \cdot 10$), indica cuántas veces se repite el cuerpo del bucle y explica qué cambiarías para mostrar la tabla del $7$ sin reescribir todo el programa.

Resolver
Practica★★★Sin empezar
Para seleccionar a los clasificados de un torneo de robótica, se leen cinco puntuaciones (del $0$ al $10$). Un compañero propuso este código para contar cuántas son…

Para seleccionar a los clasificados de un torneo de robótica, se leen cinco puntuaciones (del $0$ al $10$). Un compañero propuso este código para contar cuántas son iguales o superiores a $5{,}0$:

aprobados = 0

for i in range(5):

    nota = float(input("Introduce nota: "))

    if nota >= 5:

        aprobados = aprobados + 1

    else:

        aprobados = 0

print("Total de aprobados:", aprobados)
  1. a) Predice qué mostrará por pantalla si el usuario introduce sucesivamente las notas: $6{,}0$, $8{,}0$, $4{,}0$, $9{,}0$ y $7{,}0$. Justifica por qué el resultado final no es el esperado localizando el error de lógica en la estructura condicional.
  2. b) Corrige el código y modifícalo para que descarte del recuento las notas erróneas (menores que $0$ o mayores que $10$), mostrando un mensaje de advertencia específico sin sumar ni reiniciar el contador.
Resolver

El ciclo `while`

Ejemplo típico: pedir una clave hasta acertar. La clave debe pedirse de nuevo dentro del ciclo:

clave = ""

while clave != "sol":

    clave = input("Clave: ")
Practica★★☆Sin empezar
Lee este programa y explica qué hace: n = 5, while n > 0:, print(n), n = n - 1, y al final print("¡Ya!"). Escribe la salida completa en pantalla y razona qué pasaría si…

Lee este programa y explica qué hace: n = 5, while n > 0:, print(n), n = n - 1, y al final print("¡Ya!"). Escribe la salida completa en pantalla y razona qué pasaría si olvidamos la línea n = n - 1.

Resolver
Practica★★☆Sin empezar
Un compañero escribe un programa que pide contraseñas hasta acertar: clave = "", while clave != "sol":, y dentro solo print("incorrecta"). Explica por qué el programa no…

Un compañero escribe un programa que pide contraseñas hasta acertar: clave = "", while clave != "sol":, y dentro solo print("incorrecta"). Explica por qué el programa no termina nunca, qué línea falta dentro del bucle (volver a pedir la clave) y la regla general sobre los bucles while: algo tiene que poder cambiar la condición.

Resolver
Practica★★★Sin empezar
En el juego de «adivinar un número secreto del $1$ al $100$», tu compañero afirma: «Con un bucle de intentos fijos es imposible garantizar que el usuario acierte;…

En el juego de «adivinar un número secreto del $1$ al $100$», tu compañero afirma: «Con un bucle de intentos fijos es imposible garantizar que el usuario acierte; siempre estamos obligados a usar un while infinito hasta que acierte».

  1. a) Rebate su afirmación: justifica matemáticamente por qué $7$ intentos son suficientes para adivinar con total seguridad cualquier número entre $1$ y $100$ si se utiliza una estrategia de búsqueda binaria (preguntar siempre por el punto medio).
  2. b) Diseña en Python o pseudocódigo el juego con un límite de $7$ vidas. El programa debe detenerse tanto si el usuario acierta antes de agotar los intentos como si se queda sin vidas, mostrando mensajes finales distintos. Justifica la condición lógica de parada que has elegido.
Resolver

Listas: guardar muchos datos

Para cinco temperaturas no conviene crear cinco variables. Una lista (arreglo) guarda varios valores en una sola variable, ordenados por posición (índice), que parte en $0$.

Una lista de cinco temperaturas con sus índices del 0 al 4: 24, 26, 25, 28 y 27. 24 26 25 28 27 índice 0 índice 1 índice 2 índice 3 índice 4 temps = [24, 26, 25, 28, 27]
  • temps[0] es el primer elemento ($24$); temps[4], el último.

  • len(temps) es la cantidad de elementos ($5$).

  • temps.append(30) agrega un valor al final.

  • for t in temps: recorre la lista elemento por elemento.

Practica★★★Sin empezar
Reto del tema. Como analista de datos novato, tu misión es crear un programa en Python para analizar el impacto térmico en tu entorno y plantear hábitos eficientes. 1.…

Reto del tema. Como analista de datos novato, tu misión es crear un programa en Python para analizar el impacto térmico en tu entorno y plantear hábitos eficientes.

  1. Recopilación de datos: Accede al sitio web oficial de la Dirección Meteorológica de Chile (meteochile.gob.cl) y registra la temperatura máxima registrada en tu comuna durante los últimos $5$ días consecutivos.

  2. Programación textual: En un editor en línea gratuito como Trinket.io, escribe un script en Python que guarde estos $5$ valores en una lista. Mediante un bucle for y condicionales if-else, programa el cálculo automático de la temperatura media ($\bar{x}$) y la identificación del día más caluroso.

  3. Informe y propuesta: Genera un documento breve que incluya el código fuente comentado, una captura de pantalla del resultado en consola y una propuesta justificada con dos medidas de climatización del hogar si la media supera los $21,5$ °C.

Se evaluará:

  • Corrección sintáctica del código textual (manejo de listas, bucles y estructuras condicionales).

  • Precisión en la importación de datos reales de la Dirección Meteorológica de Chile y exactitud del cálculo matemático.

  • Claridad de los comentarios en el programa y viabilidad técnica de la propuesta energética.

Resolver

Funciones

Una función es una generalización: en vez de repetir 5 * 5, 2.5 * 2.5… escribes la regla una vez para cualquier lado.

Una función como máquina: area_cuadrado recibe 5 y devuelve 25, y recibe 2.5 y devuelve 6.25. def area_cuadrado(lado): return lado * lado area_cuadrado(5) area_cuadrado(2.5) 25 6,25
Practica★☆☆Sin empezar
Explica qué es una función en un programa y qué ventaja tiene escribir una vez def saludar(): y poder llamarla muchas veces, en lugar de copiar las mismas líneas una y…

Explica qué es una función en un programa y qué ventaja tiene escribir una vez def saludar(): y poder llamarla muchas veces, en lugar de copiar las mismas líneas una y otra vez.

Resolver
Practica★★☆Sin empezar
Analiza esta función: def area_cuadrado(lado): y dentro return lado * lado. Explica qué es el parámetro, qué es el valor que devuelve y qué escribiría en pantalla cada…

Analiza esta función: def area_cuadrado(lado): y dentro return lado * lado. Explica qué es el parámetro, qué es el valor que devuelve y qué escribiría en pantalla cada llamada: print(area_cuadrado(5)), print(area_cuadrado(2{,}5)).

Resolver
Practica★★★Sin empezar
Un equipo desarrolla el software de una caja registradora usando funciones: a) Al ejecutar este código, Python produce el error: TypeError: unsupported operand type(s)…

Un equipo desarrolla el software de una caja registradora usando funciones:

def calcular_iva(precio):

    total = precio * 1.21

    pass  # El programador olvidó añadir la última línea de esta función

def aplicar_descuento(total, rebaja):

    resultado = total - rebaja

    return resultado

precio_base = 100.0

precio_con_iva = calcular_iva(precio_base)

precio_final = aplicar_descuento(precio_con_iva, 10.0)

print("Precio final:", precio_final)
  1. a) Al ejecutar este código, Python produce el error: TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'. Interpreta el mensaje y explica exactamente cómo viaja el valor None por las variables del programa.
  2. b) Un compañero sostiene: «Para arreglarlo basta cambiar la línea de la primera función por print(precio * 1.21)». Rebate su afirmación explicando la diferencia funcional entre mostrar un valor por pantalla y retornar un valor a la llamada principal.
  3. c) Corrige el código y añade una función es_valido(precio) que devuelva un valor booleano (True o False) para verificar que el importe base no sea negativo antes de procesarlo.
Resolver

Errores y cómo encontrarlos

Dos tipos de error: con error de sintaxis (comilla sin cerrar) el programa no arranca; con error de lógica (n1 + n2 / 2) arranca pero da 7 en vez de 5. Error de sintaxis input("Tu nombre: ) → no arranca Error de lógica media = n1 + n2 / 2 n1 = 4, n2 = 6 → da 7, esperado 5

Casos de prueba. Para encontrar errores de lógica prueba el programa con tres tipos de datos y compara con lo que esperas:

  • Normales: el caso típico (una nota $5{,}5$).

  • Límite: justo en el borde de una condición (la nota $5{,}0$ o $7{,}0$; el número $0$ o $1$).

  • Erróneos: lo que no debería llegar (texto en vez de número).

Si el resultado no es el esperado, haz la tabla de seguimiento (prueba de escritorio) a mano, línea por línea, y mira dónde cambia algo que no debería.

Practica★☆☆Sin empezar
Este programa tiene tres errores típicos: nombre = input("Tu nombre: ), if nombre = "Fátima", print("Hola"). Encuentra cada error (una comilla sin cerrar, un = que…

Este programa tiene tres errores típicos: nombre = input("Tu nombre: ), if nombre = "Fátima", print("Hola"). Encuentra cada error (una comilla sin cerrar, un = que debería ser == y explica la diferencia), reescribe el programa corregido y di qué mensaje de error daría el computador en cada caso.

Resolver
Practica★★★Sin empezar
Observa el siguiente programa, cuyo objetivo es pedir la edad al usuario y determinar si tiene edad legal para votar (a partir de $18$ años cumplidos): a) Si intentas…

Observa el siguiente programa, cuyo objetivo es pedir la edad al usuario y determinar si tiene edad legal para votar (a partir de $18$ años cumplidos):

if edad >= "18":

print("Puedes votar")

edad = input("Dime tu edad: ")

else:

    print("No puedes votar")
  1. a) Si intentas ejecutar el programa tal cual, ¿en qué línea se detendrá el intérprete de Python y por qué no llegará a ejecutar la línea del input?
  2. b) Identifica y clasifica todos los errores presentes distinguiendo entre errores de sintaxis (que impiden compilar/interpretar) y errores de tipo o lógica durante la ejecución.
  3. c) Reescribe el código corregido e introduce una comprobación para evitar que el programa se cuelgue si el usuario ingresa su edad con texto (por ejemplo, escribiendo «dieciocho»).
Resolver
Practica★★★Sin empezar
Un sistema de calificación calcula la nota final aplicando los siguientes pesos: Trabajo de clase ($20\ \%$), Práctica de taller ($30\ \%$) y Prueba teórica ($50\ \%$).…

Un sistema de calificación calcula la nota final aplicando los siguientes pesos: Trabajo de clase ($20\ \%$), Práctica de taller ($30\ \%$) y Prueba teórica ($50\ \%$). El profesor programó la fórmula así:

trabajo = float(input("Nota trabajo: "))

taller = float(input("Nota taller: "))

prueba = float(input("Nota prueba: "))

nota_final = trabajo * 0.20 + taller * 0.30 + prueba * 0.50 / 3

if nota_final > 5:

    print("Aprobado")

else:

    print("Reprobado")
  1. a) Predice el resultado que mostrará el programa si el alumno obtiene un $10{,}0$ en los tres apartados. Interpreta la prioridad de operadores para justificar el valor numérico erróneo que almacena nota_final.
  2. b) Justifica por qué este error es de lógica y no de sintaxis, y argumenta por qué los errores lógicos suponen un riesgo mucho mayor en programas de ingeniería o control que los de sintaxis.
  3. c) Detecta un segundo error lógico en la condición del if respecto al criterio habitual de calificación (aprobar con $5{,}0$) y escribe la versión definitiva del programa corregido.
Resolver

Juntando todo: programas completos

Los programas reales combinan todo: ciclos que repiten, condiciones que deciden, variables que acumulan y funciones que ordenan el código.

Para diseñar un algoritmo grande: escribe primero qué entra y qué sale, divídelo en partes (funciones), decide qué estructura usa cada parte (if, for, while) y pruébalo con casos normales y límite. Si un ciclo debe correr para siempre (un semáforo), usa while True: y cuida el orden de las acciones: por ejemplo, apagar una luz antes de encender la contraria.

Vuelve al principio: el torniquete compara el saldo con el pasaje (if/while), descuenta con una variable y se detiene cuando la condición se vuelve falsa.

Practica★★★Sin empezar
Para regular un cruce escolar se propone este algoritmo en pseudocódigo para un semáforo con pulsador peatonal: a) Detecta un grave fallo de seguridad vial en la…

Para regular un cruce escolar se propone este algoritmo en pseudocódigo para un semáforo con pulsador peatonal:

mientras verdadero:

    verde_coches = ON, rojo_peatones = ON

    si pulsador_activado == 1:

        esperar(5)

        verde_coches = OFF, ambar_coches = ON

        esperar(3)

        ambar_coches = OFF, rojo_coches = ON

        rojo_peatones = OFF, verde_peatones = ON

        esperar(10)

        verde_peatones = OFF, rojo_peatones = ON
  1. a) Detecta un grave fallo de seguridad vial en la transición de vuelta: cuando se apaga el verde de peatones, ¿qué ocurre inmediatamente con el tráfico vehicular en la siguiente iteración del bucle?
  2. b) Diseña una mejora del algoritmo (en pseudocódigo o texto estructurado) que solucione ese fallo y que además impida el colapso del tráfico: si los peatones pulsan repetidamente el botón, el semáforo debe garantizar siempre un mínimo de $20$ segundos ininterrumpidos en verde para los autos entre ciclo y ciclo.
Resolver
Practica★★★Sin empezar
Diseña el algoritmo para un terminal de recarga y cobro del casino del colegio (comedor escolar) cumpliendo los siguientes requisitos técnicos: La tarjeta parte de un…

Diseña el algoritmo para un terminal de recarga y cobro del casino del colegio (comedor escolar) cumpliendo los siguientes requisitos técnicos:

  • La tarjeta parte de un saldo inicial de $20{,}\$00$ y cada menú cuesta $4{,}\$50$.

  • En un bucle, el programa pregunta cuántos menús se desean consumir en el día.

  • Si el saldo disponible no alcanza para pagar la cantidad solicitada, la operación se cancela, se informa del monto que falta y el saldo no se modifica.

  • Si hay saldo suficiente, se descuenta el monto y se comprueba si el saldo restante es inferior a $5{,}\$00$, mostrando en tal caso el aviso «Saldo bajo: recarga pronto».

  • El programa debe terminar automáticamente cuando el saldo restante sea menor que el precio de un menú individual ($4{,}\$50$).

  • Justifica qué tipo de bucle has utilizado y explica cómo evitas que un usuario ingrese un número negativo de menús para aumentar artificialmente su saldo.

Resolver

Resumen

Ver todos los ejercicios de este apartado