Personaliza tu programa en Python con una interfaz de línea de comandos clara y funcional. Aquí verás cómo definir funciones, imprimir un menú de opciones en inglés, capturar input del usuario y controlar el flujo con condicionales para crear y validar clientes en Platzi Ventas. Todo con buenas prácticas de indentación y mensajes útiles.
¿Cómo construir una bienvenida y menú en Python para una CLI?
Para iniciar, se crea una función auxiliar con el keyword def que imprime un saludo, una línea separadora y un pequeño menú de comandos en inglés. Además, se aprovecha el operador de multiplicación para generar un separador con asteriscos sin repetir caracteres manualmente.
Usa una función para encapsular la bienvenida y el menú.
Emplea operadores contextuales: '*' para repetir cadenas.
Muestra comandos en inglés por práctica profesional.
defprint_welcome():print('Bienvenidos a Platzi Ventas')print('*'*50)print('What would you like to do today?')print('[C] Create client')print('[D] Delete client')print_welcome()
¿Qué es una función auxiliar con el keyword def?
Es un bloque reutilizable que nombra una acción específica, como mostrar la bienvenida. Mejora la legibilidad y facilita el mantenimiento.
¿Cómo generar separadores con operadores contextuales?
Multiplica una cadena por un entero para construir líneas: '**' * 50 crea un separador uniforme y ajustable.
¿Por qué los mensajes están en inglés?
Porque el software, la documentación y los programs suelen estar en inglés: es buena práctica profesional. Si se requiere, luego se puede aplicar internacionalización.
¿Cómo capturar input y controlar el flujo con condicionales?
La función input detiene la ejecución hasta recibir datos. Con if/elif/else decides qué acción ejecutar: crear un cliente, dejar un placeholder con pass para borrar, o marcar un comando inválido.
input captura datos del usuario.
if/elif/else define el flujo según el comando.
placeholder con pass reserva la lógica pendiente.
command =input('Enter command: ')if command =='C': client_name =input('What is the client name? ') create_client(client_name) list_clients()elif command =='D':# placeholder: lógica de borrado pendientepasselse:print('Invalid command')
¿Cómo validar y añadir a la lista de clientes sin duplicados?
Antes de añadir, verifica si el nombre ya existe en la lista de clientes. Si no está, se agrega; si ya está, informa al usuario. La indentación en Python es crítica: cada bloque bajo if/else debe estar correctamente indentado para evitar errores y mejorar la claridad.
Verifica existencia con "in" para evitar duplicados.
Añade con append solo si no existe.
Informa con un mensaje claro si ya está.
Respeta la indentación en cada bloque.
clients =[]defcreate_client(client_name):if client_name notin clients: clients.append(client_name)else:print('El cliente \'{}\' ya está en la lista de clientes.'.format(client_name))
¿Cómo manejar comillas y caracteres de escape?
Si necesitas comillas simples dentro de comillas simples, escápalas con una diagonal invertida: ' permite incluir comillas internas sin romper la cadena.
Usa \' para comillas simples dentro de comillas simples.
Mantén los mensajes consistentes y comprensibles.
Evita duplicar valores en la lista de clientes.
¿Quieres que ampliemos la lógica de borrado o veamos internacionalización con más detalle? Deja tus dudas o mejoras en los comentarios.
Este curso no me gusta,
el profesor da muchas cosas por sentado
y va demasiado rápido sin explicar cada una de las cosas.
Al final vas haciendo todas las cosas sin entenderlas.
me parece una pena porque terminé perdiendo el interés
justamente había venido a platzi para aprender python
y me entusiasmé mucho al iniciar los cursos con el de programación básica que da fredy porque lo hace muy sencillo
después con el de algoritmos en c que también me pareció muy facíl de seguir
entonces inicié este de python y desde la primera clase me perdí completamente
dice que usa vim
pero no dice como usarlo ni como instalarlo
las explicaciones van muy rápidas y aunque las entiendo, no me parecen sentillas de seguir a la velocidad que habla.
he perdido casi medio día entendiendo una par de clases en este curso intentanto buscar por otro lado cómo funcionan las cosas que el profesor pasó por alto
mientras que en los anteriores curso, todo era bastante sencillo
quedé decepcionado de este curso
espero y puedan mejorar esa parte.
recuerden que los cursos los toma gente que no tiene ni idea de programación
saludos
Concuerdo con que faltó dar una introducción de vim y su uso. Explica bien el profesor, pero pasa por alto puntos que por momentos se hacen confusos.
si creo que el uso de vim no era necesario por que si llega a confundir 😦
Me parece muy buena la explicación del curso. El profe se toma el tiempo en dar ejemplos bastante detallados para quienes no tienen experiencia programando. Estudiar ‘online’, demanda una actitud diferente del estudiante, pues exige resolver inquietudes o dudas de manera diferente y proactiva. Respecto al interés o motivación, no depende del profesor. Podría tomar una clase magistral con un profesor de Harvard, pero si no es de mi interés o no estoy motivado, no servirá de nada.
Así como en la universidad presencial, también es necesario, muchas veces, buscar información de otras fuentes, para complementar y también (importante) confirmar lo que uno está aprendiendo.
La actitud del estudiante y su motivación, son elementos intrínsecos que el mismo estudiante, deberá aprender a manejar.
Hay personas que aprenden a estudiar privados de libertad o incluso bajo condiciones (externas e internas), profundamente aún más desfavorables.
Lo importante es lograr el objetivo que uno se trazó.
Hay cosas en las que debo parar e investigar, como usar cmd por ejemplo, pero busco o mismo pregunto. Hay que tener paciencia, el curso va bien.
Mi código comentado de este ejrecico, espero a alguien le sirva 👍
clients ='Pablo, Ricardo' #creamos el string
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
print('[C]reate client')print('[D]elete client')def create_client(client_name): global clients #Utilizamos global para definir que la variable es la globarl, es decir la que definimos con pablo y ricardo
clients_minusculas = clients.lower() #convertimos la cadena de texto en minusculas y la guardamos en otra variable para no diferenciar entre "Pablo" y "Pablo"if client_name not inclients_minusculas: #si el nombre del cliente no esta en clients_minusculas
_add_coma() #ejecutamos la funcion _add_coma para agregar una coma y un espacio
clients += client_name #adicionamos el nuevo string
else:print('Client already exists') #Sino mostramos un mensaje al usuario
def _add_coma(): #el nombre de la función comienza con un guión bajo para establecer que será una funcion privada
global clients
clients +=", " #se agrega una coma y un espacio al string para separar los nuevos valores
def list_clients(): #función que muestra la lista de clientes
global clients
print(clients) #imprimimos el string clientes
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" client_name =input('What is the client name?') #guardamos en la variable client_name el valor de los caracteres que ingresa el usuario hasta recibir un enter
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
list_clients() #Ejecutamos la funcion listar clientes
elif command =='d': #si el dato ignresado por el usuario es "d" pass
else:print('Invalid command')input() #Escribimos un input para que el programa haga una pausa y no cierre la ventana hasta recibir un enter
Excelente, sirve de bastante ayuda
😃
Genial, gracias.
De mucha ayuda
Recomiendo a las personas que jamas programaron absolutamente nada:
Hacer antes el de programación básica.
Complementar conocimiento siempre es bueno, no quedarse con lo que dice el curso, siempre buscar mas en google, o stackoverflow
NO preocuparse por el IDE, ya que en este momento, cuando estas comenzando, no importa tanto, ya después te casas con otro.
Intentar darse ánimos con otros que esten empezando, o solo, siempre es difícil al principio, yo cuando aprendí mi primer lenguaje fue difícil, pero cuando tomas el truco, los otros son fáciles.
Un abrazo!!
Este comentario tiene 6 años y tan poquitos corazones que se me hace una injusticia
Fua, ya 6 años tiene mi comentario.
Para realizar la traduccion podemos hacer uso de la libreria gettext y la herramienta pygettext
Les comento los pasos que segui:
En el codigo se debe encapsular con _() todos los string que se quieren traducir, por ejemplo:
def _print_welcome():print('*'*50)print(_('WELCOME TO PLATZI VENTAS'))print('*'*50)print(_('What would you like to do today?'))print(_('[C]reate client'))print(_('[D]elete client'))
Descargar y ejecutar
C:\platzi-ventas> python .\pygettext.py-d main main.py
Esto crea un archivo .pot llamado main.pot. Este es un archivo de texto que lista todos los strings que encontro en el codigo que se encuentran encapsulados entre _()
Para editar el archivo .pot de forma mas facil, descargue el programa Poedit
Antes de la ejecucion del programa, se debe crear la siguiente ruta debajo del directorio del proyecto:
mkdir ./locale/es/LC_MESSAGES/
Abrir el programa y luego de seleccionar el idioma al cual se va a traducir, cargamos el archivo en File -> New from POT/PO file seleccionamos el archivo main.pot generado en la ejecucion del archivo pygettext, procedemos a realizar las traducciones.
Se guarda el archivo con nombre main en la ruta creada previamente /locale/es/LC_MESSAGES/ esto generara dos archivos y main.po
Luego de esto solo importamos las librerias para poder hacer uso de la traduccion:
import gettext
es = gettext.translation('main', localedir='locale', languages=['es'])es.install()
El resultado seria lo siguiente, los string que marcamos con _() seran traducidos segun la traduccion que generamos
PSC:\platzi-ventas> python.exe.\main.py**************************************************BIENVENIDOAPLATZIVENTAS**************************************************Que le gustaria realizar hoy?[C]rear cliente
[E]liminar cliente
Por si a alguien le interesa informarse sobre internacionalizar el lenguaje de nuestro programa:
Nota : Yo estoy usando version 2.7.15 la que viene por default y la funcion input() no funciona, la cambie por la funcion raw_input() y funciono perfectamente.
Te recomiendo que instales la 3.x
Todo el curso se maneja con la versión 3
Líneas de código agregadas y/o modificadas:
def create_client(client_name): global clients
if client_name not inclients: clients += client_name
_add_comma()else:print('Client already is in the client\'s list')def _print_welcome():print('WELCOME TO PLATZI VENTAS')print('*'*50)print('What would you like to do today ? ')print('[C]reate client')print('[D]elete client')if __name__ =='__main__':_print_welcome() command =input()if command =='C': client_name =input('What is the client name ?')create_client(client_name)list_clients() elif command =='D': pass
else:print('Invalid command')
El maestro explica bien, deberias tomar un curso de programación basica.
una pequeña modificacion en el if name==… para que funcione en bucle
if __name__=='__main__':print('[I]to initiate') init=input()while init=='I':_print_welcome() command =input()if command =='C': client_name =input('cual es el nombre del nuevo cliente?')create_client(client_name)list_clients() elif command =='D': pass
else:print('Invalid command')```
Genial /o<o/
El curso va perfecto, me está gustando mucho
hola buenos dias, para los que dicen que no les gusta este curso, se respeta , pero en mi opinion si no sabes algo que algunas clases o cursos no hablan a profundida como lo de vim hay otro que si lo hace, en platzi puedes aprender mucho como dice freddy es educacion efectiva osea en todo el entorno de la plataforma de platzi puedes encontrar las respuestas .
Recomendación para el curso:
Este profesor es bueno pero extremadamente rápido, si es tú primer curso de python, para aquí y ve con Facundo (imparte el curso básico-intermedio-avanzado de python) y despúes vuelves aquí. Este curso ees un reforzamiento (en mi opinión)
Lo que logro observar es que hast este punto, no hay persistencia de los clientes nuevos que vamos registrando, supongo que mas adelante, se solucionara este bug
#💡Algunos comandos útiles para aplicar a los strings son:
.
nombre_variable.upper() ➡️ Convierte el string a mayúsculas.
nombre_variable.capitalize(). ➡️ Convierte la primera letra del string en Mayúscula.
nombre_variable.lower() ➡️ Convierte el string a minúsculas.
nombre_variable.title() ➡️ La primera letra de cada palabra a Mayúscula.
.
Con esto pueden transformar la letra que el usuario elija evitando errores al momento de utilizar mayúsculas o minúsculas:
# Se puede aplicar de la siguiente forma:if command.upper()=='C': client_name =input('What is the client name?: ')create_client(client_name)list_clients()
Utilzar formato para imprimir facilmente
.
Otra cosa muy útil es aplicar formato a lo que queremos imprimir utilizando `print(f'Todo lo que esté dentro puede mezclar un string con resultados de una variable'.
.
---Para dar formato debemos de comenzar con la letra "f" seguida de comillas '', pueden ser simples o dobles.# Ejemplo:def _print_welcome():print(f'\n {"*" * 50}')print(f'\n\t\tWelcome to ECOmmerce')print(f'\n\tThe most sustainable E-Commerce')print(f'\n {"*" * 50}')print(f'\n\t What would you like to do today?')print(f'\n\t\t [C]reate client')print(f'\n\t\t [D]elete client')--- nota:\n -->Genera un salto de línea
\t -->Genera un salto de 4 espacios
.
Resultado:
.
.
Utilizar formato es muy útil, ya que podemos incluir el resultado de diferentes variables y combinarlas dentro de un string lo cuál nos ahorra tiempo y código. Para poder introducirlas simplemente nombramos a la variable dentro de llaves {}. Ejemplo:
# Función que imprime la lista de clientes
def list_clients(): global clients
print(f' >>> The list of clients is: {clients}')# El resultado será el siguiente:>>>The list of clients is: pablo, ricardo, daniel,
formulas ='Formula 5kg,Formula Parche,'materiales ='Enable2010,92020,'def crear_formula(nombre_formula): global formulas
if nombre_formula not informulas: formulas += nombre_formula
_add_coma()else:_mensaje_error()def nuevo_material(nombre_material): global materiales
if nombre_material not inmateriales: materiales += nombre_material
_add_coma()else:_mensaje_error()def lista_formulas(): global formulas
print(formulas)def lista_materiales(): global materiales
print(materiales)def _mensaje_error():print('Revisa tu lista!!!\n Ya se encuentra en BD')def _add_coma(): global formulas
global materiales
formulas +=',' materiales +=','def _bienvenida():print('FOMULAS PLASTICOS CANTABRIA')print('QUE VAS A REALIZAR?')print('^'*50)print('[C]rear formula')print('[N]uevo material')print('[L]ista de formulas')print('[ML]ista materiales para formular')print('[E]limminar formulario')print('[ME]limniar material')print('[A]ctualizar formulario')print('[B]uscar formula')if __name__ =='__main__':_bienvenida() comando =input() comando = comando.upper()if comando =='C': nombre_formula =input('Cual es la nueva formula?: ')crear_formula(nombre_formula)lista_formulas() elif comando =='N': nombre_material =input('Cual es el nombre del material?: ')nuevo_material(nombre_material)lista_materiales() elif comando =='L':lista_fomulas() elif comando =='ML':lista_materiales() elif comando =='E': pass
elif comando =='ME': pass
elif comando =='A': pass
elif comando =='B': pass
else:print('Comando INVALIDO!!!\n ...Revisa las opciones y comandos disponibles ^')
Una cosa que veo es que python reconoce minusculas y mayusculas, por lo que si coloco c el programa termina
No solo python, todos los lenguajes dirán que una C es diferente de una c, porque su código ASCII es diferente. Lista de códigos.
Si desean que su aplicación de terminal no lusca tan aburrida, pueden usar una librería llamada colorama.
Esta librería le da color a sus textos en print() y en input(). No viene instalada junto con los módulos de Python, por lo tanto es necesario instalarla con pip.
Instalación de Colorama:
pip install colorama
Les pongo un ejemplo de lo que pueden hacer con el modulo.
from colorama import Fore, init #Importamos los módulos que ocupamos #Colorama settingsinit()#Es necesario para empezar a colorearFR = Fore.RESET
FRED = Fore.RED
FGREEN = Fore.GREEN
FGREENX = Fore.LIGHTGREEN_EX
FYE = Fore.YELLOW
FYEX = Fore.LIGHTYELLOW_EX
FCYAN = Fore.CYAN
def_print_welcome():print('Welcome to'+ FGREEN +' PLATZI VENTAS'+ FR)print('-'*25)print(FGREENX +'What would you like to do today?'+ FR)print('[C]reate client')print('[D]elete client')
El output de eso seria:
Ahí disculpen si escribí algo mal, tengo pésima ortografía. :p
Gracias por compartir.
Este curso es de lo mejor!
En la condición de agregar al cliente es necesario también poner en minúsculas el valor de entrada en la función
def create_client(client_name): global clients
clients_minusculas = clients.lower()if client_name.lower() not inclients_minusculas:_add_coma() clients += client_name
else:print('Client already exists')
Recuerden: Es un curso intermedio, hay que tener conocimientos previos para poder entender varios conceptos.