Variables y tipos de datos en Python — ejercicios con un recibo, temperaturas, propinas y tu ficha de estudiante (y un True que vale 1)

Mi primer recibo en Python parecía terminado: sumaba bien, calculaba el IVA… y en la última línea, la del total, el programa se paraba con un TypeError: can only concatenate str (not "float") to str. Había escrito print("Total: " + total + " €"), intentando pegar un número a un texto. Era el mismo error de la teoría, disfrazado en un sitio donde no lo esperaba. Con los ejercicios de este tema pasa eso: los conceptos son pocos, pero aparecen donde menos los buscas.

Aquí tienes cuatro ejercicios (dos básicos, uno intermedio y un desafío que reúne todo el tema con tu ficha de estudiante), tres fragmentos de «¿Qué falla aquí?» para entrenar el ojo, las soluciones comentadas línea a línea y un chuletario para tener a mano. Si necesitas repasar, vuelve a la teoría o a la práctica. Y si todavía no tienes Python, empieza por instalar Python en Windows.

Cómo usar este artículo

  1. Lee el enunciado y la salida esperada. Tu programa tiene que dar exactamente esa salida con esos datos.
  2. Intenta resolverlo en VS Code sin mirar nada. Antes de escribir, decide el tipo de cada dato.
  3. Si llevas más de 10 minutos atascado, lee la pista, y solo la pista.
  4. Compara con la solución comentada. Si la tuya es distinta pero da la misma salida, también vale: lee el «por qué está hecho así» para ver qué decisiones has tomado diferente.

Igual que en la práctica, los datos de partida se escriben como texto ("1.20"), que es lo que te devolvería input(). Así tu salida tiene que coincidir con la del enunciado al carácter. Si quieres, después cambia esos textos por input() y prueba con otros valores.

Ejercicio 1 (básico): El recibo de la compra

Escribe un programa que calcule el recibo de tres productos: el subtotal, el IVA (21 %) y el total con IVA. Los datos de partida son:

ProductoPrecio (como texto)
Leche"1.20"
Pan"0.90"
Café"3.50"

La salida tiene que ser esta:

--- Recibo ---
Leche: 1.2 €
Pan: 0.9 €
Café: 3.5 €
Subtotal: 5.6 €
IVA (21%): 1.18 €
Total: 6.78 €

Nombres de producto en str y precios en float. El IVA es el subtotal por 0.21. Redondea el IVA y el total a 2 decimales con round(), y usa f-strings para cada línea del recibo. Fíjate en que 1.20 sale como 1.2: es lo normal al imprimir un float.

Ejercicio 2 (básico): Conversor de temperatura

Escribe un programa que convierta una temperatura en grados Celsius (que llega como el texto "100") a Fahrenheit y a Kelvin, con estas fórmulas:

  • Fahrenheit = Celsius × 9 / 5 + 32
  • Kelvin = Celsius + 273.15

La salida tiene que ser:

100.0 °C equivale a:
→ 212.0 °F
→ 373.15 K

Basta una variable float para los grados Celsius (float("100") da 100.0, por eso la salida dice 100.0 °C). Calcula cada conversión en su propia variable para que el código se lea bien. La flecha → es un carácter normal: escríbela dentro del texto.

Ejercicio 3 (intermedio): Calculador de propinas

Escribe un programa que divida la cuenta de un restaurante entre varias personas incluyendo la propina. Los datos llegan como texto: importe de la cuenta "85.50", porcentaje de propina "10" y número de personas "4". La salida:

--- División de cuenta ---
Subtotal: 85.5 €
Propina (10%): 8.55 €
Total con propina: 94.05 €
Cada persona paga: 23.51 €

float para el importe y el porcentaje, int para las personas (no existe media persona). La propina es cuenta * porcentaje / 100. Divide el total entre las personas al final y redondea cada importe a 2 decimales. El 10% de la línea de la propina sale sin .0: piensa qué conversión lo consigue.

Ejercicio desafío: Ficha de estudiante completa

Este ejercicio mezcla todo el tema. Con estos datos de partida:

