Néstor Iván Cepeda Munevar
Samuel Paredes
Antony Dixon Albites Tapia
Implementar el comando delete para borrar un cliente es directo cuando se prioriza reutilizar código y factorizar funciones. Aquí se muestra cómo integrar delete al flujo CRUD sin duplicar lógica, con buenas prácticas que facilitan el mantenimiento y un ciclo de feedback claro desde la consola.
¿Qué es el patrón CRUD y por qué importa?
El flujo que se ejecuta es consistente: crear, mostrar, actualizar y borrar clientes. Este patrón, conocido como CRUD, aparece en muchas soluciones: API de aplicaciones web, programas de escritorio como correo y bloc de notas, y cualquier sistema que gestione elementos persistentes.
Además, se adelanta que más adelante se incorporará persistencia: guardar la lista en disco para conservar datos entre sesiones del programa.
¿Cómo implementar delete sin repetir código?
La implementación de delete se alinea con update, pero con una diferencia clave: solo requiere el nombre del cliente. Se reutiliza la función existente para obtener la entrada del usuario y se encapsula el borrado en una función específica.
# Ejemplo del borrado de un cliente def delete_client(client_name): global clients if client_name in clients: # se selecciona el nombre incluyendo la coma y se sustituye por un string vacío clients = clients.replace(client_name + ',', '') else: print('client is not in clients list') # flujo típico name = get_client_name() # función ya existente y reutilizable delete_client(name) list_clients() # para observar el cambio en la salida
¿Cómo reutilizar get client name para pedir entrada?
La ventaja de factorizar funciones es clara: si se necesita modificar cómo se solicita el nombre, se cambia en un solo lugar y el ajuste impacta en todo el programa. Evitar el copy paste previene que el código se vuelva inmanejable conforme crece.
¿Cómo validar y borrar en la lista global clients?
Se usa la referencia global a clients y se verifica si el nombre existe. Si está, se selecciona el nombre con su coma y se reemplaza por un string vacío: eso borra al cliente de la estructura actual.
¿Cómo dar feedback con list clients?
Mostrar el estado con list clients es útil para entender qué pasa internamente. Al borrar, se ve al instante el efecto del comando y se detectan posibles errores.
¿Qué habilidades y buenas prácticas se refuerzan?
Este ejercicio consolida competencias clave para construir software mantenible y claro.
Si algo no quedó claro o quieres proponer una mejor forma de factorizar mensajes y validaciones, comparte tu duda o mejora en los comentarios: la comunidad puede ayudarte a avanzar más rápido.
Néstor Iván Cepeda Munevar
Samuel Paredes
Antony Dixon Albites Tapia
José Manuel Piña Rodríguez
Pedro Alvarado Garcia
Camilo Ernesto Hurtado Cataño
David Camilo Latorre Monroy
Omar Daniel Centeno
Miguel Andres Rendon Reyes
Aufsten Aufsten
Fredy Mendoza Vargas
baltazar de jesus covarrubia rosado
Miguel Andres Rendon Reyes
Darwin Senen Mastrodomenico Castro
Diego Serrano
Diego Serrano
Samuel Paredes
Manuel Mosquera
Benjamin Bianchi
Jose Francisco Romero Meza
LUIS FERNANDO CASTAÑEDA CASTRO
Diary Stylized Drapery Contently
David Martínez Jiménez
julian orrego
Heiner Edwar Granados Leal
Julian Benegas
Hernán Chilabert
Kevin Lozoya Giner
Victor Ruiz
Jesús Andrés Ovallos Ovallos
Rolando de Paz
Facundo Nicolás García Martoni
ProfesorPerla Godinez Castillo
Juan Mercado
Santiago Gomez Florez
Genaro Flores
CRUD
(C)reate (R)ead or retreive (U)pdate (D)elete
Es un modelo muy utilizado por científicos de computadores. Se usa mucho en aplicaciones web, para construir modelos usables.
Mejor detallado!
Claro, se usa básicamente en las tablas mantenimiento !
def _client_not_found(): return print('Client is not in clients list')
cool, gracias por el aporte
porque el metodo se declara como privado?
Un crud es algo básico, sin embargo por experiencia he visto que muchos desarrolladores no pasan esta prueba técnica (Hacer un crud a partir de un CSV), pero eso si se llenan la boca auto nombrandose Senior 😕
¿Será que solo reutilizan código o que ya utilizan librearías que lo hacen y no lo practican? . ¿O simplemente demuestra que no saben generar una lógica de programación?
Y con cuánta frecuencia los ves?
Código actualizado y comentadocon las sugerencias de los demás compañeros.
Espero les sirva 😎👍
#proyecto_final clients = 'Rogelio, Paco, Sebastian, Adrian' #creamos el string con los nombres de los clientes def _print_welcome(): #funcion para dar el mensaje de bienvenida print ('Welcome to Monares POS') print ('what would you like to do today?') print ('*' * 52) #imprimimos el caracter "*" 52 veces #Mostramos el menu al usuario print ('[C]reate client') print ('[R]ead client\'s list ') print ('[U]pdate client') print ('[D]elete client') def verify_client(client_name): """ Esta funcion sirve para verificar si un cliente se encuentra en el string o no. Recibe un parametro, el nombre del cliente y devuelve un valor positivo si el nombre se encuentra en el string y viceversa """ global clients if client_name in clients: return True else: return False def _client_not_found_tollgate(): """ Esta funcion sirve para mostrar un mensaje preestablecido si un cliente no se encuentra en el string de los clientes """ print ("Client is not in client\'s list") def create_client(client_name): """ Esta función sirve para agregar un cliente al string de la lista """ global clients #Utilizamos global para definir que la variable es la global, es decir la que definimos con pablo y ricardo if (verify_client(client_name)): #Ejecutamos la funcion verify client, si la cadena del nombre del cliente está en el string etonces... print('Client already exists') #Mostramos un mensaje al usuario else: _add_coma() #Si no, ejecutamos la funcion _add_coma para agregar una coma y un espacio al último nombre clients += client_name #adicionamos el nuevo string pero con la funcion capitalize para poner el primer caractér en mayuscula y seguir con el formato def read_client_list(): """ función que imprime la lista de clientes """ global clients print (clients) #imprimimos el string clientes, es decir la lista de clientes def update_client(client_name): """ Función que sirve para actualizar el nombre de un cliente, recibe un parametro que es el string del nombre del cliente a editar """ global clients #Utilizamos global para definir que la variable es la globarl, es decir la que definimos con pablo y ricardo if (verify_client(client_name)): #Si el cliente se encuentra registrado entonces... updated_client_name = input('What is the updated client name?').capitalize() #Pedimos al usuario que ingrese el nuevo nombre de cliente clients = clients.replace(client_name, updated_client_name) #Ejecutamos la funcion replace, la cual recibe dos parametros, el string a reemplazar #y el string con el cual se remplazara al anterior else: _client_not_found_tollgate() #sino, ejecutamos la funcion _client_not_found_tollgate() para mostrar el mensaje que no se ha encontrado el cliente (string) def delete_client(client_name): """ Función para borrar el cliente (Remplazar por una cadena vacía) """ global clients if (verify_client(client_name)): #Si el cliente está registrado, entonces... clients = clients.replace(client_name + ', ', '') #Remplazamos el nombre concatenado con una , y un espacio y lo remplazamos por una cadena vacía else: _client_not_found_tollgate() #sino, ejecutamos la funcion _client_not_found_tollgate() para mostrar el mensaje que no se ha encontrado el cliente (string) def _add_coma(): #el nombre de la función comienza con un guión bajo para establecer que será una funcion privada """ Función que sirve para agregar una coma y un espacio para separar los substrings """ global clients clients +=", " #se agrega una coma y un espacio al string para separar los nuevos valores def _get_client_name(): """ Función que sierve para obtener el nombre del cliente con el formato capitalizado """ return input('What is the client name?').capitalize() #guardamos en la variable client_name el valor de los caracteres que ingresa el usuario hasta recibir un enter if __name__ == '__main__': #funcion main _print_welcome() #ejecutamos la funcion que da el mensaje de bienvenida command = input().lower() #guardamos el valor del dato ingresado en la variable command pero lo convertimos a miunsculas para realizar la accion si presiona "C" o "c" if command == 'c': #si el comando es igual al caracter "c" procedemos a realizar los pasos de create/crear client_name = _get_client_name() #Ejecutamos la función para obtener el nombre del cliente create_client(client_name) #Ejecutamos la funcion crear cliente y enviamos como parametro el valor de la variable que almacena lo que digitó el usuario read_client_list() #Ejecutamos la funcion listar clientes elif command == 'r': #si el comando es igual al caracter "r" procedemos a realizar los pasos de read/leer read_client_list() #Ejecutamos la funcion listar clientes elif command == 'u': #si el comando es igual al caracter "u", procedemos a realizar los pasos de update/actualizar client_name = _get_client_name() #Ejecutamos la función para obtener el nombre del cliente update_client(client_name) read_client_list() #Ejecutamos la funcion listar clientes elif command == 'd': #si el dato ignresado por el usuario es "d" procedemos a realizar los pasos de delete/eliminar client_name = _get_client_name() #Ejecutamos la función para obtener el nombre del cliente delete_client(client_name) read_client_list() #Ejecutamos la funcion listar clientes else: print('ERROR: Invalid command') #Si el usuario no digita alguna de nuestras opciones entonces mostramos un mensaje de error input() #Escribimos un input para que el programa haga una pausa y no cierre la ventana hasta recibir un enter
Gracias
Creo que mientras mas avanzo mas me gusta esto, comparto mi codigo con funcion de accion y validar si existe cliente.
clients= 'pablo,ricardo,' def create_client(client_name): global clients if client_name not in clients: clients+=client_name _add_comma() else: print('Client already is in the clien\'s list ') def list_clients(): global clients print(clients) def update_client(client_name,updated_client_name): global clients if client_name in clients: clients=clients.replace(client_name+',',updated_client_name+',') else: print('Client is not in clients list') def delete_client(client_name): global clients _exist_client(client_name) Exist_client= _exist_client(client_name) print(Exist_client) if Exist_client==True : clients=clients.replace(client_name+',','') def _exist_client(client_name): global clients if client_name not in clients: print('Client is not in clients list') return False elif client_name is None or client_name=='': print('Client is Empty') return False else: return True def _add_comma(): global clients clients+=',' def _print_welcome(): print('WELCOME TO BOLTA VENTAS') print('*'* 50) print('What would you like to do today?') print('[C]reate client') print('[U]pdate client') print('[D]elete client') #def _get_client_name(): # return input('what is the client name?') #def _get_updated_client_name(): # return input('what is the updated client name?') def _get_input_action(value): action='' if value == 1: action=input('what is the client name?') _exist_client(action) elif value == 2: action=input('what is the updated client name?') _exist_client(action) else: action=print('Invalid value for input action') return action if __name__ == '__main__': _print_welcome() command=input() command=command.upper() if command == 'C': client_name =_get_input_action(1) create_client(client_name) list_clients() elif command == 'D': list_clients() client_name = _get_input_action(1) delete_client(client_name) list_clients() elif command == 'U': list_clients() client_name = _get_input_action(1)#_get_client_name() updated_client_name = _get_input_action(2)#_get_updated_client_name() update_client(client_name,updated_client_name) list_clients() else: print('Invalid command')
Estamos igual jajaja, me encanta.
Saludos, les comparto mi código. Trabaje con Arrays en lugar de una variable tipo str.
clients = ['Ramiro', 'Daniel', 'Jose'] def create_client(client_name): global clients if client_exists(client_name): _message_system(1) else: # clients += client_name # _add_coma() clients.append(client_name) def delete_client(client_name): global clients if client_exists(client_name): # clients = clients.replace(client_name, '') clients.remove(client_name) else: _message_system(2) def update_client(client_name, new_client_name): global clients if client_exists(client_name): # clients = clients.replace(client_name, new_client_name) pos = clients.index(client_name) clients.pop(pos) clients.insert(pos, new_client_name) else: _message_system(2) def client_exists(client_name): global clients # if client_name+','in clients: if client_name in clients: return True def _add_coma(): global clients clients += ', ' def list_client(): global clients # print(clients) for client in clients: print(client) def _print_menu(): print(('*' * 50) + '\nWELCOME TO PLATZI VENTAS\n' + ('*' * 50)) print('What do you like to do today?') print('[C]reate client.') print('[U]pdate client.') print('[D]elete client.') print('[L]ist clients') print('[E]xit') def _message_system(num_message): if num_message == 0: return print('Thanks for everything.\nHave a nice day.') elif num_message == 1: return print('Client already is in the client\'s list!.') elif num_message == 2: return print('Client isn\'t in the client\'s list!.') elif num_message == 3: return print('Invalid command.') def _get_cliente_name(): return input('What is the client name?.\n').capitalize() def crud_scheme(): while True: command = input('\nOption:\t').upper() if command == 'C': client_name = _get_cliente_name() create_client(client_name) elif command == 'D': client_name = _get_cliente_name() delete_client(client_name) elif command == 'U': client_name = _get_cliente_name() if client_exists(client_name): update_client_name = input('Please, Write the new client name:\n').capitalize() update_client(client_name, update_client_name) else: _message_system(2) elif command == 'L': list_client() elif command == 'E': _message_system(0) break else: _message_system(3) if __name__ == '__main__': _print_menu() crud_scheme() ```
esta es la manera que construi mi funcion.
construi una funcion privada para refactorizar mi codigo un poco y reutilizar el tollgate de cliente no encontrado.
Cual es tu editor de texto?
Para no repetir el mensaje decidí crear una función auxiliar en la cual dependiendo un código, me imprime el mensaje que necesito. Aquí mismo puedo ir agregando mensajes genéricos que se irán utilizando en la aplicación.
No seria mas eficiente poner remove en vez de dejar un string vacio ? .
Saludos muy buen curso !!!
lo sería pero los nombres son una cadena de texto no un array
@frankromero muchas gracias por la aclaración y valioso aporte
Aquí les dejo mi código, pueden aprender de el, intenten leerlo y mejoren su capacidad lectora como programadores <3
global_clients = 'Iván, Paolo, Platzi' def create_client(client_name): global global_clients if client_name not in global_clients and len(global_clients) > 1: # La condicional "and len(global_clients) > 1" es porque cuando borras todos los clientes # e intentas crear uno nuevo la lista queda así ", nombre" y eso se ve mal global_clients += ', ' + client_name elif client_name not in global_clients: global_clients += client_name # En este elif colocamos el cliente sin coma, el elif solo se comple si no hay ningun cliente en global_clients else: print('repeated client') def update_client(client_name, updated_name): global global_clients if client_name in global_clients: global_clients = global_clients.replace(client_name, updated_name) else: print('nonexistent client') def delete_client(client_name): global global_clients if client_name in global_clients and client_name != '': # la condicional "and client_name != ''" es para que si no colocas nada, no se borren las comas, pruebenlo para ver que pasa global_clients = global_clients.replace(client_name + ', ', '') # Estas lineas de codigo son global_clients = global_clients.replace(', ' + client_name, '') # para que se vea bien esteticamente global_clients = global_clients.replace(client_name, '') # y que no haya comas flotando o dobles comas else: print('nonexistent client') def read_clients(): print(global_clients) def _menu(): print(' WELCOME') print('-' * 40) # El * 40 repetira el simbolo "-" 40 veces print('What would you like to do today?') # CRUD C = create | R = read | U = update | D = delete print('1 = Create a client') print('2 = Read clients') print('3 = Update client') print('4 = Delete a client') print('0 = Exit') if __name__ == '__main__': _command = '1' while _command != '0': # Este while es para que a menos que el comando sea 0, siga saliendo el menu infinitamente _menu() _command = input() if _command == '1': create_client(input('What is the name of the client? ')) elif _command == '2': read_clients() elif _command == '3': update_client(input('What is the name of the client? '), input('What is the updated client name? ')) elif _command == '4': delete_client(input('What is the name of the client? '))
Si alguien así como yo se quedó con la duda de por que usar if name == 'main': , en el siguiente link viene una muy buena explicación:
https://es.stackoverflow.com/questions/32165/qu%C3%A9-es-if-name-main
Gracias por la información. De eso se trata, de saber el fondo de las cosas.
Que emocionante! Me muero por saber como manejar clases y guardar datos en el disco duro :D
CRUD: Create, Replace, Update, Delete.
Supongo, no?
CRUD: Create, Read, Update, Delete "Read" seria la opción de listar los clientes. El "replace" entraría implícitamente en la opción "Update", donde reemplazas (o modificas) la información.
def _client_exists(client_name): global clients if client_name+',' in clients: return True else: print('Client is not in client list.')
Lo acomode de la siguiente manera:
def update_client(client_name, update_client_name): global clients if _find_client(client_name): clients = clients.replace(client_name, update_client_name) def delete_client(client_name): global clients if _find_client(client_name): clients = clients.replace(client_name + ',', '') def _find_client(client_name): global clients if client_name in clients: return True else: print('Client is not in clients list') return False
De todo esto me queda una inquietud con la variable "clients", porque esta se declara global dentro de las funciones, y no por fuera de una sola vez
creo que es por que las funciones no pueden acceder directamente a la variable clients
¡Hola @jandresovallos! La variable clients se declara de manera global para que pueda ser accedida por todas las otras funciones. En programas que pretenden escalar, esto es una mala práctica. Nunca deberías declarar una variable a nivel global. Por cuestiones de practicidad y por la corta longitud del código se hace aquí. Espero que mi respuesta te aclare la duda ;)
<code> clients = 'pablo, ricardo,' def create_client(client_name): global clients if client_name not in clients: clients += client_name _add_comma() else: print('client already is in the client\'s list') def list_clients(): global clients print(clients) def update_client(client_name, updated_client_name): global clients if client_name in clients: clients = clients.replace(client_name + ',', updated_client_name + ',') else: print(_get_not_in_list()) def delet_client(client_name): global clients if client_name in clients: clients = clients.replace(client_name + ',', '') else: print(_get_not_in_list()) def _add_comma(): global clients clients += ',' def _print_welcome(): print('welocome to platzi ventas') print('*' * 50) print('what would you like to do today?') print('[C]reate client') print('[U]pdate client') print('[D]elate client') def _get_client_name(): return input('What is the client name?') def _get_not_in_list(): return input('client is nos in client list') if __name__ == '__main__': _print_welcome() command = input() command = command.upper() if command == 'C': client_name = _get_client_name() create_client(client_name) list_clients() elif command == 'D': client_name = _get_client_name() delet_client(client_name) list_clients() elif command == 'U': client_name = _get_client_name() updated_client_name = input('whats the o¡updated client name?') update_client(client_name, updated_client_name) list_clients else: print('Invalid command')
Patrón Común (CRUD): -Crear cliente -Mostrar clientes -Hacer update de clientes -Borrar clientes,
*Es un patrón que nos vamos a encontrar por todos lados:Aplicaciones web que tengan(Apis), aplicaciones de escritorio(Gmail,Bloc de notas), Cualquier cosa que represente la programación, que requiera guardar, modificar, etc "VAMOS A NECESITAR ESTE PATRÓN"
yo use una lista, me parece mejor y mas ordenado
clients = ["pablo", "ricardo", ] def add_client(client_name): global clients if client_name not in clients: clients.append(client_name) print("") print("Client Created".center(50, "*")) else: print("The client {} was already created".format(client_name).center(50)) def list_clients(): global clients print(clients) def _update_client(client_name): global clients if client_name in clients: update_name = str(input("What is the new client name? ")) clients.remove(client_name) clients.append(update_name) print("") print("Update Client Name".center(50, "*")) else: print("The client {} does not exist".format(client_name).center(50)) def delete_client(client_name): global clients if client_name in clients: clients.remove(client_name) print("") print("Client Removed".center(50, "*")) else: print("The client {} is not in clients list".format(client_name).center(50)) def _get_client_name(): return input("What is the client name? ") def run(): while True: command = str(input(""" What would you like to do today? [C]reate client [U]pdate client [D]elete client [S]how clients [E]xit : """)) command = command.upper() if command == "C": print("Create client".center(50, "=")) print("") client_name = _get_client_name() add_client(client_name) print("") list_clients() elif command == "U": print("Update client".center(50, "=")) print("") client_name = _get_client_name() _update_client(client_name) print("") list_clients() elif command == "D": print("Delete client".center(50, "=")) print("") client_name = _get_client_name() delete_client(client_name) print("") list_clients() elif command == "S": print("Show clients".center(50, "=")) print("") list_clients() elif command == "E": print("GOOD BYE".center(50, "=")) break else: print("Command invalid") if __name__ == "__main__": print("WELCOME TO PLATZI VENTAS".center(50, "=")) run()
Buena clase, esto se va poniendo más y más interesante. También es una buena idea utilizar un array/lista y ocupar .remove() para borrar el nombre del cliente, se me hizo más sencillo de esa manera.