Volver a la portadaFormación Tecnológica · noveno año · Cambiar asignatura
Empezar gratis
Noveno 9° · Formación Tecnológica
Programación y robótica · Programación textual

Programación textual con Python

Te conviene dominar: Programación por bloques (sétimo año (III Ciclo de la Educación General Básica))
Te conviene dominar: Algoritmos y pensamiento computacional (sétimo año (III Ciclo de la Educación General Básica))

En la feria del agricultor, doña Marta necesita sumar lo que debe cobrar a cada cliente y avisar si el total pasa de cierto monto. Usted ya armó programas con bloques de colores. Ahora va a escribir esas mismas ideas con texto: cada línea es una orden exacta y la computadora la ejecuta tal cual, sin adivinar lo que usted quería decir. ¿Cómo se convierte un problema como el de doña Marta en un programa que funcione?

Del problema al código

Programar es una forma de resolver problemas con ayuda de la computadora. El camino tiene tres pasos:

  1. Problema: qué se quiere lograr. Ejemplo: cobrar en una soda y avisar si el cliente tiene descuento.

  2. Algoritmo: la lista de pasos, ordenados y sin ambigüedad, que resuelve el problema (pensamiento computacional).

  3. Código: esos pasos escritos en un lenguaje que la computadora entiende, aquí Python.

Con bloques usted encajaba piezas; en Python escribe las mismas piezas como texto. El bloque «repetir» se vuelve un ciclo, el bloque «si… entonces… si no» se vuelve una estructura condicional, y los bloques que usted agrupaba para reutilizar se vuelven una función.

En bloques En Python
Variable puntos = 0
Preguntar y esperar input()
Decir print()
Si… entonces… si no if / elif / else
Repetir n veces for
Repetir hasta que… while
Bloque propio def

Variables, tipos de dato y entrada/salida

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 guarda 0 lee, suma 1, guarda puntos: 1 Pantalla

El signo = en Python no es una igualdad de matemática: significa «guarde en la caja de la izquierda lo que dé la derecha». Por eso puntos = puntos + 1 no es un absurdo: primero se calcula la derecha con el valor viejo y luego se guarda.

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

Explique qué es una variable con el símil de una caja con etiqueta y describa 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
Clasifique estos valores según su tipo de dato (entero, decimal, texto o booleano) y ponga un ejemplo de uso para cada tipo en un programa de una tienda: 13, 3,75,…

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

Resolver
Practica★☆☆Sin empezar
Explique qué hacen las órdenes input() y print() en Python, qué diferencia hay entre ellas y escriba un programa de dos líneas que pregunte su nombre y lo salude…

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

Resolver
Practica★★☆Sin empezar
Prediga 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). Escriba la…

Prediga 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). Escriba la traza completa (qué vale cada variable tras cada línea) y no solo el resultado.

Resolver
Practica★★☆Sin empezar
Escriba 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»). Explique qué…

Escriba 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»). Explique qué tipo de dato devuelve siempre input() y para qué sirve int() al pedir la edad.

Resolver

Estructura condicional: `if`, `elif`, `else`

Es la misma decisión de la vida diaria: si llueve, agarro el paraguas; si no, los lentes de sol. En pseudocódigo: si llueve → paraguas; si no → lentes.

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

int(input("Edad: ")) hace dos cosas: input pide el dato como texto y int lo convierte en entero para poder compararlo con $12$. La sangría le indica a Python qué líneas pertenecen a cada rama.

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. Escriba 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í puede participar no le falta poco edad = int(input("Edad: ")) if ?: print("Puede") else: print("Aún no")

Escriba la condición que falta en la línea del if (debe comparar la variable edad con $12$), explique 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
Explique qué es un condicional con un ejemplo de su vida diaria (si llueve agarro el paraguas; si no, los lentes de sol) y escríbalo en tres líneas de pseudocódigo:…

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

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

Escriba un programa que pida un número y diga si es positivo, negativo o cero. Indique qué estructura usa (un condicional con dos ramas o tres), qué comparaciones hace y pruébelo mentalmente con los valores $7$, $-3$ y $0$.

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

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

Resolver

Ciclos: `for` y `while`

Comparación de un ciclo for y un ciclo while: el for repite diez veces e imprime 3 por i; el while imprime n y le resta 1 hasta que n deja de ser mayor que 0. for: veces fijas for i in range(10): print(3 * i) 10 vueltas, 10 líneas while: hasta que... n = 5 while n > 0: print(n) n = n - 1 5, 4, 3, 2, 1 y termina
Practica★☆☆Sin empezar
Explique 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 ponga un ejemplo cotidiano…

Explique 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 ponga un ejemplo cotidiano de cada uno: dar diez vueltas al patio frente a seguir remando hasta llegar a la orilla.

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

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

Resolver
Practica★★☆Sin empezar
Lea este programa y explique qué hace: n = 5, while n > 0:, print(n), n = n - 1, y al final print("¡Ya!"). Escriba la salida completa en pantalla y razone qué pasaría si…

Lea este programa y explique qué hace: n = 5, while n > 0:, print(n), n = n - 1, y al final print("¡Ya!"). Escriba la salida completa en pantalla y razone 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"). Explique por qué el programa…