DatoValor (como texto o literal)
Nombre, carrera, universidad"Sergio Medina", "GCID", "ULPGC"
Edad"20"
Asignaturas y notasFP1 "7.5" · Estadística "8" · Matemáticas "6.5" · Bases de datos "4"

genera esta ficha, con la nota media redondeada a 2 decimales, la nota más alta y la más baja (con max() y min()), si está aprobado (media ≥ 5) y los créditos aproximados (asignaturas aprobadas × 6):

=============================
     FICHA DE ESTUDIANTE
=============================
Nombre: Sergio Medina
Edad: 20 años
Carrera: GCID
Universidad: ULPGC
-----------------------------
Asignatura 1 — FP1: 7.5
Asignatura 2 — Estadística: 8.0
Asignatura 3 — Matemáticas: 6.5
Asignatura 4 — Bases de datos: 4.0
-----------------------------
Nota media: 6.5
Nota más alta: 8.0
Nota más baja: 4.0
¿Aprobado?: True
Créditos estimados: 18
=============================

str para los textos, int para la edad y float para las notas (float("8") da 8.0, por eso sale así en la ficha). max(a, b, c, d) y min(...) funcionan con variables sueltas. Para contar aprobadas sin if, recuerda que una comparación da True o False… y que True vale 1. Las líneas de = y - se hacen multiplicando un texto: "=" * 29.

¿Qué falla aquí?

Tres fragmentos cortos con un fallo cada uno. Antes de leer la explicación, predice qué hace cada uno: ¿da error? ¿cuál? ¿o funciona pero da algo raro?

Fragmento 1: el total del recibo

total = 6.78
print("Total: " + total + " €")

¿Lo tienes? Esta es la salida real:

Traceback (most recent call last):
  File "recibo.py", line 2, in <module>
    print("Total: " + total + " €")
          ~~~~~~~~~~^~~~~~~
TypeError: can only concatenate str (not "float") to str

total es un float (6.78) y "Total: " es un str. Para Python, + entre un texto y otra cosa solo puede significar «pegar», y solo sabe pegar textos con textos. Los ~~~~^~~~ del traceback marcan exactamente la operación que falla: "Total: " + total.

Construir mensajes con + mezclando textos y números. Es mi error del gancho, y aparece sobre todo en la última línea de un programa, cuando ya crees que has terminado.

El arreglo, con las dos formas posibles:

total = 6.78
print("Total: " + str(total) + " €")   # opción 1: convertir a texto
print(f"Total: {total} €")             # opción 2 (mejor): f-string
Total: 6.78 €
Total: 6.78 €

Con f-strings no tienes que convertir nada: f"Total: {total} €" mete el número en el hueco sea del tipo que sea. Es más corto, más legible y no falla.

Fragmento 2: la propina con decimales

propina_txt = "12.5"     # lo que devuelve input() si tecleas 12.5
propina_pct = int(propina_txt)
print(propina_pct)

Salida real:

Traceback (most recent call last):
  File "propinas.py", line 2, in <module>
    propina_pct = int(propina_txt)
ValueError: invalid literal for int() with base 10: '12.5'

El usuario ha dejado un 12,5 % de propina y el programa explota en la conversión. int() solo acepta textos que sean enteros: "12.5" tiene un punto, así que da ValueError: invalid literal for int() with base 10. Funcionaba con "10", y por eso el fallo no se ve hasta que alguien escribe un decimal.

Elegir int() mirando el ejemplo del enunciado en lugar de pensar qué valores puede tener el dato. Un porcentaje, una nota o un precio pueden llevar decimales.

El arreglo:

propina_txt = "12.5"
propina_pct = float(propina_txt)   # float acepta "12.5" (y también "10")
print(propina_pct)
12.5

Si lo que quieres es un entero a partir de un texto con decimales, haz dos pasos: int(float("12.5")) da 12. Pero piénsalo antes: aquí perderías medio punto de propina.

Fragmento 3: la suma que no da 3.30

leche = 1.10
pan = 2.20
subtotal = leche + pan
print("Subtotal:", subtotal)
print(subtotal == 3.30)

Salida real:

Subtotal: 3.3000000000000003
False

Este no da error, y por eso es el más traicionero. 1,10 + 2,20 = 3,30 a mano, pero en binario ni 1.10 ni 2.20 se guardan exactos, y la suma sale 3.3000000000000003. Por eso la comparación con 3.30 da False. Es el mismo fenómeno que 0.1 + 0.2 en la teoría.

Comparar el resultado de una cuenta con decimales usando ==. Puede salir False aunque «a mano» sea igual.

El arreglo es redondear a céntimos antes de enseñar o comparar:

leche = 1.10
pan = 2.20
subtotal = round(leche + pan, 2)   # redondear a céntimos antes de enseñar o comparar
print("Subtotal:", subtotal)
print(subtotal == 3.30)
Subtotal: 3.3
True

Para dinero, redondea a 2 decimales en cuanto termines cada cuenta (round(x, 2)) y enséñalo con :.2f. En el tema de operadores verás más formas de comparar decimales con seguridad.

Soluciones comentadas

Solución del ejercicio 1

# Solución del ejercicio 1 · El recibo de la compra
# Los precios llegan como texto, como si los hubieras leído con input()
p1_nombre = "Leche"
p1_precio = float("1.20")        # float: el dinero lleva decimales
p2_nombre = "Pan"
p2_precio = float("0.90")
p3_nombre = "Café"
p3_precio = float("3.50")

subtotal = p1_precio + p2_precio + p3_precio
iva = round(subtotal * 0.21, 2)      # 21 % del subtotal, redondeado a céntimos
total = round(subtotal + iva, 2)

print("--- Recibo ---")
print(f"{p1_nombre}: {p1_precio} €")
print(f"{p2_nombre}: {p2_precio} €")
print(f"{p3_nombre}: {p3_precio} €")
print(f"Subtotal: {round(subtotal, 2)} €")
print(f"IVA (21%): {iva} €")
print(f"Total: {total} €")

Por qué está hecho así:

  • Cada precio se convierte al leerlo (float("1.20")), no justo antes de sumar. Así, a partir de esa línea, la variable ya es un número y no hay que acordarse de nada más.
  • Comprobación a mano: 1,20 + 0,90 + 3,50 = 5,60; 5,60 × 0,21 = 1,176, que redondeado a céntimos es 1,18; 5,60 + 1,18 = 6,78. Coincide con la salida.
  • round(subtotal, 2) en el print: el subtotal sale 5.6 y no 5.6000000000000005 porque, con estos precios concretos, la suma sale exacta. Redondearlo al enseñarlo es una protección: con otros precios podría no salir exacta (como en el fragmento 3).
  • Se redondea el IVA antes de sumarlo, como en un ticket real: el IVA que te cobran ya está en céntimos. Si sumaras el IVA sin redondear (1,176), el total sería 6,776 → 6,78; aquí da lo mismo, pero no siempre.

Solución del ejercicio 2

# Solución del ejercicio 2 · Conversor de temperatura
celsius_txt = "100"              # lo que llegaría de input()
celsius = float(celsius_txt)     # float: una temperatura puede ser 36.6

fahrenheit = celsius * 9 / 5 + 32
kelvin = celsius + 273.15

print(f"{celsius} °C equivale a:")
print(f"→ {fahrenheit} °F")
print(f"→ {kelvin} K")

Por qué está hecho así:

  • float y no int para los grados, porque una temperatura puede ser 36.6. Por eso la salida dice 100.0 °C: es un float.
  • Comprobación a mano: 100 × 9 = 900; 900 / 5 = 180; 180 + 32 = 212. Y 100 + 273,15 = 373,15.
  • celsius * 9 / 5 + 32 sin paréntesis funciona porque * y / van antes que +, y entre ellas de izquierda a derecha. El enunciado original lo escribía (Celsius × 9/5) + 32, y los paréntesis también valen: dan lo mismo y a veces se leen mejor.
  • Una variable por conversión (fahrenheit, kelvin): el código se lee como la fórmula y, si una sale mal, sabes cuál mirar.

Solución del ejercicio 3

