Robin Jaime Beltran Montijo
Rhonal Velasco
Fredy Mendoza Vargas
Pasar de strings a listas en Python simplifica el manejo de clientes y mejora la legibilidad. Aquí verás cómo refactorizar un pequeño CRUD paso a paso usando métodos de lista como append, enumerate, index y remove, además de operadores de pertenencia y formateo con format.
¿Cómo refactorizar de strings a listas en Python?
Usar listas en lugar de strings elimina la necesidad de concatenar texto y gestionar separadores. Ahora los clientes viven en una lista y cada operación trabaja de forma directa sobre la estructura de datos.
¿Qué ajustes aplicar en create, list y update?
El objetivo es dejar de manipular texto y usar operaciones nativas de listas. Los operadores de pertenencia como in y not in funcionan igual en listas que en strings, pero ahora operan sobre elementos, no sobre caracteres.
¿Cómo agregar elementos con append?
Sustituye la concatenación y cualquier lógica de “añadir coma”. Si el cliente no existe, agrégalo con append.
clients = ['Pablo', 'Ricardo'] def create_client(client_name): global clients if client_name not in clients: clients.append(client_name)
¿Cómo iterar con enumerate y mostrar índice?
Para listar clientes con su “ID” temporal, usa la built-in function enumerate que devuelve par (índice, valor) durante el ciclo.
def list_clients(): for index, client in enumerate(clients): print('{}: {}'.format(index, client))
¿Cómo actualizar con index y reasignación?
Para cambiar el nombre de un cliente, primero localiza su posición con index y luego reasigna en ese índice.
def update_client(client_name, updated_name): global clients index = clients.index(client_name) clients[index] = updated_name
¿Cómo eliminar y buscar clientes de forma limpia?
Eliminar y buscar ahora son más directos porque la lista ya define límites entre elementos. Se puede quitar la función de “añadir coma” y cualquier división por separadores.
¿Cómo eliminar con remove sin índice?
Si conoces el nombre, no necesitas el índice: remove elimina la primera ocurrencia del valor.
def delete_client(client_name): global clients clients.remove(client_name)
¿Cómo buscar con operadores de pertenencia y control de flujo?
Recorre la lista y regresa True al encontrar coincidencia. Los return detienen la función en el momento exacto.
def search_client(client_name): for client in clients: if client != client_name: continue return True return False
not in / in: verifican pertenencia de forma legible.
Control de flujo: return termina la función y entrega el resultado inmediatamente.
Prueba en consola: listar muestra índices (0: Pablo, 1: Ricardo), crear agrega, buscar confirma existencia y borrar quita elementos. La funcionalidad externa se mantiene mientras la implementación interna mejora en claridad.
¿Te fue útil este enfoque con listas? Comenta qué parte te gustaría profundizar o qué otra estructura de datos quieres ver aplicada en el programa de plats y ventas.
Robin Jaime Beltran Montijo
Rhonal Velasco
Fredy Mendoza Vargas
Emilio Jesus Nuñez Pineda
PERAZA GOMEZ OLIVERIO
Omar Daniel Centeno
LUIS FERNANDO CASTAÑEDA CASTRO
Victor Hugo Soria
Juan Alejandro Huertas Alzate
Edwin Hernandez
Sebastian Pérez Quintero
Néstor Iván Cepeda Munevar
Facundo Nicolás García Martoni
ProfesorSantiago Ruiz Rincón
David Esteban Solorzano Taborda
Cristian Córdova
Omar Daniel Centeno
Jorge Andres Muñoz Becerra
Iván Fernández
Samuel Paredes
Carlos Fernando Pineda Montoya
Johanna Sanchez Vallejo
Alejo Gschwind
Genaro Flores
Luis Kennedy Saavedra Fuentes
Erik Elyager
Gerardo Alberto Soto Alvarez del Castillo
Jeyson David Vargas Crespo
Ricardo Rito Anguiano
Luis Martinez Hernandez
Jose Antonio Rojas Ollarves
Marlon Ramirez
Perla Godinez Castillo
Franco Casas
Kerwin Andrey Moreno Gomez
Roberto Sobarzo
Juan Emmanuel Díaz
index() es un método que busca la posición de un elemento en una lista y nos regresa su posicion. Y si hay varios elementos iguales, nos regresa el primer elemento
Buen aporte
Gracias por la referencia
Le doy un 10 a este profesor, su pasion su explicacion uffff ahora es que me encanta la programacion
Estoy de acuerdo, yo también le doy un 10 a este profesor, esa pasión por enseñar me encanta.
10 de 10 :D
Código actualizados:
import sys clients = ['luisa', 'juan'] def create_client(client_name): global clients if client_name not in clients : clients.append(client_name) else: print ('Client already is in the client\'s list') def list_clients(): for idx, client in enumerate(clients): print ('{} : {}'.format(idx, client)) def updated_client(client_name, updated_client_name): global clients if client_name in clients : index = clients.index(client_name) clients[index] = updated_name else: print ('Client is no it client\'s list') def delete_client(client_name): global clients if client_name in clients: clients.remove(client_name) else: print('Client is not in client\'s list') def search_client(client_name): for client in clients: if client != client_name: continue else: return True def _print_welcome(): print ('WELCOME TO PLATZI VENTAS') print ('*' * 50) print ('What would you like to do today ? ') print ('[C]reate client') print ('[L]ist client') print ('[U]pdated client') print ('[D]elete client') print ('[S]earch client') def _get_client_name (): client_name = None while not client_name: client_name = str.lower(input('What is the client name ? ')) if client_name == 'exit': client_name = None break if not client_name: sys.exit() return client_name 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 == 'L': list_clients() elif command == 'U': client_name = _get_client_name() updated_name = str.lower(input ('What is the updated client name ? ')) updated_client(client_name, updated_name) list_clients() elif command == 'D': client_name = _get_client_name() delete_client(client_name) list_clients() elif command == 'S': client_name = _get_client_name() found = search_client(client_name) if found: print('The client is in the client\'s list') else: print('The client: {} is not in our client\'s list'.format(client_name)) else: print ('Invalid command')
Gracias!
# pip install tabulate # from tabulate import tabulate def list_clients(): global Clients if Clients: print('Our Clients are :') show=[] for idx,name in enumerate(Clients): show.append([idx+1,name]) print(tabulate(show,headers=['N°','Name'],tablefmt='fancy_grid')) else: print(' I don´t have Clients in this moment') ## console output Our Clients are : ╒══════╤════════╕ │ N° │ Name │ ╞══════╪════════╡ │ 1 │ jose │ ├──────┼────────┤ │ 2 │ juan │ ├──────┼────────┤ │ 3 │ jorge │ ╘══════╧════════╛
Muchas gracias! Excelente aporte.
buenos días, cómo estan?
me pueden ayudar por favor con una consulta… ¿cuál es la razón por la que ya no se debe usar el
global clients
cuando definimos la función para listar los clientes? Si igual se esta llamando en la función
Las variables globales en Python se usan para evitar errores secundarios involuntarios.
Si no declaras la variable como “global” será siempre local (esto es diferente en otros lenguajes de programación).
Te recomiendo leer: global vs local en Python
Hola Sebastián, es simple, global solo se utiliza cuando vas a modificar un objeto global dentro de una función. Como solo vas a listar los clientes, no vas a modificar nada por lo que no es necesario usarla ;)
Que pasaría si de casualidad tuvieras por accidente dos nombres en la lista ex. clientes['juan','juan','pedro'] y quisieras usar el método de actualizar juan 🤔🤔
Toma la primera coincidencia, en este caso la posicion 0, la segunda coincidencia (posicion 1) seguiria igual.
++En lugar de:++
print('{}: {}'.format(idx, client))
++Podemos usar mejor++
print(f'{idx}: {client}')
Yeah, a mí también me gusta la segunda opción, es más fácil de leer.
Les comparto mi código como va, tiene algunas funcionalidades mas que el del profesor!
import sys clients = ['Pablo', 'Ricardo'] def Create_Cliente(client_name): global clients if client_name not in clients: clients.append(client_name) print('Client added') else: print('The name already is in clienṭ\'s list!!!') list_clients(clients) def delete_client(client_name): global clients clients.remove(client_name) print('Client removed') list_clients(clients) def update_client(client_name): global clients if client_name not in clients: print('The name you pick is not in the clienṭ\'s list!!!') else: updated_client_name = input('Enter the new name: ') index = clients.index(client_name) clients[index] = updated_client_name print('Client Updated') list_clients(clients) def search_client(client_name): global clients for client in clients: if client_name == client: return True else: continue def _finder(client_name): client_finded = search_client(client_name) if client_finded : print('The client {} is in the client\'s list'.format(client_name)) else: print('The client {} isn\'t in the client\'s list'.format(client_name)) list_clients(clients) def break_Name(client_name): if client_name == 'Exit': print('Good Bye') sys.exit() pass def list_clients(clients): print('') print('-°'*28) print('') for idx, client in enumerate(clients): print('{}: {}'.format(idx, client)) print('') print('-°'*28) print('') def welcome(): command = None client_name = None count_Welcome = 0 while command != 'E': command = None client_name = None count_Welcome +=1 print('*'*56) print('') print('EXECUTION NUMBER {}'.format(count_Welcome)) global clients print('') if count_Welcome == 1: print('-'*15+'WELCOME TO PLATZI SALES!!!'+'-'*15) print('') print('') print('*' * 56) print('') print('What would you like to do?') print('') print('[C]reate Client') print('[U]pdate') print('[S]earch') print('[L]ist') print('[D]elete client') print('[E]xit') print('') print('At any time you can enter "Exit" to escape the program') command = input('Please tell us your option: ') print('') if command == 'Exit': break_Name(command) command = command.upper() if (command == "C"): while client_name == None or client_name == '': client_name = input('Please enter the name you want to create: ') break_Name(client_name) Create_Cliente(client_name) elif (command == 'L'): list_clients(clients) break_Name(client_name) elif (command == "D"): while client_name == None or client_name == '': client_name = input('Please enter the name you want to delete: ') break_Name(client_name) delete_client(client_name) elif (command == 'U'): while client_name == None or client_name == '': client_name = input('Please enter the name you want to Update: ') break_Name(client_name) update_client(client_name) elif (command == 'S'): while client_name == None or client_name == '': client_name = input('please enter the name you want to Seach: ') break_Name(client_name) _finder(client_name) elif (command == 'E'): print('Good Bye') break else: print('Invalid option: ') if __name__ == '__main__': welcome()
Muy bien explicado y desarrollado este asunto de las listas.
Es interesante que mientras contenido se aprende, mas fácil y lógico se vuelve programar.
Les recomiendo en Esta pagina web donde podemos ver mas ejemplos y casos acerca de como usar listas para basarse en la estructura de datos.
Que buena pagina gracias.
Hola @sampar01, esa pagina web que recomiendas usa Python 2, te recomiendo que no la uses pues ahora lo recomendable es aprender directamente Python3 que es la versión actual con soporte y que incluye muchos cambios de sintaxis que no se usan en python 2.
Te recomiendo este tutorial oficial de Python -
Mi código hasta ahora, le agregue el modulo os para limpiar la consola y tener un menú mas limpio.
Para linux:
import os os.system('clear')
Para windows:
import os os.system('cls')
import sys import os clients = ['Alejo','Alvaro'] def create_client(client_name): global clients if not (client_name in clients): clients.append(client_name) else: os.system('clear') print('The client is already in client\'s list.') print('[Enter] to continue]') input() def update_client(client_name): global clients if (client_name in clients): updated_client = input('Insert a new name: ') index = clients.index(client_name) clients[index] = updated_client else: os.system('clear') print('The client isn\'t in client\'s list.') print('[Enter] to continue]') input() def delete_client(client_name): global clients if (client_name in clients): clients.remove(client_name) else: os.system('clear') print('The client isn\'t in client\'s list.') print('[Enter] to continue]') input() def list_clients(): for idx , client in enumerate(clients): print(f"{idx}:{client}") def search_client(client_name): if client_name in clients: return True else: return False def get_client_name(): client_name = None while not (client_name): client_name = input('Insert the client name: ') return client_name def _print_welcome(): print('Welcome to Platzi Ventas.') print('*' * 25) print('Menu:') print('[C]reate client.') print('[U]pdate client.') print('[D]elete client.') print('[L]ist clients.') print('[E]xit.') print('Insert a command: ') if __name__ == '__main__': opt = None while (opt != 'E') or (not opt): _print_welcome() opt = input().upper() if (opt == 'C'): os.system('clear') print('Creating a new client...') client_name = get_client_name() create_client(client_name) elif (opt == 'U'): os.system('clear') print('Updateing a client...') client_name = get_client_name() update_client(client_name) elif (opt == 'D'): os.system('clear') print('Deleting a client...') client_name = get_client_name() delete_client(client_name) elif (opt == 'L'): os.system('clear') list_clients() print('[Enter] to continue]') input() elif (opt == 'S'): client_name = get_client_name() found = search_client(client_name) if (found): print(f'The client {client_name} is in client\'s list.') else: print(f'The client {client_name} isn\'t in client\'s list.') elif (opt == 'E'): os.system('clear') sys.exit() else: os.system('clear') print('Try again! Invalid command.') print('[Enter] to continue]') input() os.system('clear')
El buscar cliente también puede ser
def search_client(client_name): return client_name in clients```
Por qué para la funciOn search si intera la lista clients con un for loop. Pero en create, update y delete puede interar con solo condicional if? Yo intenté interar en la función search con el condicional if y me arrojó error!
Muestra el error y así te podemos ayudar mejor.
Si te muestra un error en 'continue' es por que esa sentencia solo se puede hacer en bucles como for y no en un if
Hola, en la función de update_client el index es una función???
index = client.index(client_name)
Como funciona el client.index???
Muchas gracias...
Si amigo, es una funcion de la clase lista. Recibe como parametro un valor y te retornara el indice del mismo en la lista.
Yo hice un poco distinta la función search y no retorna ningún valor, directamente se imprime desde ahí, también en lugar de recorrer la lista directamente pregunto si encuentra el elemento.
def search_client(client_name): global clients if client_name in clients: print('The client {} is in the client list'.format(client_name)) else: print('The client {} isn\'t in the client list'.format(client_name))
TIP Es mas organizado trabajar con una funcion llamada run() para introducir todo el bloque de codigo donde se llaman las funciones y en el entry point unicamente hacer el llamado de la funcion es una buena practica y es lo que se hace a nivel profesional
Muy cierto compañero, se me hace extraño que el profesor no lo haya hecho hasta este punto del curso.
import sys clients = ['pablo', 'ricardo'] def create_client(client_name): global clients if client_name not in clients : clients.append(client_name) else: print ('Client already is in the client\'s list') def list_clients(): for idx, client in enumerate(clients): print ('{} : {}'.format(idx, client)) def updated_client(client_name, updated_client_name): global clients if client_name in clients : index = clients.index(client_name) clients[index] = updated_name else: print ('Client is no it client\'s list') def delete_client(client_name): global clients if client_name in clients: clients.remove(client_name) else: print('Client is not in client\'s list') def search_client(client_name): for client in clients: if client != client_name: continue else: return True def _print_welcome(): print ('WELCOME TO PLATZI VENTAS') print ('*' * 50) print ('What would you like to do today ? ') print ('[C]reate client') print ('[L]ist client') print ('[U]pdated client') print ('[D]elete client') print ('[S]earch client') def _get_client_name (): client_name = None while not client_name: client_name = str.lower(input('What is the client name ? ')) if client_name == 'exit': client_name = None break if not client_name: sys.exit() return client_name 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 == 'L': list_clients() elif command == 'U': client_name = _get_client_name() updated_name = str.lower(input ('What is the updated client name ? ')) updated_client(client_name, updated_name) list_clients() elif command == 'D': client_name = _get_client_name() delete_client(client_name) list_clients() elif command == 'S': client_name = _get_client_name() found = search_client(client_name) if found: print('The client is in the client\'s list') else: print('The client: {} is not in our client\'s list'.format(client_name)) else: print ('Invalid command')
Tengo un pequeño problema en el List_clients en el que me muestra la lista como esta definida en la variable. Este es mi código
import sys clients = ['franco','matias','luis','tomas','rebeca'] def create_client(client_name): global clients if client_name not in clients: clients.append(client_name) else: print("El cliente ya esta en la lista.") def update_client(client_name, updated_client_name): global clients if client_name in clients: index = clients.index(client_name) clients[index] = updated_client_name else: print("El cliente no se encuentra en la lista.") def delete_client(client_name): global clients if client_name in clients: clients.remove(client_name) else: print("El cliente no se puede borrar por que no esta en la lista.") def search_client(client_name): for client in clients: if client != client_name: continue else: return True def list_clients(): for idx, client in enumerate(clients): print(f"{idx}: {client}") def _print_welcome(): print("Bienvenido") print("*" * 50) print("Que es lo primero que va a hacer?") print("[C]rear cliente") print("[L]eer clientes") print("[A]ctualizar") print("[B]orrar cliente") print("[S]earch client") def _get_client_name(): client_name = None while not client_name: client_name = input("Cual es nombre del cliente? ") if client_name == 'exit': client_name = None break if not client_name: sys.exit() return client_name 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 == "B": client_name = _get_client_name() delete_client(client_name) print(clients) elif command == "A": client_name = _get_client_name() updated_client_name = input("Cual es el nombre del cliente actualizad: ") update_client(client_name, updated_client_name) print(clients) elif command == "L": print(clients) elif command == "S": client_name = _get_client_name() found = search_client(client_name) if found: print(f"El cliente {client_name} se encuentra en la lista de clientes") else: print(f"El cliente: {client_name} no se encuentra en la lista de clientes") else: print("Ingrese un comando valido")```
hola amigo, no había visto tu problema, espero hayas podido solucionarlo, pero si no es así, te dejo la solución.
en tu menú de comandos, solo mandas a imprimir tu lista CLIENTS
elif command == "L": print(clients)
por lo contrario tendría que mandar a llamar tu función list_client()
elif command == "L": list_clients()
y listo, solo eso, espero haberte ayudado. ñ.ñ
Excelente!!
la funcion search puede ser de la siguiente forma:
def search_name(name): global clients return name in clients