Condicionales en Python — práctica real con 3 programas en VS Code
Los condicionales en Python práctica real es lo que toca ahora. En el artículo anterior vimos la teoría de los condicionales en Python. Ahora toca escribir código real.
En este artículo construimos tres programas desde cero en VS Code usando if, elif y else en situaciones reales: un validador de formulario de registro, un sistema de descuentos por nivel de cliente y un clasificador de notas con menú. Cada programa empieza simple y va ganando complejidad, igual que en los ejercicios de FP1.
Crea una carpeta llamada practica_condicionales y un archivo separado para cada programa.
Tabla de Contenidos
Condicionales en Python práctica — Programa 1: Validador de registro
Este programa simula la validación básica que hace cualquier web cuando te registras. Crea el archivo validador.py.
Versión simple primero:
# Validador de registro — versión simple
print("=== REGISTRO DE USUARIO ===\n")
usuario = input("Nombre de usuario: ")
edad = int(input("Edad: "))
contrasena = input("Contraseña: ")
if len(usuario) < 3:
print("Error: el usuario debe tener al menos 3 caracteres")
elif edad < 18:
print("Error: debes ser mayor de 18 años")
elif len(contrasena) < 6:
print("Error: la contraseña debe tener al menos 6 caracteres")
else:
print("Registro completado con éxito")
```
Resultado con datos incorrectos:
```
=== REGISTRO DE USUARIO ===
Nombre de usuario: Jo
Edad: 20
Contraseña: 1234
Error: el usuario debe tener al menos 6 caracteres
Funciona pero solo detecta el primer error. La versión mejorada detecta todos los errores a la vez y da feedback completo:
# Validador de registro — versión mejorada
print("=== REGISTRO DE USUARIO ===\n")
usuario = input("Nombre de usuario: ")
edad = int(input("Edad: "))
contrasena = input("Contraseña: ")
email = input("Email: ")
errores = 0
print("\n--- Resultado de la validación ---")
if len(usuario) < 3:
print("✗ Usuario demasiado corto (mínimo 3 caracteres)")
errores += 1
else:
print("✓ Usuario válido")
if edad < 18:
print("✗ Debes ser mayor de 18 años")
errores += 1
else:
print("✓ Edad válida")
if len(contrasena) < 6:
print("✗ Contraseña demasiado corta (mínimo 6 caracteres)")
errores += 1
elif not any(c.isdigit() for c in contrasena):
print("✗ La contraseña debe contener al menos un número")
errores += 1
else:
print("✓ Contraseña válida")
if "@" not in email or "." not in email:
print("✗ Email no válido")
errores += 1
else:
print("✓ Email válido")
print(f"\n{'Registro completado' if errores == 0 else f'Registro fallido — {errores} error/es encontrado/s'}")
```
Resultado:
```
=== REGISTRO DE USUARIO ===
Nombre de usuario: Jo
Edad: 20
Contraseña: abc
Email: sergio@sergiolearns.com
--- Resultado de la validación ---
✗ Usuario demasiado corto (mínimo 3 caracteres)
✓ Edad válida
✗ Contraseña demasiado corta (mínimo 6 caracteres)
✓ Email válido
Registro fallido — 2 error/es encontrado/s
Fíjate en el uso del operador ternario al final para el mensaje de resultado, una sola línea en vez de un if/else completo. También usamos not in para comprobar si @ o . no están en el email, es una forma muy pythónica de hacer comprobaciones de texto.
Programa 2 — Sistema de descuentos por nivel de cliente
Este programa clasifica clientes según su gasto anual y aplica descuentos distintos. Crea el archivo descuentos_cliente.py.
# Sistema de descuentos por nivel de cliente
print("=== SISTEMA DE FIDELIZACIÓN ===\n")
nombre = input("Nombre del cliente: ")
gasto_anual = float(input("Gasto anual (€): "))
es_socio = input("¿Es socio? (s/n): ").lower() == "s"
# Determinar nivel y descuento base
if gasto_anual >= 5000:
nivel = "Platinum"
descuento = 20
elif gasto_anual >= 2000:
nivel = "Gold"
descuento = 15
elif gasto_anual >= 500:
nivel = "Silver"
descuento = 10
else:
nivel = "Básico"
descuento = 5
# Descuento extra por ser socio
if es_socio:
descuento_extra = 5
descuento_total = descuento + descuento_extra
else:
descuento_extra = 0
descuento_total = descuento
# Calcular ahorro
ahorro_anual = round(gasto_anual * descuento_total / 100, 2)
gasto_con_descuento = round(gasto_anual - ahorro_anual, 2)
# Resultado
print(f"\n--- Ficha de {nombre} ---")
print(f"Gasto anual: {gasto_anual} €")
print(f"Nivel: {nivel}")
print(f"Descuento base: {descuento}%")
if es_socio:
print(f"Descuento socio: +{descuento_extra}%")
print(f"Descuento total: {descuento_total}%")
print(f"Ahorro: {ahorro_anual} €")
print(f"Pagaría: {gasto_con_descuento} €")
# Mensaje personalizado según nivel
if nivel == "Platinum":
print("\n⭐ Cliente Platinum — acceso a eventos exclusivos")
elif nivel == "Gold":
print("\n🥇 Cliente Gold — envío gratuito en todos los pedidos")
elif nivel == "Silver":
print("\n🥈 Cliente Silver — acceso anticipado a rebajas")
else:
print("\nℹ️ Gasta más de 500€ al año para subir a nivel Silver")
```
Resultado:
```
=== SISTEMA DE FIDELIZACIÓN ===
Nombre del cliente: Sergio
Gasto anual (€): 2500
¿Es socio? (s/n): s
--- Ficha de Sergio ---
Gasto anual: 2500.0 €
Nivel: Gold
Descuento base: 15%
Descuento socio: +5%
Descuento total: 20%
Ahorro: 500.0 €
Pagaría: 2000.0 €
🥇 Cliente Gold — envío gratuito en todos los pedidos
Aquí hay un patrón muy útil que verás mucho en FP1, usar if/elif/else para asignar valores a variables (nivel, descuento) y luego usar esas variables en el resto del programa. Es mucho más limpio que repetir condiciones.
Programa 3 — Clasificador de notas con menú
El más completo de los tres. Crea el archivo clasificador_notas.py. Combina un menú de selección con condicionales para ofrecer diferentes análisis:
# Clasificador de notas con menú
print("=== CLASIFICADOR DE NOTAS ===")
print("1. Clasificar una nota")
print("2. Comparar dos notas")
print("3. Calcular nota mínima necesaria")
opcion = int(input("\nElige una opción (1-3): "))
if opcion == 1:
nota = float(input("\nIntroduce la nota (0-10): "))
if nota < 0 or nota > 10:
print("Error: la nota debe estar entre 0 y 10")
elif nota >= 9:
calificacion = "Sobresaliente"
emoji = "🏆"
elif nota >= 7:
calificacion = "Notable"
emoji = "⭐"
elif nota >= 5:
calificacion = "Aprobado"
emoji = "✓"
elif nota >= 3:
calificacion = "Suspenso"
emoji = "✗"
else:
calificacion = "Muy deficiente"
emoji = "❌"
if nota >= 0 and nota <= 10:
print(f"\n{emoji} Nota {nota} — {calificacion}")
if nota < 5:
print(f"Necesitas {round(5 - nota, 1)} puntos más para aprobar")
else:
print(f"Tienes {round(nota - 5, 1)} puntos sobre el aprobado")
elif opcion == 2:
nota1 = float(input("\nNota 1: "))
nota2 = float(input("Nota 2: "))
if nota1 > nota2:
print(f"\nLa nota 1 ({nota1}) es mayor por {round(nota1 - nota2, 1)} puntos")
elif nota2 > nota1:
print(f"\nLa nota 2 ({nota2}) es mayor por {round(nota2 - nota1, 1)} puntos")
else:
print(f"\nAmbas notas son iguales ({nota1})")
media = round((nota1 + nota2) / 2, 2)
print(f"Media: {media} — {'Aprobado' if media >= 5 else 'Suspenso'}")
elif opcion == 3:
notas_actuales = int(input("\n¿Cuántas notas tienes ya?: "))
suma = 0
for i in range(notas_actuales):
nota = float(input(f"Nota {i+1}: "))
suma += nota
total_asignaturas = int(input("¿Cuántas asignaturas en total?: "))
nota_minima = round((5 * total_asignaturas - suma) / (total_asignaturas - notas_actuales), 2)
if nota_minima <= 0:
print("\n✓ Ya tienes el aprobado asegurado")
elif nota_minima <= 10:
print(f"\nNecesitas sacar al menos {nota_minima} en las asignaturas restantes")
else:
print("\n✗ Matemáticamente ya no es posible aprobar con media 5")
else:
print("Opción no válida — elige entre 1 y 3")
```
Resultado con opción 1:
```
=== CLASIFICADOR DE NOTAS ===
1. Clasificar una nota
2. Comparar dos notas
3. Calcular nota mínima necesaria
Elige una opción (1-3): 1
Introduce la nota (0-10): 6.5
✓ Nota 6.5 — Aprobado
Tienes 1.5 puntos sobre el aprobado
Este programa usa ya un bucle for en la opción 3, que es el siguiente tema que veremos. No te preocupes si no lo entiendes todavía, lo importante ahora son los condicionales.
El patrón que más usarás en FP1
De todo lo que hemos visto, este es el patrón que aparece más en los ejercicios de clase:
# Patrón: clasificar con if/elif/else y guardar en variable
valor = float(input("Introduce un valor: "))
if valor >= umbral_alto:
categoria = "Alta"
elif valor >= umbral_medio:
categoria = "Media"
else:
categoria = "Baja"
# Usar la variable después
print(f"Categoría: {categoria}")
Apréndetelo bien, lo verás en notas, temperaturas, edades, precios y muchísimas situaciones más.
Resumen y siguiente paso
En este artículo practicaste los condicionales en Python con tres programas reales. Usaste if/elif/else para clasificar, validar y comparar datos, el operador ternario para resultados en una línea, not in para comprobar texto, y el patrón de asignar valores con condicionales.
En el siguiente artículo de esta serie encontrarás ejercicios propuestos con solución, incluyendo el clásico juego de adivinar el número.
Python conditionals practice — 3 real programs in VS Code
In the previous article we covered Python conditionals theory. Now let’s write real code. Three programs, each building on the last, registration validator, customer discount system and grade classifier with menu.
Create a folder called conditionals_practice and a separate file for each program.
Program 1 — Registration form validator
Simple version first:
# Registration validator — simple version
print("=== USER REGISTRATION ===\n")
username = input("Username: ")
age = int(input("Age: "))
password = input("Password: ")
if len(username) < 3:
print("Error: username must be at least 3 characters")
elif age < 18:
print("Error: you must be 18 or older")
elif len(password) < 6:
print("Error: password must be at least 6 characters")
else:
print("Registration successful")
Improved version, catches all errors at once:
# Registration validator — improved version
print("=== USER REGISTRATION ===\n")
username = input("Username: ")
age = int(input("Age: "))
password = input("Password: ")
email = input("Email: ")
errors = 0
print("\n--- Validation results ---")
if len(username) < 3:
print("✗ Username too short (minimum 3 characters)")
errors += 1
else:
print("✓ Valid username")
if age < 18:
print("✗ Must be 18 or older")
errors += 1
else:
print("✓ Valid age")
if len(password) < 6:
print("✗ Password too short (minimum 6 characters)")
errors += 1
elif not any(c.isdigit() for c in password):
print("✗ Password must contain at least one number")
errors += 1
else:
print("✓ Valid password")
if "@" not in email or "." not in email:
print("✗ Invalid email")
errors += 1
else:
print("✓ Valid email")
print(f"\n{'Registration complete' if errors == 0 else f'Registration failed — {errors} error(s) found'}")
Program 2 — Customer discount system
# Customer discount system
print("=== LOYALTY SYSTEM ===\n")
name = input("Customer name: ")
annual_spend = float(input("Annual spend (€): "))
is_member = input("Member? (y/n): ").lower() == "y"
if annual_spend >= 5000:
tier = "Platinum"
discount = 20
elif annual_spend >= 2000:
tier = "Gold"
discount = 15
elif annual_spend >= 500:
tier = "Silver"
discount = 10
else:
tier = "Basic"
discount = 5
extra = 5 if is_member else 0
total_discount = discount + extra
savings = round(annual_spend * total_discount / 100, 2)
net_spend = round(annual_spend - savings, 2)
print(f"\n--- {name}'s profile ---")
print(f"Annual spend: {annual_spend} €")
print(f"Tier: {tier}")
print(f"Base discount: {discount}%")
if is_member:
print(f"Member bonus: +{extra}%")
print(f"Total discount: {total_discount}%")
print(f"Savings: {savings} €")
print(f"Net spend: {net_spend} €")
if tier == "Platinum":
print("\n⭐ Platinum — exclusive event access")
elif tier == "Gold":
print("\n🥇 Gold — free shipping on all orders")
elif tier == "Silver":
print("\n🥈 Silver — early access to sales")
else:
print("\nℹ️ Spend €500+ annually to reach Silver tier")
Program 3 — Grade classifier with menu
# Grade classifier with menu
print("=== GRADE CLASSIFIER ===")
print("1. Classify a grade")
print("2. Compare two grades")
print("3. Calculate minimum grade needed")
option = int(input("\nChoose option (1-3): "))
if option == 1:
grade = float(input("\nEnter grade (0-10): "))
if grade < 0 or grade > 10:
print("Error: grade must be between 0 and 10")
elif grade >= 9:
classification = "Outstanding"
emoji = "🏆"
elif grade >= 7:
classification = "Good"
emoji = "⭐"
elif grade >= 5:
classification = "Passed"
emoji = "✓"
else:
classification = "Failed"
emoji = "✗"
if 0 <= grade <= 10:
print(f"\n{emoji} Grade {grade} — {classification}")
if grade < 5:
print(f"Need {round(5 - grade, 1)} more points to pass")
else:
print(f"{round(grade - 5, 1)} points above pass mark")
elif option == 2:
grade1 = float(input("\nGrade 1: "))
grade2 = float(input("Grade 2: "))
if grade1 > grade2:
print(f"\nGrade 1 ({grade1}) is higher by {round(grade1 - grade2, 1)} points")
elif grade2 > grade1:
print(f"\nGrade 2 ({grade2}) is higher by {round(grade2 - grade1, 1)} points")
else:
print(f"\nBoth grades are equal ({grade1})")
average = round((grade1 + grade2) / 2, 2)
print(f"Average: {average} — {'Passed' if average >= 5 else 'Failed'}")
elif option == 3:
current_grades = int(input("\nHow many grades do you have?: "))
total = 0
for i in range(current_grades):
grade = float(input(f"Grade {i+1}: "))
total += grade
total_subjects = int(input("Total subjects?: "))
min_needed = round((5 * total_subjects - total) / (total_subjects - current_grades), 2)
if min_needed <= 0:
print("\n✓ Pass already secured")
elif min_needed <= 10:
print(f"\nNeed at least {min_needed} in remaining subjects")
else:
print("\n✗ Mathematically impossible to pass with average 5")
else:
print("Invalid option — choose between 1 and 3")
The pattern you’ll use most in FP1
value = float(input("Enter a value: "))
if value >= high_threshold:
category = "High"
elif value >= mid_threshold:
category = "Medium"
else:
category = "Low"
print(f"Category: {category}")
Use this pattern for grades, temperatures, ages, prices — any classification problem.
Summary and next step
In this article, you practiced conditionals in Python with three real programs. You used if/elif/else to sort, validate, and compare data, the ternary operator for single-line results, not in to check text, and the pattern of assigning values with conditionals.
In the next article in this series, you’ll find practice exercises with solutions, including the classic number guessing game.