# Solución del ejercicio 3 · Calculador de propinas
cuenta = float("85.50")          # euros: float
propina_pct = float("10")        # porcentaje: float, por si alguien deja un 12.5 %
personas = int("4")              # personas: int, no existe media persona

propina = round(cuenta * propina_pct / 100, 2)
total = round(cuenta + propina, 2)
por_persona = round(total / personas, 2)   # redondear SOLO al final

print("--- División de cuenta ---")
print(f"Subtotal: {cuenta} €")
print(f"Propina ({int(propina_pct)}%): {propina} €")
print(f"Total con propina: {total} €")
print(f"Cada persona paga: {por_persona} €")

Por qué está hecho así:

  • Tres tipos para tres datos: float para el dinero y el porcentaje (alguien puede dejar un 12,5 %, como en el fragmento 2) e int para las personas.
  • int(propina_pct) en el texto: propina_pct es 10.0, y escrito tal cual saldría Propina (10.0%). int() corta el .0 para enseñarlo bonito. Ojo: con un 12,5 % saldría 12%; para ese caso habría que enseñar el float.
  • Traza de las cuentas:
PasoCuentaResultado
propina85,50 × 10 / 100 = 8,558.55
total85,50 + 8,55 = 94,0594.05
por_persona94,05 / 4 = 23,5125 → 2 decimales23.51
  • El redondeo del último paso pierde 0,0025 € por persona: entre los cuatro faltaría un céntimo para llegar a 94,05. En un restaurante de verdad, alguien pondría ese céntimo; en el programa, es una buena pregunta para pensar.

Solución del ejercicio desafío

# Solución del ejercicio desafío · Ficha de estudiante completa
nombre = "Sergio Medina"
edad = int("20")                 # la edad es un entero
carrera = "GCID"
universidad = "ULPGC"

a1_nombre = "FP1"
a1_nota = float("7.5")
a2_nombre = "Estadística"
a2_nota = float("8")             # float("8") da 8.0
a3_nombre = "Matemáticas"
a3_nota = float("6.5")
a4_nombre = "Bases de datos"
a4_nota = float("4")

media = round((a1_nota + a2_nota + a3_nota + a4_nota) / 4, 2)
nota_max = max(a1_nota, a2_nota, a3_nota, a4_nota)
nota_min = min(a1_nota, a2_nota, a3_nota, a4_nota)
aprobado = media >= 5.0
# Cada comparación da True (1) o False (0): sumarlas cuenta las aprobadas
aprobadas = (a1_nota >= 5) + (a2_nota >= 5) + (a3_nota >= 5) + (a4_nota >= 5)
creditos = aprobadas * 6

print("=" * 29)
print("     FICHA DE ESTUDIANTE")
print("=" * 29)
print(f"Nombre: {nombre}")
print(f"Edad: {edad} años")
print(f"Carrera: {carrera}")
print(f"Universidad: {universidad}")
print("-" * 29)
print(f"Asignatura 1 — {a1_nombre}: {a1_nota}")
print(f"Asignatura 2 — {a2_nombre}: {a2_nota}")
print(f"Asignatura 3 — {a3_nombre}: {a3_nota}")
print(f"Asignatura 4 — {a4_nombre}: {a4_nota}")
print("-" * 29)
print(f"Nota media: {media}")
print(f"Nota más alta: {nota_max}")
print(f"Nota más baja: {nota_min}")
print(f"¿Aprobado?: {aprobado}")
print(f"Créditos estimados: {creditos}")
print("=" * 29)

Por qué está hecho así:

  • Cada dato con su tipo: textos como str, la edad como int (se cuenta) y las notas como float (aunque "8" y "4" parezcan enteros, otras notas no lo serán).
  • La media se redondea en la misma línea en que se calcula porque solo se usa para enseñarla y compararla. Comprobación: 7,5 + 8 + 6,5 + 4 = 26; 26 / 4 = 6,5.
  • max() y min() reciben las cuatro notas sueltas y devuelven la mayor (8.0) y la menor (4.0). No hace falta comparar a mano.
  • Contar aprobadas sin if es el truco del ejercicio. Cada comparación nota >= 5 da un bool, y como True vale 1 y False vale 0, sumarlas cuenta las aprobadas. Lo ves en el dibujo y en la traza:
