Skip to content

Instantly share code, notes, and snippets.

@cibervicho
Created February 9, 2024 03:28
Show Gist options
  • Save cibervicho/8fbe93307144fd43477fbcfe426413eb to your computer and use it in GitHub Desktop.
Save cibervicho/8fbe93307144fd43477fbcfe426413eb to your computer and use it in GitHub Desktop.
Reto 4, día Miercoles (8-Feb-2024)
# Reto 4, día Miercoles (8-Feb-2024)
# ==============================
#
# Ya nos encontramos en la recta final de nuestra semana, y lo que haremos ahora, cómo ya
# es costumbre, será añadir más funcionalidades a nuestro programa.
#
# Puntualmente 4 nuevas funcionalidades. Aquí van.
#
# 1.- Ahora todos los valores que representan a un usuario: Nombre, apellidos, número de
# teléfono y correo electrónico deberán almacenarse en un diccionario.
#
# 2.- Se añadirá la opción de poder listar el ID de todos los usuarios registrados hasta el
# momento.
#
# 3.- Se añadirá la opción de poder ver la información de un usuario con respecto a un ID.
# Es decir, el usuario podrá ingresar un ID y a partir de este conocer la información
# registrada.
#
# 4.- Se añadirá la opción de poder editar la información de un usuario con respecto a un ID.
# Es decir, el usuario podrá ingresar un ID y a partir de este el programa pedirá
# nuevamente los valores de un registro para actualizarlos.
#
# Estas 3 nuevas opciones deberán ser presentadas al usuario al comienzo del programa, esto
# con la finalidad que sea el usuario quien defina que quiere hacer justo ahora: añadir nuevos
# usuario, consultarlos o editarlos.
#
# De igual forma el programa tendrán una quinta opción que le permita la usuario finalizar el
# programa cuando él lo desee.
#
# Un Tip. Para estas nuevas opciones puedes presentarle a tu usuario un pequeño menú del cual
# pueda elegir. Por ejemplo opción A.-) registrar nuevos usuarios, opción B.-) listar
# usuarios, Opción C.-) Editar usuarios y así sucesivamente.
import os
MENU = [
" LISTADO DE OPCIONES",
" -------------------\n",
" 1. Listar usuarios",
" 2. [C] Agregar usuario",
" 3. [R] Ver informacion de usuarios",
" 4. [U] Editar usuarios",
" 5. [D] Eliminar usuarios",
" 9. Salir del programa\n",
"\n Elige una opcion:",
]
INSTRUCCIONES = [
"\nINSTRUCCIONES:",
" 1. longitud de nombre, apellidos e email deben ser entre 5 y 50 caracteres",
" 2. longitud de telefono deben ser igual a 10 digitos\n"
]
OPCIONES_HABILITADAS = ('1', '2', '3', '4', '5', '9')
CAMPOS_DE_USUARIO = ("NOMBRE", "APELLIDO", "TELEFONO", "EMAIL")
# Diccionario principal donde vamos a almacenar los usuarios registrados
# {
# usuario_id #1: {
# 'nombre': str,
# 'apellido': str,
# 'telefono': str,
# 'email': str,
# },
# .
# .
# .
# usuario_id #N: {
# 'nombre': str,
# 'apellido': str,
# 'telefono': str,
# 'email': str,
# },
# }
usuarios_dict = {}
# Lista de todos los IDs de los usuarios registrados
usuarios_id_list = []
opcion = 0
while opcion != '9':
os.system('clear')
usuarios_registrados = len(usuarios_dict)
print("Usuarios registrados:", str(usuarios_registrados), "\n")
# Mostramos las opciones del menu
for item in MENU:
print(item)
# Evaluamos la opcion elegida
opcion = str(input("> "))
if opcion not in OPCIONES_HABILITADAS:
print("\n -> OPCION [" + opcion + "] NO RECONOCIDA!\n")
else:
match opcion:
case '1': # Listar usuarios
print("\n", MENU[2].upper(), "\n")
if len(usuarios_dict):
for id in usuarios_id_list:
nombre = usuarios_dict[id]['nombre'] + " " + usuarios_dict[id]['apellido']
telefono = usuarios_dict[id]['telefono']
email = usuarios_dict[id]['email']
print(" Id:", id)
print(" Nombre:", nombre)
print(" Telefono:", telefono)
print(" Email:", email)
print("")
print("")
else:
print(" -> NO SE HAN REGISTRADO USUARIOS!\n")
case '2': # Agregar usuario
print("\n", MENU[3].upper(), "\n")
# Mostramos las instrucciones/restricciones
for instruccion in INSTRUCCIONES:
print(instruccion)
# Iniciamos captura y validacion de usuario
print("Usuario #" + str(usuarios_registrados + 1) + ":")
nombre, apellido, telefono, email = "", "", "", ""
while len(nombre) < 5 or len(nombre) > 50:
nombre = input("Ingresa el/los nombre(s) del usuario #" + str(usuarios_registrados + 1) + ": ")
if len(nombre) < 5 or len(nombre) > 50:
print(" -> ERROR: El nombre debe ser de una longitud minima de 5 y maxima de 50.")
print(" Longitud actual: " + str(len(nombre)) +". Intenta nuevamente.")
while len(apellido) < 5 or len(apellido) > 50:
apellido = input("Ingresa los apellidos del usuario #" + str(usuarios_registrados + 1) + ": ")
if len(apellido) < 5 or len(apellido) > 50:
print(" -> ERROR: El apellido debe ser de una longitud minima de 5 y maxima de 50.")
print(" Longitud actual: " + str(len(apellido)) +". Intenta nuevamente.")
while len(telefono) != 10:
telefono = str(input("Ingresa el telefono a 10 digitos del usuario #" + str(usuarios_registrados + 1) + ": "))
if len(telefono) != 10:
print(" -> ERROR: El telefono debe ser de 10 digitos exactamente")
print(" Numero de digitos actual: " + str(len(telefono)) +". Intenta nuevamente.")
while len(email) < 5 or len(email) > 50:
email = input("ingresa el correo electronico del usuario #" + str(usuarios_registrados + 1) + ": ")
if len(email) < 5 or len(email) > 50:
print(" -> ERROR: El email debe ser de una longitud minima de 5 y maxima de 50.")
print(" Longitud actual: " + str(len(email)) +". Intenta nuevamente.")
usuario_id = len(usuarios_dict) + 1
usuarios_id_list.append(usuario_id)
usuarios_dict.update(
{
usuario_id: {
'nombre': nombre,
'apellido': apellido,
'telefono': telefono,
'email': email
}
}
)
print("\n --> Hola " + nombre + " " + apellido + ", en breve recibiras un correo a: " + email + "\n")
case '3': # Ver informacion de usuarios
print("\n", MENU[4].upper(), "\n")
if len(usuarios_dict):
id = input("Selecciona el ID del usuario: ")
if not id.isdigit():
print("\n -> ID DE USUARIO [" + id + "] INVALIDO!\n")
else:
id = int(id)
if id not in usuarios_id_list:
print("\n -> ID DE USUARIO [" + str(id) + "] NO ENCONTRADO!\n")
else:
nombre = usuarios_dict[id]['nombre'] + " " + usuarios_dict[id]['apellido']
telefono = usuarios_dict[id]['telefono']
email = usuarios_dict[id]['email']
print("")
print(" Id:", id)
print(" Nombre:", nombre)
print(" Telefono:", telefono)
print(" Email:", email)
print("")
else:
print(" -> NO SE HAN REGISTRADO USUARIOS!\n")
case '4': # Editar usuarios
print("\n", MENU[5].upper(), "\n")
if len(usuarios_dict):
id = input("Selecciona el ID del usuario a editar: ")
if not id.isdigit():
print("\n -> ID DE USUARIO [" + id + "] INVALIDO!\n")
else:
id = int(id)
if id not in usuarios_id_list:
print("\n -> ID DE USUARIO [" + str(id) + "] NO ENCONTRADO!\n")
else:
nombre = usuarios_dict[id]['nombre'] + " " + usuarios_dict[id]['apellido']
telefono = usuarios_dict[id]['telefono']
email = usuarios_dict[id]['email']
print("")
print(" Nombre:", nombre)
print(" Telefono:", telefono)
print(" Email:", email)
print("")
campo = input("Que campo del usuario deseas editar " + str(CAMPOS_DE_USUARIO) + "?: ")
campo = campo.upper()
if campo not in CAMPOS_DE_USUARIO:
print("\n -> CAMPO [" + campo + "] INVALIDO!")
print(" Opciones:", CAMPOS_DE_USUARIO, "\n")
else:
nombre, apellido, telefono, email = "", "", "", ""
if campo.lower() == "nombre":
while len(nombre) < 5 or len(nombre) > 50:
nombre = input("Ingresa el/los nombre(s) del usuario #" + str(id) + ": ")
if len(nombre) < 5 or len(nombre) > 50:
print(" -> ERROR: El nombre debe ser de una longitud minima de 5 y maxima de 50.")
print(" Longitud actual: " + str(len(nombre)) +". Intenta nuevamente.")
usuarios_dict[id]['nombre'] = nombre
elif campo.lower() == "apellido":
while len(apellido) < 5 or len(apellido) > 50:
apellido = input("Ingresa los apellidos del usuario #" + str(id) + ": ")
if len(apellido) < 5 or len(apellido) > 50:
print(" -> ERROR: El apellido debe ser de una longitud minima de 5 y maxima de 50.")
print(" Longitud actual: " + str(len(apellido)) +". Intenta nuevamente.")
usuarios_dict[id]['apellido'] = apellido
elif campo.lower() == "telefono":
while len(telefono) != 10:
telefono = str(input("Ingresa el telefono a 10 digitos del usuario #" + str(id) + ": "))
if len(telefono) != 10:
print(" -> ERROR: El telefono debe ser de 10 digitos exactamente")
print(" Numero de digitos actual: " + str(len(telefono)) +". Intenta nuevamente.")
usuarios_dict[id]['telefono'] = telefono
elif campo.lower() == "email":
while len(email) < 5 or len(email) > 50:
email = input("ingresa el correo electronico del usuario #" + str(id) + ": ")
if len(email) < 5 or len(email) > 50:
print(" -> ERROR: El email debe ser de una longitud minima de 5 y maxima de 50.")
print(" Longitud actual: " + str(len(email)) +". Intenta nuevamente.")
usuarios_dict[id]['email'] = email
else:
print("\n -> CAMPO [" + campo + "] INVALIDO!")
print(" Opciones:", CAMPOS_DE_USUARIO)
print("")
else:
print(" -> NO SE HAN REGISTRADO USUARIOS!\n")
case '5': # Eliminar usuarios
print("\n", MENU[6].upper(), "\n")
if len(usuarios_dict):
id = input("Selecciona el ID del usuario a eliminar: ")
if not id.isdigit():
print("\n -> ID DE USUARIO [" + id + "] INVALIDO!\n")
else:
id = int(id)
if id not in usuarios_id_list:
print("\n -> ID DE USUARIO [" + str(id) + "] NO ENCONTRADO!\n")
else:
nombre = usuarios_dict[id]['nombre'] + " " + usuarios_dict[id]['apellido']
telefono = usuarios_dict[id]['telefono']
email = usuarios_dict[id]['email']
print("")
print(" Id:", id)
print(" Nombre:", nombre)
print(" Telefono:", telefono)
print(" Email:", email)
print("")
opc = ""
while opc not in ["si".upper(), "no".upper()]:
opc = input("Estas segur@ de eliminar este usuario (si/no)?: ")
opc = opc.upper()
if opc not in ["si".upper(), "no".upper()]:
print("\n -> OPCION [" + opc + "] INVALIDA!")
print(" INTENTA NUEVAMENTE\n")
if opc == "SI":
del usuarios_dict[id]
usuarios_id_list.remove(id)
print("\n -> USUARIO ELIMINADO CON EXITO!\n")
print("")
else:
print(" -> NO SE HAN REGISTRADO USUARIOS!\n")
case '9': # Salir del programa
print("\n", MENU[7].upper(), "\n")
case _: # Proteccion: Opcion no reconocida. No deberia ocurrir
print("\n -> OPCION [" + opcion + "] NO RECONOCIDA!\n")
_ = input("\nPresione ENTER para continuar...")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment