Skip to content

Commit 78b145f

Browse files
committed
feat: completarar reto 2 en 07_mini_proyectos
1 parent 4f1cec0 commit 78b145f

File tree

8 files changed

+147
-13
lines changed

8 files changed

+147
-13
lines changed

07_mini_proyectos/retos/reto1.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,6 @@ def main():
9393
# Llamar función reto1
9494
reto1()
9595

96-
# TODO: Punto de entrada del programa
96+
# TODO 4: Punto de entrada del programa
9797
if __name__ == "__main__":
9898
main()

07_mini_proyectos/retos/reto2.py

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Reto 2: Validador de formulario
2+
# Enunciado: Crea un programa que pida datos de registro y los valide:
3+
# - Nombre (mínimo 3 caracteres)
4+
# - Email (debe contener @)
5+
# - Edad (debe ser número entre 18 y 100)
6+
# - Contraseña (mínimo 6 caracteres)
7+
#
8+
# **Requisitos**:
9+
# - Usa operador morsa en TODAS las validaciones
10+
# - Repite la pregunta si el dato no es válido
11+
# - Muestra un resumen al final
12+
# - Guarda los datos en un archivo JSON
13+
14+
# TODO 1: Importar función validador de formularios en el módulo 'formulario'
15+
from formulario import validar_formulario
16+
17+
# TODO 2: Crear función principal
18+
def main():
19+
# Imprimir título del reto
20+
print("--- Validador de formulario ---")
21+
# Llamar función validar_formulario (más información en 'formulario.py')
22+
validar_formulario()
23+
# Imprimir mensaje de despedida
24+
print("\nHasta pronto! 👋")
25+
26+
# TODO 3: Punto de entrada del programa
27+
if __name__ == "__main__":
28+
main()
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# formatoJSON.py
2+
# Módulo donde se almacenan funciones de leer y guardar archivo en formato JSON
3+
4+
# TODO 1: Importar módulos 'os' y'json'
5+
import os, json
6+
7+
# TODO 2: Función que guarda datos al archivo JSON
8+
def guardar_archivo(ruta, datos):
9+
10+
# Validación por si el nombre del archivo introducido ya existe
11+
# Si existe el archivo, salta el mensaje de error y muestra el contenido de dicho archivo
12+
if os.path.exists(ruta):
13+
print(f"\n❌ El archivo {ruta} existe.")
14+
print("\nMostrando contenido del archivo existente...")
15+
leer_archivo(ruta)
16+
else:
17+
# Si no existe, se empieza a crear el archivo
18+
print(f"Escribiendo datos en {ruta}...")
19+
# Intentemos escribir el archivo JSON si no hay error
20+
try:
21+
# Escribimos archivo JSON usando 'with open()' y 'json.dump()'
22+
with open(ruta, "w", encoding="utf-8") as archivo:
23+
json.dump(datos, archivo, indent=4, ensure_ascii=False)
24+
# Mensaje de éxito de escritura de datos
25+
print(f"Archivo {ruta} creado y escrito correctamente. ✅")
26+
# Leer los datos escritos
27+
print(f"\nImprimiendo archivo {ruta}...")
28+
leer_archivo(ruta)
29+
# Mensaje de error si hay error al escribir
30+
except Exception as e:
31+
print(f"❌ Ups! Ha habido un error: {e}")
32+
33+
# TODO 3: Función para leer un archivo
34+
def leer_archivo(ruta):
35+
# Intentemos que lea el archivo si se encuentra el archivo
36+
try:
37+
# Leemos archivo JSON usando 'with open()' y 'json.load()'
38+
with open(ruta, "r", encoding="utf-8") as archivo:
39+
datos = json.load(archivo)
40+
print(f"\n{datos}")
41+
print(f"Archivo {ruta} leído correctamente ✅")
42+
# Mensaje de error si no se encuentra el archivo
43+
except FileNotFoundError:
44+
print(f"\n❌ No se ha encontrado el archivo {ruta}")
45+
# Mensaje de error si hay error al leer
46+
except Exception as e:
47+
print(f"❌ Ups! Ha habido un error: {e}")
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# formulario.py
2+
# Archivo donde se almacena la validación del formulario
3+
4+
# TODO 1: Importar función que guarda datos de formulario en un archivo JSON en el módulo formatoJSON
5+
from formatoJSON import guardar_archivo
6+
7+
# TODO 2: Función que valida el formulario
8+
def validar_formulario():
9+
# Validación de nombre que tenga más de 3 carácteres
10+
while not (nombre := input("\nIntroduce un nombre: ")) or len(nombre) < 3:
11+
print("❌ Nombre inválido. El nombre debe tener al menos 3 caracteres.")
12+
# Validación de email que contenga al menos un '@' y un '.'
13+
while "@" not in (email := input("\nIntroduce un email válido: ")) or "." not in email:
14+
print("❌ Email inválido. El email debe contener al menos un @ y un punto (.).")
15+
# Validación de edad que sea número entero y que esté comprendido entre 18 y 100
16+
while True:
17+
try:
18+
if not (edad := int(input("\nIntroduce su edad: "))) or edad < 18 or edad > 100:
19+
print("❌ Edad no válida. La edad debe ser entre 18 y 100 años.")
20+
continue
21+
break
22+
except ValueError:
23+
print("❌ Edad no válida. La edad debe ser un número.")
24+
continue
25+
# Validación de contraseña que tenga más de 6 carácteres
26+
while not (contrasena := input("\nIntroduce una contraseña: ")) or len(contrasena) < 6:
27+
print("❌ Contraseña no válida. Debe tener al menos 6 caracteres.")
28+
# Imprimimos resumen del formulario
29+
print("\n--- Resumen ---")
30+
31+
print(f"Nombre: {nombre}")
32+
print(f"Email: {email}")
33+
print(f"Edad: {edad}")
34+
print(f"Contraseña: {contrasena}")
35+
# Pregunta del programa si desea guardar los datos en un archivo JSON o perder los datos para siempre
36+
if not (guardar := input("\n¿Desea almacenar estos datos en un archivo JSON? (s/n) --> ")) or guardar != "s":
37+
print("Datos no almacenados en JSON. Eliminando datos introducidos 🗑️")
38+
else:
39+
# Pedir al usuario un nombre para el archivo JSON (Inválido estar vacío o que sólo tenga números)
40+
while not (texto := input("\nEscribe un nombre para el archivo JSON --> ")) or texto.isdigit():
41+
print("❌ Nombre inválido.")
42+
43+
# Declarar diccionario con los datos guardados
44+
resumen = {
45+
"nombre": nombre,
46+
"email": email,
47+
"edad": edad,
48+
"contrasena": contrasena
49+
}
50+
# Convertir texto en archivo JSON
51+
textoJSON = texto + ".json"
52+
# Llamar función 'guardar_archivo' para almacenar los datos en JSON (más información en formatoJSON.py)
53+
guardar_archivo(textoJSON, resumen)

antonio.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"nombre": "antonio",
3+
"email": "antonio@rento.es",
4+
"edad": 56,
5+
"contrasena": "antoniolobato"
6+
}

donde45.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"nombre": "pepe",
3+
"email": "done@reto.com",
4+
"edad": 76,
5+
"contrasena": "popenciodon"
6+
}

texto.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"nombre": "Felipe",
3+
"email": "pepe@gmail.com",
4+
"edad": 34,
5+
"contrasena": "pepeviyuela"
6+
}

0 commit comments

Comments
 (0)