Contar aprobadas sumando booleanosLas notas 7.5, 8.0, 6.5 y 4.0 se comparan con 5: dan True, True, True y False, que valen 1, 1, 1 y 0. La suma da 3 aprobadas y 3 por 6 da 18 créditos.FP17.5>= 5Truevale 1Estadística8.0>= 5Truevale 1Matemáticas6.5>= 5Truevale 1Bases de datos4.0>= 5Falsevale 0aprobadas = 1 + 1 + 1 + 0 = 3creditos = 3 * 6 = 18
True vale 1 y False vale 0: sumar las cuatro comparaciones cuenta las aprobadas sin necesidad de if.
ComparaciónResultadoVale
a1_nota >= 5 (7.5)True1
a2_nota >= 5 (8.0)True1
a3_nota >= 5 (6.5)True1
a4_nota >= 5 (4.0)False0
suma3 → 3 × 6 = 18 créditos
  • Los paréntesis de (a1_nota >= 5) + … son obligatorios. Sin ellos, Python haría primero las sumas (5 + a2_nota…) y luego compararía, y el resultado no tendría nada que ver.
  • "=" * 29 repite el texto 29 veces: es la misma operación str * int que daba "555" en la teoría, usada para algo útil.

Cuestionario tipo examen

Ahora ponte a prueba como en el examen. Los cuestionarios de FP1 son así: 15 preguntas en 20 minutos (16 en 30 en el de Secuencias), casi todas de respuesta única (cada fallo resta un tercio de lo que vale la pregunta) y muchas de «¿qué imprime este código?», con algún hueco, relacionar o verdadero o falso. Aquí tienes 13 preguntas originales sobre variables y tipos de datos. Contesta sin ejecutar nada, pulsa Comprobar y lee la explicación de cada una. Estas preguntas son también el banco del simulacro de teoría de FP1, que las mezclará con las de los demás temas.

Pregunta 1Única

¿Qué es un algoritmo?

  1. Una secuencia finita de pasos precisos que resuelve un problema
  2. Un programa escrito en Python
  3. Una parte del procesador
  4. Un error que se repite en un bucle
Solución

Respuesta: Una secuencia finita de pasos precisos que resuelve un problema

Un algoritmo no necesita ordenador: «para hacer la multiplicación 4 × 3, suma 4 tres veces» ya es un algoritmo. Programar es traducir algoritmos a un lenguaje que el ordenador entienda.

Pregunta 2Respuesta corta

¿Qué imprime este programa? Escribe la salida exacta.

x = 5
y = x
x = 8
print(y)
Solución

Respuesta: 5

y = x copia en y el valor que tenía x en ese momento (5). Cambiar x después no toca a y: los números no se «enlazan». Sale 5.

Pregunta 3Única

¿Qué tipo tiene el resultado de type(3 / 1)?

  1. float
  2. int
  3. str
  4. bool
Solución

Respuesta: float

En Python 3, / es la división «de verdad» y siempre devuelve float: 3 / 1 vale 3.0. Si quieres un entero, usa //.

Pregunta 4Relacionar

Relaciona cada valor con su tipo:

42
4.2
'42'
False

Definiciones:

  • str
  • int
  • bool
  • float
  • list
Solución
  • 42 → int
  • 4.2 → float
  • '42' → str
  • False → bool

Sin decimales es int; con punto decimal, float; entre comillas es texto (str) aunque dentro haya cifras; y True/False son bool. list sobra: ninguno va entre corchetes.

Pregunta 5Única

¿Qué pasa al ejecutar esta línea?

edad = input("Edad: ")
print(edad + 1)
  1. Da un error TypeError, porque input devuelve un texto
  2. Imprime la edad más uno
  3. Imprime la edad seguida de un 1
  4. Python convierte la edad a número solo
Solución

Respuesta: Da un error TypeError, porque input devuelve un texto

input() siempre devuelve un str, aunque escribas 18. Sumar un str y un int no tiene sentido para Python y lanza TypeError. La solución es int(input(...)).

Pregunta 6Verdadero o falso

