Parte 25 — Reto del capítulo
MiniFinance con decisiones
Crea una versión que solicite:
Nombre del usuario
Nombre de la cuenta
Moneda
Estado de la cuenta
Saldo inicial
Presupuesto mensual
Meta de ahorro
Una opción de menúEl menú debe incluir:
1. Ver saldo
2. Registrar ingreso
3. Registrar gasto
4. Consultar presupuesto
5. Consultar meta
6. SalirLa aplicación debe:
- Utilizar un nombre predeterminado si el campo está vacío.
- Utilizar
Cuenta principalsi el nombre de la cuenta está vacío. - Aceptar
CRC,USDyJPY. - Utilizar
CRCsi la moneda no es válida. - Convertir una respuesta de sí o no a
bool. - Rechazar un saldo inicial negativo.
- Rechazar un presupuesto negativo.
- Rechazar una meta negativa.
- Rechazar ingresos menores o iguales a cero.
- Rechazar gastos menores o iguales a cero.
- Rechazar gastos mayores que el saldo.
- Rechazar movimientos si la cuenta está inactiva.
- Evitar divisiones entre cero.
- Mostrar el estado del presupuesto.
- Mostrar el progreso de la meta.
- Mostrar una opción inválida cuando corresponda.
Reglas del presupuesto
Utiliza:
100 % o más:
agotado o superado
80 % o más:
casi agotado
50 % o más:
uso moderado
Menos de 50 %:
bajo controlReglas de la meta
Utiliza:
100 % o más:
alcanzada
75 % o más:
muy cerca
50 % o más:
más de la mitad
Mayor que 0 %:
en progreso
0 %:
sin comenzarRequisitos técnicos
Debes utilizar:
- Al menos un
if. - Al menos un
elif. - Al menos un
else. - Al menos una condición con
and. - Al menos una condición con
or. - Al menos una condición con
not. - Al menos una condición anidada.
- Una comprobación con
is Noneois not None. - Una validación antes de dividir.
- Una variable booleana.
- Una opción de menú como
str. - Comentarios para dividir secciones.
- Una pausa final.
Preguntas frecuentes
¿Una condición siempre necesita else?
No.
Esto es válido:
if saldo < 0:
print("Advertencia.")Si la condición es falsa, el programa continúa.
¿Puedo utilizar varios elif?
Sí.
if opcion == "1":
...
elif opcion == "2":
...
elif opcion == "3":
...
elif opcion == "4":
...
else:
...¿Es obligatorio utilizar else después de elif?
No.
Puedes terminar con un elif.
Sin embargo, else suele ser útil para manejar cualquier caso no previsto.
¿Cuántas instrucciones pueden existir dentro de un bloque?
Tantas como necesites, siempre que tengan la indentación correcta.
¿Puedo colocar un if dentro de otro?
Sí.
Eso se conoce como una condición anidada.
¿Debo comparar siempre con True?
No.
En lugar de:
if cuenta_activa == True:utiliza:
if cuenta_activa:¿Cómo compruebo False?
if not cuenta_activa:¿Qué diferencia existe entre varios if y elif?
Varios if pueden ejecutar varios bloques.
Una cadena if, elif, else ejecuta solamente una rama.
¿Por qué importa el orden de los elif?
Python selecciona la primera condición verdadera.
Una condición amplia puede impedir que las condiciones más específicas sean alcanzadas.
¿Puedo validar texto con if?
Sí.
if not nombre:
print("Nombre vacío.")¿Puedo evitar un ValueError con if?
No siempre.
Si escribes:
monto = int(input("Monto: "))la conversión ocurre antes del if.
Necesitaremos try y except para controlar texto no numérico.
¿Cómo evito dividir entre cero?
Comprueba primero el divisor:
if cantidad > 0:
promedio = total / cantidad¿Por qué utilizar is None?
Porque es la forma recomendada de comprobar específicamente la ausencia de valor.
¿Qué es pass?
Es una instrucción que no realiza ninguna acción.
Permite dejar temporalmente un bloque vacío:
if condicion:
pass¿Por qué el menú solo funciona una vez?
Porque el programa se ejecuta de arriba hacia abajo y no contiene una instrucción para repetir el menú.
Eso se resolverá con bucles.
Errores comunes del capítulo
Antes de continuar, comprueba que no estés:
- Olvidando los dos puntos.
- Olvidando la indentación.
- Mezclando espacios y tabulaciones.
- Utilizando
=en lugar de==. - Escribiendo
If,ElseoElse If. - Colocando
elifdespués deelse. - Utilizando más de un
else. - Comparando una opción textual con un número.
- Escribiendo incorrectamente una condición con
or. - Colocando primero una condición demasiado amplia.
- Modificando saldos antes de validar.
- Suponiendo que
ifevita errores de conversión. - Dividiendo antes de comprobar el divisor.
- Comparando
Nonede manera poco clara. - Creando demasiados niveles de condiciones anidadas.
- Confundiendo varios
ifcon una cadenaelif. - Creyendo que
"False"es un booleano falso. - Utilizando un
elsegenérico cuando necesitas explicar el error. - Olvidando que solo se ejecuta la primera rama verdadera.
Lista de comprobación
Antes de continuar, deberías poder marcar:
[ ] Sé qué es una condición.
[ ] Sé utilizar if.
[ ] Sé utilizar else.
[ ] Sé utilizar elif.
[ ] Entiendo la indentación.
[ ] Sé que los dos puntos son obligatorios.
[ ] Puedo comparar valores.
[ ] Puedo utilizar una variable booleana en un if.
[ ] Sé utilizar not.
[ ] Puedo combinar condiciones con and.
[ ] Puedo combinar condiciones con or.
[ ] Entiendo la diferencia entre varios if y elif.
[ ] Sé que el orden de las condiciones importa.
[ ] Puedo detectar un texto vacío.
[ ] Puedo asignar un valor predeterminado.
[ ] Puedo validar números positivos.
[ ] Puedo validar porcentajes.
[ ] Puedo evitar una división entre cero.
[ ] Sé comprobar None con is None.
[ ] Puedo validar un gasto antes de modificar el saldo.
[ ] Puedo registrar un ingreso válido.
[ ] Puedo procesar una opción de menú.
[ ] Puedo crear una condición anidada.
[ ] Puedo reconocer un IndentationError.
[ ] Entiendo que if no evita por sí solo un ValueError.
[ ] MiniFinance puede tomar decisiones.Si alguna respuesta es negativa, vuelve a practicar la sección correspondiente.
Qué aprendiste
En este capítulo aprendiste:
- Qué es una condición.
- Cómo utilizar
if. - Cómo utilizar
else. - Cómo utilizar
elif. - Cómo funciona la indentación.
- Por qué Python utiliza bloques indentados.
- Cómo ejecutar instrucciones según comparaciones.
- Cómo utilizar variables booleanas.
- Cómo utilizar
and,orynot. - Cómo distinguir varios
ifde una cadenaelif. - Por qué el orden de las condiciones importa.
- Cómo detectar textos vacíos.
- Cómo crear valores predeterminados.
- Cómo validar ingresos, gastos, porcentajes y metas.
- Cómo evitar divisiones entre cero.
- Cómo comprobar
None. - Cómo interpretar respuestas de sí y no.
- Cómo procesar opciones de menú.
- Cómo validar una operación antes de modificar los datos.
- Cómo mostrar errores específicos.
- Cómo utilizar condiciones anidadas.
- Cómo clasificar presupuestos y metas.
- Qué es un
IndentationError. - Por qué una condición no puede evitar todos los errores de entrada.
MiniFinance ahora puede analizar información y elegir qué instrucciones ejecutar.
Ya puede rechazar gastos, comprobar saldos, interpretar opciones y mostrar advertencias.
Sin embargo, su menú todavía tiene memoria de pez: ejecuta una acción y se despide como si tuviera un autobús que alcanzar.
Eso cambiará en el siguiente capítulo.