Un compañero escribe un programa que pide contraseñas hasta acertar: clave = "", while clave != "sol":, y dentro solo print("incorrecta"). Explique 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
Para seleccionar a los clasificados de un torneo de robótica, se leen cinco puntuaciones (del $0$ al $10$). Un compañero ha propuesto 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 ha propuesto 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) Prediga qué mostrará por pantalla si la persona usuaria introduce sucesivamente las notas: $6{,}0$, $8{,}0$, $4{,}0$, $9{,}0$ y $7{,}0$. Justifique por qué el resultado final no es el esperado localizando el error de lógica en la estructura condicional.
  2. b) Corrija el código y modifíquelo 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

Funciones

Con bloques usted creaba su propio bloque para no repetir piezas; la función es lo mismo. Si necesita saludar en cinco partes del programa, escribe def saludar(): una vez y la llama cinco veces. Si hay que cambiar el saludo, se corrige en un solo lugar.

Una función como máquina: area_cuadrado recibe 5 y devuelve 25, y recibe 2,5 y devuelve 6,25. llamada resultado def area_cuadrado(lado): return lado * lado area_cuadrado(5) area_cuadrado(2.5) 25 5 × 5 6,25 2,5 × 2,5
Practica★☆☆Sin empezar
Explique 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…

Explique 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
Analice esta función: def area_cuadrado(lado): y dentro return lado * lado. Explique qué es el parámetro, qué es el valor que devuelve y qué escribiría en pantalla cada…

Analice esta función: def area_cuadrado(lado): y dentro return lado * lado. Explique 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'. Interprete el mensaje y explique 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)». Rebata su afirmación explicando la diferencia funcional entre mostrar un valor por pantalla y retornar un valor a la llamada principal.
  3. c) Corrija el código y añada 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

Depurar: errores de sintaxis y de lógica

Depurar es encontrar y corregir los errores de un programa. Casi nunca sale bien a la primera, y eso es normal.

Dos ventanas de código: con un error de sintaxis (comilla sin cerrar) el programa no arranca; con un error de lógica (nota1 + nota2 / 2) arranca pero da 7 en vez de 5. Error de sintaxis input("Su nombre: ) no arranca Error de lógica media = nota1 + nota2 / 2 nota1 = 4 nota2 = 6 resultado: 7 esperado: 5 arranca, resultado erróneo
Practica★☆☆Sin empezar
Este programa tiene tres errores típicos: nombre = input("Su nombre: ), if nombre = "Fátima", print("Hola"). Encuentre cada error (una comilla sin cerrar, un = que…

Este programa tiene tres errores típicos: nombre = input("Su nombre: ), if nombre = "Fátima", print("Hola"). Encuentre cada error (una comilla sin cerrar, un = que debería ser == y explique la diferencia), reescriba el programa corregido y diga qué mensaje de error daría la computadora en cada caso.

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

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

Un estudiante 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) Realice la traza con una compra de $60{,}\text{₡}\ 00$. ¿Qué precio final imprime el programa? Justifique por qué se produce ese fallo de lógica al encadenar los condicionales.
  2. b) Reescriba el programa de forma correcta utilizando una estructura condicional anidada o con elif, e incluya una validación que avise si se introduce un precio negativo o cero.
Resolver
Practica★★★Sin empezar
Observe el siguiente programa, cuyo objetivo es pedir la edad a la persona usuaria y determinar si tiene edad legal para votar (a partir de $18$ años cumplidos): a) Si…

Observe el siguiente programa, cuyo objetivo es pedir la edad a la persona usuaria 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 intenta 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) Identifique y clasifique 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) Reescriba el código corregido e introduzca una comprobación para evitar que el programa se cuelgue si la persona usuaria introduce su edad con texto (por ejemplo, escribiendo «dieciocho»).
Resolver
Practica★★★Sin empezar
Para regular un cruce escolar se propone este algoritmo en pseudocódigo para un semáforo con pulsador peatonal: a) Detecte 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) Detecte 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ñe 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 carros entre ciclo y ciclo.
Resolver
Practica★★★Sin empezar
Diseñe el algoritmo para un terminal de recarga y cobro del comedor escolar cumpliendo los siguientes requisitos técnicos: La tarjeta parte de un saldo inicial de…

Diseñe el algoritmo para un terminal de recarga y cobro del comedor escolar cumpliendo los siguientes requisitos técnicos:

  • La tarjeta parte de un saldo inicial de $20{,}\text{₡}\ 00$ y cada menú cuesta $4{,}\text{₡}\ 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 importe que falta y el saldo no se modifica.

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

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

  • Justifique qué tipo de bucle ha utilizado y explique cómo evita que una persona usuaria introduzca un número negativo de menús para aumentar artificialmente su saldo.

Resolver
Practica★★★Sin empezar
Un sistema de calificación calcula la nota final aplicando los siguientes pesos: Trabajo cotidiano ($20\ \%$), Práctica de taller ($30\ \%$) y Examen teórico ($50\ \%$).…

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

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

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

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

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

if nota_final > 5:

    print("Aprobado")

else:

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

Vuelva al principio: para ayudar a doña Marta se plantea el problema (sumar y avisar), se escribe el algoritmo (pedir precios, acumular, comparar) y se pasa a Python con variables, un ciclo y un condicional, probándolo con casos conocidos.

Resumen

Ver todos los ejercicios de este apartado