Sobre los nombres de las variables en Python:

  1. nota_final es un nombre válido.
  2. 2nota es un nombre válido.
  3. Nota y nota son dos variables distintas.
  4. for se puede usar como nombre de variable.
Solución
  • V — nota_final es un nombre válido.
  • F — 2nota es un nombre válido.
  • V — Nota y nota son dos variables distintas.
  • F — for se puede usar como nombre de variable.

Un nombre puede tener letras, cifras y _, pero no puede empezar por una cifra. Python distingue mayúsculas de minúsculas. Y las palabras reservadas (for, if, while, def…) no se pueden usar como nombres.

Pregunta 7Respuesta corta

¿Qué imprime este programa? Escribe la salida exacta.

a, b = 3, 10
a, b = b, a
print(a - b)
Solución

Respuesta: 7

a, b = b, a intercambia los valores en una sola línea: ahora a vale 10 y b vale 3. Así que a - b es 10 − 3 = 7.

Pregunta 8Única

¿Qué valor da int(7.9)?

  1. 7
  2. 8
  3. 7.9
  4. Un error
Solución

Respuesta: 7

int() trunca: se queda con la parte entera y tira los decimales. round(7.9) sí daría 8. Ojo con los negativos: int(-7.9) es -7.

Pregunta 9Rellenar huecos

Completa el programa para que pida un número con decimales y lo imprima multiplicado por 2:

precio = ____(____('Precio: ')) y después print(precio * 2).

Palabras:

  • str
  • input
  • int
  • print
  • float
Solución

precio = float(input('Precio: ')) y después print(precio * 2).

input lee el texto y float lo convierte a número con decimales. Con int fallaría si escribes 2.5, y con str seguirías teniendo un texto.

Pregunta 10Única

¿Qué diferencia hay entre un lenguaje compilado y uno interpretado como Python?

  1. El compilado se traduce entero a código máquina antes de ejecutarse; el interpretado se va traduciendo mientras se ejecuta
  2. El interpretado no necesita ordenador
  3. El compilado no puede tener errores
  4. Ninguna: son dos nombres para lo mismo
Solución

Respuesta: El compilado se traduce entero a código máquina antes de ejecutarse; el interpretado se va traduciendo mientras se ejecuta

La CPU solo entiende código máquina. Un compilador traduce el programa entero de una vez y produce un ejecutable; un intérprete (como python3) va leyendo y ejecutando instrucción a instrucción. Por eso en Python un error de la línea 20 no aparece hasta que el programa llega allí.

Pregunta 11Única

¿Qué imprime este programa?

nombre = "Ana"
print("Hola,", nombre, "!")
  1. Hola, Ana !
  2. Hola,Ana!
  3. Hola, nombre !
  4. Da error porque mezcla textos y variables
Solución

Respuesta: Hola, Ana !

print escribe sus argumentos separados por un espacio (sep=' ' por defecto) y acaba con un salto de línea (end='\n'). Por eso queda un espacio antes de la exclamación.

Pregunta 12Respuesta corta

¿Qué imprime este programa? Escribe la salida exacta.

x = 4
x = x * 2
x = x + 1
print(x)
Solución

Respuesta: 9

Cada asignación usa el valor anterior: 4 → 4 × 2 = 8 → 8 + 1 = 9. x = x * 2 no es una ecuación: significa «calcula x * 2 y guárdalo en x».

Pregunta 13Única

¿Qué valor tiene len('3.14')?

  1. 4
  2. 3
  3. 3.14
  4. Un error, porque es un número
Solución

Respuesta: 4

Las comillas mandan: '3.14' es un str, y len cuenta sus caracteres, punto incluido. Con el número 3.14 (sin comillas), len daría TypeError.

Míralo paso a paso en Python Tutor

Abre Python Tutor, elige Python 3 y pega este resumen del desafío. Es el mejor sitio para ver que un bool se puede sumar:

a1_nota = 7.5
a2_nota = 8.0
a3_nota = 6.5
a4_nota = 4.0

