Skip to content

Instantly share code, notes, and snippets.

@lokilloboss
Created February 9, 2024 15:03
Show Gist options
  • Save lokilloboss/6ff22469d32c4e0941432fe7bfbd212b to your computer and use it in GitHub Desktop.
Save lokilloboss/6ff22469d32c4e0941432fe7bfbd212b to your computer and use it in GitHub Desktop.
Reto del dia 4
import re
# Variable global para almacenar ids
ids_usuarios = []
# Variable global para almacenar información de usuarios
usuarios = {}
# Función para generar ID único
def generate_id():
global id_counter
id_counter += 1
return id_counter
def registrar_usuario(nombre, apellidos, telefono, correo, id_usuario):
# Validar nombre
if not validar_nombre(nombre):
print(f"Error: El nombre no es válido.")
return False
# Validar apellidos
if not validar_apellidos(apellidos):
print(f"Error: Los apellidos no son válidos.")
return False
# Validar telefono
if not validar_telefono(telefono):
print(f"Error: El número de teléfono no es válido.")
return False
# Validar correo
if not validar_correo(correo):
print(f"Error: El correo electrónico no es válido.")
return False
# Almacenar información del usuario en un diccionario
usuarios[id_usuario] = {
"nombre": nombre,
"apellidos": apellidos,
"telefono": telefono,
"correo": correo
}
# Imprimir información del usuario
print(f"Usuario registrado: {nombre} {apellidos}")
print(f"ID: {id_usuario}")
print(f"Teléfono: {telefono}")
print(f"Correo electrónico: {correo}")
# Registrar id en la lista
ids_usuarios.append(id_usuario)
return True
def validar_nombre(nombre):
# Expresión regular que coincide con cualquier letra (mayúscula o minúscula)
patron = re.compile(r'^[a-zA-Záéíóúñ]+$')
if not patron.match(nombre): # Valida si el nombre coincide con la expresión regular
print(f"Error: El nombre solo debe contener letras.")
return False
if len(nombre) < 5 or len(nombre) > 50:
print(f"Error: El nombre debe tener entre 5 y 50 caracteres.")
return False
return True # Si el nombre es válido, retorna True
def validar_apellidos(apellidos):
if len(apellidos) < 5 or len(apellidos) > 50:
print(f"Error: Los apellidos deben tener entre 5 y 50 caracteres.")
return False
return True
def validar_telefono(telefono):
# Validar longitud de telefono
if len(telefono) != 10:
print(f"Error: El número de teléfono debe tener 10 dígitos.")
return False
# Validar que sean números
patron = re.compile(r'^[0-9]+$')
if not patron.match(telefono):
print(f"Error: El número de teléfono solo debe contener números.")
return False
return True
def validar_correo(correo):
if len(correo) < 5 or len(correo) > 50:
print(f"Error: El correo electrónico debe tener entre 5 y 50 caracteres.")
return False
# Validar formato de correo electrónico
patron = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
if not patron.match(correo):
print(f"Error: El correo electrónico no tiene un formato válido.")
return False
return True
def listar_usuarios():
# Imprimir lista de ids
print("**Lista de IDs de usuarios registrados:**")
for id in ids_usuarios:
print(f"- {id}")
def ver_informacion_usuario(id_usuario):
# Verificar si el ID existe
if id_usuario in usuarios:
# Imprimir información del usuario
print("**Información del usuario:**")
print(f"ID: {id_usuario}")
for key, value in usuarios[id_usuario].items():
print(f"{key.capitalize()}: {value}")
else:
print("Error: ID de usuario no encontrado.")
def editar_usuario(id_usuario):
# Verificar si el ID existe
if id_usuario in usuarios:
print("**Editar información del usuario:**")
# Solicitar nuevos valores
nombre = input("Ingrese el nuevo nombre: ")
apellidos = input("Ingrese los nuevos apellidos: ")
telefono = input("Ingrese el nuevo número de teléfono: ")
correo = input("Ingrese el nuevo correo electrónico: ")
# Actualizar información del usuario en el diccionario
usuarios[id_usuario] = {
"nombre": nombre,
"apellidos": apellidos,
"telefono": telefono,
"correo": correo
}
print("Información actualizada correctamente.")
else:
print("Error: ID de usuario no encontrado.")
def main():
"""
Función principal que registra, lista, muestra información y edita usuarios.
"""
# Initialize id_counter outside functions
global id_counter
id_counter = 0
while True:
# Menú de opciones
print("\nMenú:")
print("A.- Registrar nuevos usuarios")
print("B.- Listar usuarios")
print("C.- Ver información de un usuario por ID")
print("D.- Editar información de un usuario por ID")
print("E.- Salir")
opcion = input("Seleccione una opción (A/B/C/D/E): ").upper()
if opcion == "A":
# Preguntar cuántos usuarios se quieren registrar
numero_usuarios = int(input("¿Cuántos usuarios desea registrar?: "))
# Registrar cada usuario
for i in range(numero_usuarios):
nombre = input(f"Ingrese el nombre del usuario {i + 1}: ")
apellidos = input(f"Ingrese los apellidos del usuario {i + 1}: ")
telefono = input(f"Ingrese el número de teléfono del usuario {i + 1}: ")
correo = input(f"Ingrese el correo electrónico del usuario {i + 1}: ")
# Registrar el usuario solo si la información es válida
if registrar_usuario(nombre, apellidos, telefono, correo, generate_id()):
print("-" * 20)
elif opcion == "B":
# Listar usuarios
listar_usuarios()
elif opcion == "C":
# Ver información de un usuario por ID
id_usuario = int(input("Ingrese el ID del usuario: "))
ver_informacion_usuario(id_usuario)
elif opcion == "D":
# Editar información de un usuario por ID
id_usuario = int(input("Ingrese el ID del usuario a editar: "))
editar_usuario(id_usuario)
elif opcion == "E":
# Salir del programa
print("Saliendo del programa. ¡Hasta luego!")
break
else:
print("Opción no válida. Por favor, elija una opción válida.")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment