Programación textual con Python
En el colegio programaste arrastrando bloques de colores. Imagina ahora que la tienda del barrio quiere un programa que cobre el pasaje de TransMilenio y avise cuando el saldo de la tarjeta esté bajo. Para eso escribes las mismas ideas con texto: cada línea es una orden exacta y el computador la ejecuta tal cual, sin adivinar lo que querías decir. Al final de la página volveremos a esa tarjeta.
Variables, tipos de dato y E/S
Fíjate: puntos = puntos + 1 no es una ecuación matemática. El signo = significa «guarda el resultado de la derecha en la caja de la izquierda». Por eso no es un error sumarle algo a una variable que ya tenía un valor: primero se calcula la derecha con el valor viejo y luego se guarda.
En un programa de una tienda: 13 puede ser la cantidad de empanadas (entero), 3.75 el peso de un queso en kilos (decimal), "Ana" el nombre de la cliente (texto) y True si el cliente tiene tarjeta de fidelidad (booleano).
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?
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.
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.
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.
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.
Condicionales: `if`, `elif`, `else`
Un ejemplo de la vida diaria: si llueve, llevo el paraguas; si no, me pongo la gorra. En pseudocódigo:
Si llueve entonces
tomar paraguas
Si no
ponerse la gorra
Las comparaciones que más usarás: == (igual), != (distinto), <, >, <=, >=. Fíjate en que las líneas dentro del if y del else van sangradas: así Python sabe qué líneas pertenecen a cada rama.
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.
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.
Explica qué es un condicional con un ejemplo de tu vida diaria (si llueve tomo el paraguas; si no, las gafas 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, las gafas de sol) y escríbelo en tres líneas de pseudocódigo: condición, qué pasa si se cumple y qué pasa si no.
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$.
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 «alto». 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 «alto». 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.
Ciclos: `for` y `while`
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 a la cancha frente a seguir remando hasta llegar a la orilla.
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.
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.
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.
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)
- 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.
- 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.
Funciones
Con def saludar(): escribes una vez las líneas del saludo y luego basta con poner saludar() cada vez que las necesites, en lugar de copiarlas. Si hay que corregir algo, lo corriges en un solo lugar.
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.
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)).
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)
- 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 valorNonepor las variables del programa. - 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. - c) Corrige el código y añade una función
es_valido(precio)que devuelva un valor booleano (TrueoFalse) para verificar que el importe base no sea negativo antes de procesarlo.
Errores de sintaxis y errores de lógica
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.
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 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)
- 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.
- b) Reescribe el programa de forma correcta utilizando una estructura condicional anidada o con
elif, e incluye una validación que avise si se introduce un precio negativo o cero.
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
- 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?
- 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 carros entre ciclo y ciclo.
Diseña el algoritmo para un terminal de recarga y cobro del restaurante escolar cumpliendo los siguientes requisitos técnicos: La tarjeta parte de un saldo inicial de…
Diseña el algoritmo para un terminal de recarga y cobro del restaurante 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 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{,}\$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{,}\$50$).
-
Justifica qué tipo de bucle has utilizado y explica cómo evitas que un usuario introduzca un número negativo de menús para aumentar artificialmente su saldo.
Un sistema de calificación calcula la nota final aplicando los siguientes pesos: Trabajo de clase ($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 de clase ($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("Suspenso")
- a) Predice el resultado que mostrará el programa si el estudiante 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. - 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.
- c) Detecta un segundo error lógico en la condición del
ifrespecto al criterio habitual de calificación (aprobar con $5{,}0$) y escribe la versión definitiva del programa corregido.