aprueba1 = a1_nota >= 5      # True
aprueba4 = a4_nota >= 5      # False
aprobadas = (a1_nota >= 5) + (a2_nota >= 5) + (a3_nota >= 5) + aprueba4
creditos = aprobadas * 6

total = "Créditos: " + str(creditos)
print(aprueba1, aprueba4, aprobadas, total)

Su salida:

True False 3 Créditos: 18

Qué observar, avanzando con Next:

  1. Tras aprueba1 = a1_nota >= 5, la variable aparece con el valor True, sin comillas: una comparación crea un bool.
  2. Tras aprueba4, vale False, porque 4.0 no llega a 5.
  3. Al calcular aprobadas, aparece un 3, un int. Se han sumado tres True (1 cada uno) y un False (0): el resultado ya no es un bool.
  4. En creditos, 3 × 6 = 18.
  5. En total, fíjate en el str(creditos): sin él, "Créditos: " + creditos daría el TypeError del fragmento 1. Pruébalo quitándolo y verás a Python Tutor marcar la línea en rojo.

Chuletario: variables y tipos de datos en Python

Lo esencial en 30 segundos: una variable es un nombre que apunta a un objeto, y el tipo lo lleva el objeto. input() devuelve siempre texto, así que conviértelo al leer. int para lo que se cuenta, float para lo que se mide, str para el texto y bool para sí o no. Los float son aproximados: redondea para enseñar.

Tipos y conversiones

Quiero…CódigoResultado
Saber el tipotype(7.5)<class 'float'>
Texto → enteroint("19")19
Texto → decimalfloat("7.5")7.5
Texto con decimales → enteroint(float("7.5"))7
Número → textostr(19)"19"
Quitar decimales (cortar)int(7.9)7
Redondearround(7.9) / round(7.166, 2)8 / 7.17
Leer un número del tecladofloat(input("Nota: "))un float
Aceptar coma decimalfloat("1,78".replace(",", "."))1.78

Textos y números

Quiero…CódigoResultado
Sumar números5 + 510
Pegar textos"5" + "5""55"
Repetir un texto"=" * 5"====="
Mezclar texto y númerof"Total: {6.78} €""Total: 6.78 €"
Dos decimales en un textof"{183.20000000000002:.2f}""183.20"
Contar aprobadas(7.5 >= 5) + (4.0 >= 5)1

Plantillas de los ejercicios

# Leer, convertir, calcular, enseñar
precio = float("3.50")                 # o float(input("Precio: "))
iva = round(precio * 0.21, 2)
print(f"IVA: {iva} €")

# Contar con booleanos
aprobadas = (nota1 >= 5) + (nota2 >= 5) + (nota3 >= 5)

# Dinero con dos decimales
print(f"Cada plazo: {total / 3:.2f} €")

Síntoma / causa probable

SíntomaCausa probable
TypeError: can only concatenate str (not "int") to strPegas un número a un texto con +: usa una f-string o str()
TypeError: unsupported operand type(s)Operas con un texto que no has convertido ("19" / 2)
ValueError: invalid literal for int()int() con un texto con decimales o letras: usa float()
ValueError: could not convert string to floatDecimal con coma, o un texto que no es un número
NameError: name '…' is not definedNombre mal escrito, mayúscula distinta o true en lugar de True
El resultado sale con cifras pegadas (55, 78.5)Estás sumando textos: falta convertir
Sale 3.3000000000000003Es un float aproximado: redondea para enseñar
Sale un resultado absurdo sin error (IMC 0.0)Unidades o paréntesis: haz la cuenta a mano

Antes de entregar, pregúntate:

  1. ¿He convertido cada dato que llega de input() al tipo correcto?
  2. ¿He usado float para todo lo que puede llevar decimales?
  3. ¿Mis mensajes mezclan texto y números con f-strings y no con +?
  4. ¿He comprobado a mano al menos un resultado?

¿Lo tienes? El siguiente tema es operadores en Python: división entera, resto, potencias, comparaciones y lógica, que vas a usar en todos los programas a partir de ahora.

Sigue aprendiendoTodos los artículos de Python

¿Te ha servido este artículo? Así puedes apoyar SergioLearns →

Sigue aprendiendo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *