Básicos del Lenguaje

1

Guía de instalación y conceptos básicos

2

Archivos y slides del curso práctico de Python

3

IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.

4

¿Qué es la programación?

5

¿Por qué programar con Python?

6

Operadores matemáticos

7

Variables y expresiones

8

Presentación del proyecto

9

Funciones

10

Usando funciones en nuestro proyecto

11

Operadores lógicos

12

Estructuras condicionales

Uso de strings y ciclos

13

Strings en Python

14

Operaciones con Strings en Python

15

Operaciones con strings y el comando Update

16

Operaciones con strings y el comando Delete

17

Operaciones con strings: Slices en python

18

For loops

19

While loops

20

Iterators and generators

Estructuras de Datos

21

Uso de listas

22

Operaciones con listas

23

Agregando listas a nuestro proyecto

24

Diccionarios

25

Agregando diccionarios a nuestro proyecto

26

Tuplas y conjuntos

27

Tuplas y conjuntos en código

28

Introducción al módulo collections

29

Python comprehensions

30

Búsquedas binarias

31

Continuando con las Búsquedas Binarias

32

Manipulación de archivos en Python 3

Uso de objetos y módulos

33

Decoradores

34

Decoradores en Python

35

¿Qué es la programación orientada a objetos?

36

Programación orientada a objetos en Python

37

Scopes and namespaces

38

Introducción a Click

39

Definición a la API pública

40

Clients

41

Servicios: Lógica de negocio de nuestra aplicación

42

Interface de create: Comunicación entre servicios y el cliente

43

Actualización de cliente

44

Interface de actualización

45

Manejo de errores y jerarquía de errores en Python

46

Context managers

Python en el mundo real

47

Aplicaciones de Python en el mundo real

Conclusiones finales

48

Python 2 vs 3 (Conclusiones)

Clases bonus

49

Entorno Virtual en Python y su importancia: Python en el mundo real

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

While loops

19/49
Recursos

Al igual que las for loops, las while loops nos sirve para iterar, pero las for loops nos sirve para iterar a lo largo de una secuencia mientras que las while loops nos sirve para iterar mientras una condición sea verdadera.

Si no tenemos un mecanismo para convertir el mecanismo en falsedad, entonces nuestro while loops se ira al infinito(infinite loop).

Aportes 72

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Código actualizado:

import sys

clients = 'luisa, juan,'

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 updated_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 no it client\'s list')


def delete_client(client_name):
	global clients

	if client_name in clients:
		clients = clients.replace(client_name + ',', '')
	else:
		print('Client is not in client\'s list')

def search_client(client_name):
	clients_list = clients.split(',')

	for client in clients_list:
		if client != client_name:
			continue
		else:
			return True

def _add_comma():
	global clients

	clients += ','


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_client_name = str.lower(input ('What is the updated client name ? '))
		updated_client(client_name, updated_client_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')

Hay que tener en cuenta que el while not client_name valida si no se agrega ningun valor, si se ingresan solo espacios, el los va a tomar como el nombre.

Para solucionar esto y limpiar aun asi los espacios en caso de que se vayan antes o despues de un nombre real, se puede hacer agregando

client_name = input("What is the client name? ").strip()

Como súper curiosidad, si declaras una variable con valor “None”, el tipo de esa variable será “NoneType”

>>> client_name = None
>>> type(client_name)
<class 'NoneType'>

Descubri un pequeño error en el codigo que me gustaria corregir aca:

para el caso en el que por ejemplo se agregara el nombre “Tatiana” y acto seguido se agregara el nombre “Ana” el sistema detectara que ya existe puesto que esta contenido en la cadena del nombre anterior, para arreglar esto se corrige la condicion del create_client al concatenar una coma (,) la cual es la que indica la separacion de nombre para indicar en donde termina un nombre completo.

`def create_client(client_name):
global clients

if client_name+',' not in clients:
    clients += client_name
    _add_comma()
else:
    print('Client already exists')`

Si caen un un infinitive loop pueden detener la ejecución del código en la consola pulsando Ctrl + C

David es un profesor idóneo, ¡¡por que no fuiste mi profesor en el pasado!!!

Un truco en el interactive shell. Este tiene un historial, puedes accerder a el pulsando la fecha hacia arriba (la tecla), e ir metiendo los ultimos fragmentos de codigo sin tener que escribirlos nuevamente

Pasar client_name a none es como hacer trampa, quedaria mejor que el sys.exit() se agregue a la condicional “if client_name == ‘exit’:”

if client_name == ‘exit’:
sys.exit()

saludos. excelente prof.

En este paso me hubiese servido mas seguir la configuración del profesor, ya que para capturar los nombres indefinidamente me toco hacer un loop por cada opción, sin embargo me sigue gustando mas mi personalización.

Adicionalmente incluí en la función Welcome un While que permite ejecutar el programa hasta que el usuario decida salir, ya sea en la captura del nombre o en la toma de decisiones iniciales. Esto implico crear la función name_Break, que evalua el nombre ingresado y si es “Exit” termina el programa!!


import sys



clients = ['Pablo', 'Ricardo']

def Create_Cliente(client_name):
	global clients
	
	if client_name not in clients:

		clients.append(client_name)
		print(clients)
		print('Client added')

	else:

		print('The name already is in clienṭ\'s list!!!')

def delete_client(client_name):
	global clients
	clients.remove(client_name)
	print(clients)
	print('Client removed')


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: ')
		clients.remove(client_name)
		clients.append(updated_client_name)
		print(clients)
		print('Client Updated')

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))

def break_Name(client_name):

	if client_name == 'Exit':
		print('Good Bye')
		sys.exit()
	pass


def welcome():
	
	command = None
	client_name = None

	while command != 'E':

		global clients
		print('Welcome to Platzi Sales')
		print('')
		print('*' * 50)
		print('')
		print('What would you like to do today?')
		print('')
		print('[C]reate Client')
		print('[U]pdate')
		print('[S]earch')
		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: ')
		
		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 == "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()

ctl + c: Para parar el bucle infinito.

Con Ctrl + L también pueden limpiar la terminal

la funcion getClientName() me quedó diferente y funcional

import sys
print('\n\nHello, this is your software practice!')
clients = 'Carlos, Frank, '
print('*' * 70)
print('What would you like to do?')
print('[C]reate a new client')
print('[S]earch a client')
print('[D]elete a client')
print('[U]pdate a client')



"""*****************************FUNCTIONS********************************"""
"""*****************************FUNCTIONS********************************"""
def getClientName():
  clientName = None
  while not clientName:
    clientName = input('What\'s the client name? ')
    if clientName == 'exit':
      sys.exit()
  return clientName

def addComma():
  global clients
  clients += ', '

def clientList():
  global clients
  print(clients)

def createClient(clientName):
  global clients
  if clientName not in clients:
    clients += clientName
    addComma()
  else:
    print('Client already is in the client\'s list')

def searchClient(clientName):
  global clients
  if clientName in clients:
    print('The client ' + clientName + ' is in the client\'s list')
  else:
    print('The client ' + clientName + ' isn\'t in the client\'s list')

def deleteClient(clientName):
  global clients
  if clientName in clients:
    clients = clients.replace(clientName + ',','')
    print('This client has been deleted!')
  else:
    print('This client not exist in the client list!')

def updateClient(clientName, newClientName):
  global clients
  if clientName in clients:
    clients = clients.replace(clientName + ',', newClientName + ',')
  else:
    print('Doesn\'t exist this client name! ')

"""*****************************FUNCTIONS********************************"""
"""*****************************FUNCTIONS********************************"""





"""***************************IF STATEMENTS******************************"""
"""***************************IF STATEMENTS******************************"""
command = input()
if command == 'C':
  clientName = getClientName()
  createClient(clientName)
  clientList()
elif command == 'S':
  clientName = getClientName()
  searchClient(clientName)
elif command == 'D':
  clientName = getClientName()
  deleteClient(clientName)
  clientList()
elif command == 'U':
  clientName = getClientName()
  newClientName = input('What\'s the new client name? ')
  updateClient(clientName, newClientName)
  clientList()
else:
  print('INVALID KEY')
  
"""***************************IF STATEMENTS******************************"""
"""***************************IF STATEMENTS******************************"""

Creo que necesitab oir que los errores son normales ❤️

Dando el salto fuera del script de código.

.
Que emocionante comenzar a utilizar scripts que se ejecutan fuera de nuestro código para llegar a establecer comunicación con otros protocolos.
.

¡Backend aquí vamos!

.
Mi código:

def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input(f'\n\tWhat is the client name?:')

        if client_name == 'exit':
            client_name = None
            break

    if not client_name:
        sys.exit()
    return client_name

While loops

Repite un statement hasta que la condición que le estamos pasando sea falsa, debemos tener cuidado con los loops infinitos.

Stack Overflow

Aparte de ser una de las comunidades más grandes de developers y dónde puedes encontrar muchas respuestas y ayudas para tu código, es cuando un programa está intentando utilizar más memoria de la que tiene disponible.

Recuerden que el return es el fin de la función por lo tanto si agregan cualquier cosa dentro de la función después del return el programa no funcionará.

Agregando validación en caso de que el cliente escriba exit en mayuscula

Aprovechando las posibilidades de los loops definí una variable “finish” con valor False y cree un While loop en donde puse toda la parte de las opciones de forma que pueda usar los comandos de manera continua y el programa solo termine cuando ingrese el comando “EXIT”.

if __name__ == '__main__':
    
    finish = False

    _print_welcome()

    while(finish == False):
        _print_options()
        command = input()
        command = command.upper()

        if command == 'C':
            client_name = _get_client_name()
            create_client(client_name)
            list_clients()
        elif command == 'R':
            list_clients()
        elif command == 'U':
            client_name = _get_client_name()
            updated_client_name = input('What is the updated client name? ')
            update_client(client_name,updated_client_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 clients list')
            else:
                print('The client: {} is not in our clients list'.format(client_name))
        
        elif command == 'EXIT':
            finish = True
        else:
            print('Invalid command')

También aproveche para separar la impresión de las opciones del mensaje de bienvenida para no estar imprimiendo lo todo el tiempo.

def _print_welcome():
    print('WELCOME TO PLATZI VENTAS')
    

def _print_options():
    print('*' * 50)
    print('What would you like to do today?')
    print('[C]reate client')
    print('[R]ead clients')
    print('[U]pdate client')
    print('[D]elete client')
    print('[S]earch client')

Cuando hizo el ejercicio antes del Bug, tuve un error de sintaxis, en visual code, solo por el hecho que había cometido un error en los espacios previos al iniciar el renglón, alguien podría explicarme porque pasa eso?, en html no tengo esos problemas.

quién esté usando linux el

sys.exit()

al parecer funciona correctamente en Mac, pero en linux se debe colocar:

syst.exit(0)

Si tienen el error

IndentationError: unexpected indent

Deben verificar que esten dando los espacios correctos despues de usar " : ", ya que python es muy estricto con eso

El módulo ‘sys’ provee acceso a funciones, métodos y objetos del interprete de python.

Asi que con sys.exit() puedes terminar la ejecución de un script.

Comprendo que el profesor quiere que entendamos el statement break, pero creo que sería mucho más simple la función de la siguiente forma:

def _get_client_name():
    """Throw an input to get the client name"""
    client_name = None

    #Repeat the function until the user responds
    while not client_name:
        client_name = input('What is the client name?:\n>>> ')
        # Turn off the program if the client_name is exit
        if client_name == 'exit':
            sys.exit()
    return client_name

Sinceramente me gusto mucho que hayas presentado un error de logica y otro de sintaxis, eso le dio mas dinamismo a la clase. 10/10

Creo que me tomaré un break

Buenas, yo le hice un loop al menu colocandolo dentro de un while.

Nota: Estoy usando colorama para pintar los print en terminal es por eso que tienen concatenadas dos etiquetas.

def app_loop():
        while True:
            #!MENU
            _print_welcome() #Muestra el menú en pantalla.
            
            _space_line() #Funcion que agrega un espacio en la terminal
            command = input(FGREENL+ '-> ' + FR).upper()
            _space_line()

            if command == 'C': #Creacion de clientes
                create_clien(_get_client_name())
                list_client()
            elif command == 'D': #Eliminacion de clientes
                delate_client(_get_client_name())
            elif command == 'U': #Actualizacion de clientes
                update_clients(_get_client_name(),_get_new_client_name())
                list_client()
            elif command == 'S': #Busqueda de clientes
                client_name = _get_client_name()
                found = search_client(client_name)
                if found:
                    _space_line()
                    print(FYELLOW+'The client {} is in the client\'s list.'.format(client_name)+FR)
                else:
                    _space_line()
                    _msg_not_exist_client() #Funcion de mensaje de cliente no encontrado.
                list_client()
            elif command == 'E': #Salir del programa 
                break
            else:
                print(FREDL+'Invalid command'+FR) 


if __name__ == '__main__':#Funcion principal
    app_loop()  #Llamada a la función del loop


En consola se ve de esta manera:

por si el usuario digita de otra manera el exit le agregue el .lower() en if client_name.lower() == 'exit':

me imagino que esta mas adelante sera una function para que funcione en cualquier parte del programa.

Que buen curso 🙌

CÓDIGO

import sys

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 client's list")


def search_client(client_name):
    clients_list = clients.split(",")

    for client in clients_list:
        if client != client_name:
            continue
        else:
            return True


def list_clients():
    global clients

    print(clients)


def update_client(client_name, update_client_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name +",",update_client_name+",")
    else:
        print("Client is not in client list")


def delete_client(client_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name+",","")
    else:
        print("Client is not in clinet list")


def _add_comma():
    global clients

    clients += ","


def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input("What is the client name? ")

        if client_name == "exit":
            client_name = None
            break

    if not client_name:
        sys.exit()

    return client_name

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]pdate client")
    print("[D]elete client")
    print("[S]earch client")


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 == "D":
        client_name = _get_client_name()
        delete_client(client_name)
        print("The client "+ client_name + " a been delete")
        list_clients()

    elif command == "U":
        client_name = _get_client_name()
        update_client_name = input("What is the update client name? ")
        update_client(client_name, update_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 our client's list".format(client_name))

    else:
        print("Invalid command")

Me encanto ver que pasaran esos 2 errores, asi pudimos ver la diferencia entre tipos de bugs, entendiendo que tienen que haber infinidades mas, pero muy bueno que pasara para irnos haciendo a la idea de como es

<import sys
from ast import Delete
from http import client


clients = 'pablo, ricardo, '


def create_client(client_name):
    global clients
    if client_name not in clients:
        clients += client_name
        _add_comma()
    else:
        _client_was_found()


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:
        _client_not_found()


def delete_client(client_name):
    global clients
    
    if client_name in clients:
        clients = clients.replace(client_name + ',', '')
    else:
        _client_not_found()


def search_client(client_name):
    clients_list = clients.split(',')
    for client in clients_list:
        if client != client_name:
            continue
        else:
            return True


def _add_comma():
    global clients

    clients += ", "


def _print_welcome():
    print('BIENVENIDOS A PLATZI VENTAS')
    print('*'*50)
    print('Que quieres hacer hoy?')
    print('[C]reate client')
    print('[L]ist clients')
    print('[U]pdate client')
    print('[D]elete client')
    print('[S]earch client')


def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input('Cual es el nombre del cliente? ')

        if client_name == 'exit':
            break
        if not client_name:
            sys.exit()

    return client_name

def _client_not_found():
    return print('El cliente no esta registrado en la lista')


def _client_was_found():
    print('El cliente ya esta registrado en la lista')


if __name__ == '__main__':
    _print_welcome()
    command = input("Escribe un comando: ")
    command = command.upper()
    if command == 'C':
        client_name = _get_client_name()
        create_client(client_name)
        list_clients()
    elif command == 'L':
        list_clients()
    elif command == 'D':
        client_name = _get_client_name()
        delete_client(client_name)
        list_clients()
    elif command == 'U':
        client_name = _get_client_name()
        updated_client_name = input('Inglrese la actualizacion en el nombre: ')
        update_client(client_name, updated_client_name)
        list_clients()
    elif command == 'S':
        client_name = _get_client_name()
        found = search_client(client_name)
        if found:
            print('Se encontro el cliente en la lista')
        else:
            _client_not_found()
    else:
        print('Comando invalido')> 

Les Comparto el Código Pero con otras cosas Mas

import sys
clients:str = 'Jesus, Daniel'

def create_client(client_name): # create_client crea un nuevo cliente
    global clients
    if client_name not in clients: # Si el cliente no existe, lo crea
        _add_comma()
        clients += client_name
        print (f'Cliente {client_name} Creado Satisfactoriamente')
    else: # Si el cliente ya existe, lo informa
        print(f'El Cliente {client_name} Ya Existe')

def delete_client(client_name): # Creo una funcion para eliminar un cliente
    global clients
    if client_name in clients:
        _add_comma()
        clients = clients.replace(client_name + ',', '')
        print (f'Cliente {client_name} Fue Eliminado Satisfactoriamente')
    else:
        print(f'El Cliente {client_name} No Existe')

def update_client(client_name, update_client_name): # Creo una funcion para actualizar el nombre del cliente
    global clients
    if client_name in clients:
        _add_comma()
        clients = clients.replace(client_name + ',', update_client_name + ',')
        print (f'Cliente {client_name} Fue Actualizado Satisfactoriamente a {update_client_name}')
    else:
        print(f'El Cliente {client_name} No Existe')

def search_client(client_name): # Creo una funcion para buscar un cliente
    global clients
    found = False
    if client_name in clients:
        found = True
    return found

def list_cleints(): # list_cleints muestra los clientesa que existen
    global clients
    print('clientes:',clients)
   

def _add_comma(): # Agrega una coma al final de la lista de clientes
    global clients
    clients += ', '


def _print_welcome(): # Imprime un mensaje de bienvenida al usuario 
    print(' _________________________________________ ')
    print('|        Bievenido a Platzi Ventas        |')
    print('|-----------------------------------------|')
    print('|[C] - Crear cliente                      |')
    print('|[E] - Eliminar cliente                   |')
    print('|[A] - Actualizar cliente                 |')
    print('|[B] - Buscar cliente                     |')
    print('|[S] - Salir.                             |')
    print('|_________________________________________|')
    
    global command
    command = None
    while not command:
        command = input('Ingresa una opcion: ').upper()

        if command in ['C','E','A','B','S']:    
            return _get_client_action(command) # Retorno la funcion principal para que sea ejecutada y se la paso a _get_client_action
        
       
def _get_client_action(command): # Creo una Función para ejecutar las acciones de los clientes
      
    if command == 'C':
        list_cleints()
        client_name = _get_client_name()
        create_client(client_name)
        list_cleints()

    elif command == 'E':
        list_cleints()  
        client_name = _get_client_name()
        delete_client(client_name)
        list_cleints()
        pass

    elif command == 'A':
        list_cleints()
        client_name = _get_client_name()
        update_client_name = input('Ingresa el nuevo nombre del cliente: ')
        update_client(client_name ,update_client_name)
        list_cleints()
        

    elif command == 'B':
        list_cleints()
        client_name = _get_client_name()
        found = search_client(client_name)
        if found:
            print(f'El cliente {client_name} se encuentra en la lista')
        else:
            print(f'El cliente {client_name} no se encuentra en la lista')
        list_cleints()
    

    elif command == 'S':
        print('Saliendo...')
        sys.exit()
        
    else:
        print('                                         ')
        print(' __________Comando no encontrado__________')
      
        _print_welcome()

def _get_client_name(): # Creo una funcion para pedir el nombre del cliente
    client_name = None
    while not client_name:
        client_name = input('Ingresa el nombre del cliente: ')
        if client_name == '':
            client_name = None
            print('                                         ')
            print(' __________El nombre del cliente es requerido__________')
        
        if client_name == 'exit':
            client_name = None
            break

    if not client_name:
        sys.exit()

    
    return client_name


if __name__== '__main__':
    _print_welcome()

Espero te sirvan

Les comparto la actualización de mi codigo, con algunos retoques de mi parte

import sys

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 update_client(client_name, update_client_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name, update_client_name)
    else:
        print('Client is not in clients list')

def delete_client(client_name):
    global clients

    update_client(f'{client_name},','')

def seach_client(client_name):
    clients_list = clients.split(',')
    if client_name in clients_list:
        return True
    else:
        return False


def list_clients():
    global clients

    print(clients)

def _add_comma():
    global clients

    clients += ','

def _get_client_name(command):
    client_name = None
    while not client_name:
        if '[' in command:
            client_name = input(f'What is the name of the client we are going to {command}? ')   
        else:
            client_name = input(f'What is the new name? ') 
        if client_name == 'exit':
            client_name = None
            sys.exit()
    return client_name

def _print_welcome():
    print('WELCOME TO QUEIS VENTAS')
    print('*' * 5)
    print('What wouls you like to do today?')
    print('[C]reate client')
    print('[U]pdate client')
    print('[D]elete client')
    print('[S]earch client')


if __name__ == '__main__':
    _print_welcome()

    command = input().upper()

    
    if command == 'C':
        client_name = _get_client_name('[C]reate')

        create_client(client_name)
        list_clients()
    elif command == 'D':
        client_name = _get_client_name('[D]eleted')

        delete_client(client_name)
        list_clients()
    elif command == 'U':
        updated_client_name = _get_client_name('[U]pdate')
        client_name = _get_client_name('new')

        update_client(updated_client_name, client_name)
        list_clients()
    elif command == 'S':
        client_name = _get_client_name('[S]earch')
        found = seach_client(client_name)

        if found:
            print('The client is in the clien\'s list')
        else:
            print(f'The client: {client_name} is not in out client\'s list')

    else:
        print('Invalid Command')

Con el tiempo e aprendido a valorar los errores en python.

code

import sys

clients = 'pablo,ricardo,'

def create_client(client_name):
    global clients

    if client_name not in clients:
        clients += client_name
        _add_comma()
    else:
        print('the client is ready register')


def list_clients():
    global clients
    print(clients)


def update_client(client_name,update_client_name):
    global clients
    if client_name in clients:
        clients = clients.replace(client_name + ',', update_client_name + ',')
    else:
        print('client is not in client list')

def delete_client(client_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name + ',', '')
    else:
        print('client is not in clients list')


def search_client(name_client):
    global clients
    clients_list = clients.split(',')

    for cilient in clients_list:
        if clients != client_name:
            continue
        else:
            True


def _add_comma():
    global clients
    clients +=  ','


def _print_welcome():
    print('welcome to platzi sells')
    print('*' * 50)
    print('what woul you like to do')
    print('[C]create client')
    print('[D]delete client')
    print('[U] update')
    print('[S] search client')

def _get_client_name():
    client_name = None

    while not client_name:
        client_name = 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 == 'D':
        client_name = _get_client_name()
        delete_client(client_name)
        list_clients()

    elif command == 'U':
        client_name = _get_client_name()
        update_client_name = input('what is the updated client name')
        update_client(client_name,update_client_name)
        list_clients()

    elif command == 'S':
        client_name = _get_client_name()
        found = search_client(client_name)
        if found:
            ('the client is in the list')
        else:
            print(f'cant found the client {client_name} in our client list')
    else:
        print('invalid command')




aprende a querer los errores
-David Aroesti

un increible aprendizaje

import sys

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 update_client(client_name, update_cliente_name):
    global clients
    if client_name in clients:
        clients = clients.replace(client_name + ',', update_cliente_name + ',' )
    else:
        dont_exist()

def delete_client(client_name):
    global clients
    if client_name in clients:
        clients = clients.replace(client_name + ',', '')
    else:
        dont_exist()

def search_client(client_name):
    clients_list = clients.split(',')
    
    for client in clients_list:
        if client != client_name:
            continue
        else:
            return True

def list_clients():
    global clients
    print(clients)

def _add_comma():
    global clients
    clients += ','

def dont_exist():
    return 'Client is not in clients list'

def _print_welcome():
    print('WELCOME TO PLATZI VENTAS')
    print('*' * 50)
    print('What would you like to do today?')
    print('[D]elete Client')
    print('[L]ist Client')
    print('[D]elete Client')
    print('[U]pdate Client')
    print('[S]earch Client')

def _get_client_name():
    client_name = None
    while not client_name:
        client_name = 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 == 'D':
        client_name = _get_client_name()
        delete_client(client_name)
        list_clients()
    elif command == 'U':
        client_name = _get_client_name()
        update_client_name = input('What is the updated client name: ')
        update_client(client_name, update_client_name)
        list_clients()
    elif command == '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} is not our client\'s list')
    else:
        print('Invalid command')

Plot Twist: No es que hubiera un bug, es que al programa le cae mal James

Me ha encatando este curso, hasta ahora.

Sale del programa:

import sys
...
if not client_name: #Sale del programa
        sys.exit()

Comunidad para limpiar pantalla en modo editor python

Despues de hacer esto ya cada vez que quieran limpiar la pantalla en el editor python pones

cls() seguido de enter y listo

Y si estan en la consola CMD de windows solo usa
cls

Prueba como se lee

def leer(palabra):
    cantidad = len(palabra)
    while cantidad > 0:
        cantidad -= 1
        print(palabra[cantidad]) 

Esta es mi versión hasta este punto del código

El sys.exit lo utilizo para la opción de Salida
Al pedir el nombre si no quieres rellenarlo sale al menú poniendo salir, pero no de la aplicación

import sys

clientes = "Pedro,Pablo,"

def crear_cliente(nombre_cliente):
    global clientes

    if nombre_cliente not in clientes:
        clientes += nombre_cliente
        _agregar_coma()
    else:
        print("El cliente ya existe en la lista")


def listar_clientes():
    global clientes

    print(clientes)


def actualizar_ciente(nombre_cliente, nombre_cliente_nuevo):
    global clientes

    if(nombre_cliente in clientes):
        clientes = clientes.replace(nombre_cliente,nombre_cliente_nuevo)
        listar_clientes()
    else:
        print("el cliente " + nombre_cliente + " no existe en el listado")


def _agregar_coma():
    global clientes

    clientes += ","


def _print_bienvenido():
    print('*' * 50)
    print("Bienvenido")
    print('*' * 50)
    print("¿Qué quieres hacer hoy?")
    print("A - Actualizar cliente")
    print("B - Borrar cliente")
    print("C - Crear cliente")
    print("E - Encontrar cliente")
    print("T - Encontrar cliente tabulado")
    print("L - Listar clientes")
    print("S - Salir")


def _obtener_nombre_cliente_existente():
    return _obtener_input("Introduzca el nombre del cliente a actualizar: ")


def _obtener_nombre_cliente():
    return _obtener_input("Introduzca el nombre del cliente: ")


def _obtener_input(texto):
    input_text = None
    while not input_text:
        input_text =  input(texto)

        if input_text == 'salir':
            break

    return input_text


def _borrar_cliente(nombre_cliente):
    global clientes

    if nombre_cliente in clientes:
        clientes = clientes.replace(nombre_cliente + ",", "" )
        listar_clientes()
    else:
        print("El cliente " + nombre_cliente + " no existe en el listado") 


def _encontrar_cliente(nombre_cliente):
    global clientes

    return clientes.find(nombre_cliente) > -1


def _encontrar_cliente_tabulados(nombre_cliente):
    global clientes
    encontrado = False 

    listado_cliente = clientes.split(",")

    for cliente in listado_cliente:
        if(cliente != nombre_cliente):
            continue
        else:
            encontrado = True
            break
    return encontrado


if __name__ == '__main__':
    while True:
        _print_bienvenido()

        comando = input()
        comando = comando.upper()

        if comando == 'C':
            nombre_cliente = _obtener_nombre_cliente()
            crear_cliente(nombre_cliente)
            listar_clientes()
        elif comando == 'B':
            nombre_cliente = _obtener_nombre_cliente()
            _borrar_cliente(nombre_cliente)
        elif comando == 'L':
            listar_clientes()
        elif comando == 'A':
            nombre_cliente = _obtener_nombre_cliente_existente()
            nombre_cliente_nuevo = _obtener_nombre_cliente()
            actualizar_ciente(nombre_cliente, nombre_cliente_nuevo)
        elif comando == 'E':
            nombre_cliente = _obtener_nombre_cliente_existente()
            cliente_encontrado = _encontrar_cliente(nombre_cliente)
            if cliente_encontrado:
                print("Hemos encontrado a {}".format(nombre_cliente))
            else:
                print("Lo sentimos mucho, pero el cliente {} no se encuentra".format(nombre_cliente))
        elif comando == 'T':
            nombre_cliente = _obtener_nombre_cliente_existente()
            cliente_encontrado = _encontrar_cliente_tabulados(nombre_cliente)
            if cliente_encontrado:
                print("Hemos encontrado a {}".format(nombre_cliente))
            else:
                print("Lo sentimos mucho, pero el cliente {} no se encuentra".format(nombre_cliente))
        elif comando == 'S':
            print("Muchas gracias por utilizar nuestro programa")
            sys.exit()
        else:
            print("Opción desconocida")

Aquí esta mi código con varios cambios.
Creo que la mejor forma de entrenar tu lógica cuando estas haciendo un curso es hacer el código diferente al código del profesor.

import sys
clients = 'alyanna, angel, '
var_client_name = None

def create_client(client_name):
    global clients

    if client_name not in clients:
        clients += client_name
        _add_comma()
    else:
        print(f"Client {client_name} already in 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 + ",")
	elif client_name not in clients:
		_not_in_clients(client_name)


def delete_client(client_name):
	global clients

	if client_name in clients:
		clients = clients.replace(client_name + ",", "")


def search_client(client_name):
	global clients

	clients = clients.split(",")
	for i in clients:
		if i == client_name:
			return True



def _get_client_name():
	global var_client_name

	while not var_client_name:
		var_client_name = input("What is the client name? ")
		
		if var_client_name == "exit":
			var_client_name = None
			break
	
	if not var_client_name:
		sys.exit()

	return var_client_name


def _client_name():
#con esta funcion evito declarar "var_client_name = _get_client_name" en todos los if 
	global var_client_name
	var_client_name = _get_client_name()


def _not_in_clients(client_name):
	global clients

	if client_name not in clients:
		 print(client_name, "is not in client's list")


def _add_comma():
	global clients
	
	clients += ","


def _print_welcome():
	print("WELCOME TO LA BOOTS VENTAS")
	print("*" * 50)
	print("What would yo like to do today?")
	print("[C]reate client")
	print("[R]ead client")
	print("[U]pdate client")
	print("[D]elete client")
	print("[S]earch client")


if __name__ == '__main__':
	_print_welcome()

	command = input()
	command = command.upper()

	if command == "C":
		_client_name()
		create_client(var_client_name)
		list_clients()
	elif command == "R":
		list_clients()
	elif command == "D":
		_client_name()
		_not_in_clients(var_client_name)
		delete_client(var_client_name)
		list_clients()
	elif command == "U":
		_client_name()
		if var_client_name in clients:
			nombre_cliente_actualizado = input("What is the updated client name? ")
			update_client(var_client_name, nombre_cliente_actualizado)
			list_clients()
		else:
			_not_in_clients(var_client_name)
			list_clients()
	elif command == "S":
		_client_name()
		found = search_client(var_client_name)
		if found:
			print("The client: {} is in our client's list".format(var_client_name))
		else:
			print(f"{var_client_name} is not in our client's list")
	else:
		print("Invalid command, try again")

none es como null no?

Otra forma para salir de while es utilizar return para finalizar la función

def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input('What is the client name? ')

        if client_name == 'exit':
            sys.exit()
            return None 
    
    return client_name

Esos infinite loop me pasaron un par de veces cuando comenzaba a programar xD

Un while loop sencillito

def cuenta_regresiva(n):
    while n > 0:
        print('> {}'.format(n))
        n -= 1


cuenta_regresiva(4)
print("\n")
cuenta_regresiva(10)
print("\n")
cuenta_regresiva(15)

Los loops son una herramienta muy valiosa cuando se tienen problemas de listar o de repetir muchas veces una serie de instrucciones

Genial!!

Existe un bug

Cuando seleccionamos la opción CREATE y ponemos solamente la letra “A” (sin comillas y en mayúsculas) automáticamente se agrega y el resultado es por ejemplo: ** Pablo, Ricardo,A, **

Si por el contrario luego se seleccionar la opción CREATE y ponemos solamente la letra “a” (sin comillas y en minúsculas) el mensaje es el siguiente :Client already is in the clients list

Conclusión: sí introducimos un letra o cadena de caracteres que coincidan con la lista previamente establecida, mostrará el mensaje Client already is in the clients list

Creo que esto hace el mismo trabajo, ¿Estoy equivocado?

def _get_client_name():
	client_name=None
	while not client_name:
		client_name=input('What is the client name? ') 
		if client_name=='exit':
			#client_name=None
			#break
	#if not client_name:
			sys.exit()
	return client_name```

Código final y correcto de While Loop escrito por David en su repositorio de GitHub dentro de Plazit

Te permite copiar el código o revisarlo detalladamente y tambien conocer GitHub

import sys


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 in client\'s list')


def list_clients():
    print(clients)


def update_client(client_name, updated_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name + ',', updated_name + ',')
    else:
        print('Client not in client\'s list')


def delete_client(client_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name + ',', '')
    else:
        print('Client not in client\'s list')


def search_client(client_name):
    clients_list = clients.split(',')

    for client in clients_list:
        if client != client_name:
            continue
        else:
            return True


def _add_comma():
    global clients

    clients += ','

def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input('What is the client name?')

        if client_name == 'exit':
            client_name = None
            break

    if not client_name:
        sys.exit()

    return client_name


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 clients')
    print('[U]pdate client')
    print('[D]elete client')
    print('[S]earch client')


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 = input('What is the new client name? ')

        update_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')

Código actualizado en lo que voy del curso, añadí la librería os que nos trae los comandos del sistema y lo encontré aquí

import sys, os # Importamos librerias



clients = 'Natalia, Daniel, ' # Definimos algunos clientes

def create_client(client_name): # Funcion para crear clientes
    global clients              
    list_clients()
    if search_client(client_name):
        print('Client already is in client\'s list. \n')
    else:
        clients += client_name
        _add_coma()
        

def delete_client(client_name): # Funcion para borrar clientes
    global clients
    list_clients()
    if search_client(client_name):
        clients = clients.replace(client_name + ', ', '')
        list_clients()
    else:
        not_found_menssage(client_name)


def update_client(client_name, updated_client_name): # Funcion para actualizar clientes
    global clients
    _clear_screen()
    list_clients()
    if search_client(client_name):
        clients = clients.replace(client_name + ', ', updated_client_name + ', ')
        list_clients()
    else:
        not_found_menssage(client_name)


def search_client(client_name): # Funcion para verificar si el cliente esta en el sistema
    clients_list = clients.split(', ')
    for client in clients_list:
        if client != client_name:
            continue
        else:
            return True
     

def not_found_menssage(client_name): # Mensaje de cliente no encontrado mostramdo el nombre
    
    print(f'The client: {client_name} is not in the client\'s list. \n')


def _not_found_menssage(): # Mensaje de cliente no encontrado
    
    print('The client is not in the client\'s list. \n')


def found_message(): # Mensaje de cliente encontrado

    print('Client found... \n')


def client_commands(command): # Funcion que toma la opcion/comando seleccionado por el cliente y llama al metodo para cumplir con el objetivo/requerimiento del cliente
    
    command = command.upper()

    if command == 'C':
        create_client(_get_client_name())
    elif command == 'D':
        delete_client(_get_client_name())
    elif command == 'U':
        update_client(_get_client_name(), input('What is the updated client name? \n'))
    elif command == 'S':
        if search_client(_get_client_name()):
            found_message()
        else:
            _not_found_menssage()
    elif command == 'L':
        list_clients()
    elif command == 'E':
        _clear_screen()
        _exit_program()
    else:
        print('Invalid command\n')


def _add_coma(): # Añade el separador de los clientes en el sistema
    global clients
    clients += ', '
    list_clients()


def list_clients(): # Lista los clientes registrados
    global clients
    print(clients + '\n')


def _get_client_name(): # Retorna el nombre del cliente
    client_name = ''

    while client_name == '':
        client_name = input('What is the client name?/[E]xit/[M]enu \n')
        
    if client_name == 'E' or client_name == 'e': # Nos saca del sistema si no se desea ingresar un cliente
        client_commands(client_name)
    elif client_name == 'M' or client_name == 'm': # Nos devuelve al menú principal
        command = ''
        _clear_screen()
        run(command)

    _clear_screen()
    return client_name


def _print_welcome(): # Funcion de bienvenida
    print('*' * 28)
    print('**WELCOME TO PLATZI VENTAS**')
    print('*' * 28 + '\n \n')
    print('What would you like to do today? \n')
    

def client_options(): # Funcion que despliega las opciones de sistema
    print('[C]reate client')
    print('[D]elete client')
    print('[L]ist clients')
    print('[S]earch client')
    print('[U]pdate client')
    print('[E]xit')


def run(command): # Funcion que mantiene el programa activo hasta que sea ejecutada la orden de salir
    while command != 'E':
        
        client_options()
        command = input()
        _clear_screen()
        client_commands(command)


def _clear_screen(): # Funcion que limpia la consola en donde estemos trabajando
    if os.name == 'posix':
        os.system('clear')
    elif os.name == "ce" or os.name == "nt" or os.name == "dos":
        os.system('cls')


def _exit_program(): # Funcion para salir del sistema
    sys.exit()


if __name__ == '__main__':
    _print_welcome()
    
    command = ''

    run(command)

Si quereis probar vuestras While loops con números grandes pero veis que imprime un número por cada fila podéis hacer lo siguiente para que aparezcan los números correlativos:

def cuenta_regresiva(n):
	while n > 0:
		print(n, end=' ')
		n -= 1

cuenta_regresiva(30)
30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Esto provocará que aparezca cada todos y cada uno de los números en una fila

<code>import sys
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 search_client(client_name):
    clients_list = clients.split(',')

    for client in clients_list:
        if client != client_name:
            continue
        else:
            return True


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')
    print('[S]earch')

def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input('What is the client name?')

        if client_name == 'exit':
            client_name = None
            break

    if not client_name:
            sys.exit()

    return 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 == '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 the client list'.format(client_name))
    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')

Analizando el comportamiento observo que input detiene la ejecución del while hasta obtener una respuesta por parte del usuario, este tipo de comportamiento lo presentan otras funciones built-in?

def _get_client_name():
    client_name = None
    while not client_name:
        client_name = input('What is the client name?')
    
    return client_name

Un bucle while permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición (es decir, mientras la condición tenga el valor True). La ejecución de esta estructura de control while es la siguiente: Python evalúa la condición: si el resultado es True se ejecuta el cuerpo del bucle.

Las foor loops iteran a lo largo de una secuencia, mientras que las while loops iteran mientras una condición sea verdadera(más bien mientras la condición se cumpla).

Mi código ya itera al infinito a menos de que le digamos lo contrario, usando el

while True # Para el hilo principal

y

while not variable # Para cada input que se pide

https://github.com/behagoras/basic-python/tree/infinite_loop

Veo que no se explico bien sobre el sys, hace referencia al sistema al “System Exit”. Sale del programa directamente.

def _get_client_name():
    client_name = None
    while not client_name:
        client_name =  input('What is your client name?')
        if client_name == 'exit':
            client_name = None
            break

    if not client_name:
        sys.exit()    return client_name```
def _get_client_name():
    client_name = None;

    while not client_name:
        client_name = input('What is the client name: ');

        if client_name == 'exit':
            sys.exit();
    
    return client_name.capitalize();```

Con la opcion [C]reate clients, cuando ingreso las primeras letras de algun nombre de la lista me dice que ya existe, por ejemplo: ‘pabl’ or ‘ricar’

Esto por que pasa?

import sys

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, update_client_name):
	global clients

	if client_name in clients:
		clients = clients.replace(client_name + ',', update_client_name + ',')
	else:
		_not_client_name()


def delete_client(client_name):
	global clients

	if client_name in clients:
		clients = clients.replace(client_name + ',','')

	else:
		_not_client_name()

def search_client(client_name):
	clients_list = clients.split(',')

	for client in clients_list:
		if client != client_name:
			continue
		else:
			return True


def _add_comma():
	global clients

	clients += ','


def _print_welcome():
	print('WELCOME TO PLATZI VENTAS')
	print('*' * 50)
	print('What would you like to do today?')
	print('[C]reate clients')
	print('[U]pdate clients')
	print('[D]elete clients')
	print('[S]earch clients')
	

def _get_client_name():
	client_name = None

	while not client_name:
		client_name = raw_input('What is the client name')

		if client_name == 'exit':
			client_name = None
			break

	if not client_name:
		sys.exit()

	return client_name


def _not_client_name():
	print('The Client: {} is not our client\'s list'.format(client_name))


if __name__ == '__main__':
	_print_welcome()
	command = raw_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()
		delete_client(client_name)
		list_clients()

	elif command == 'U':
		client_name = _get_client_name()
		update_client_name = raw_input('What is the update client name')
		update_client(client_name, update_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:
			_not_client_name()
	else:
		print('Invalid command')```

def _get_a_client_name():
new_client = None

while not new_client:
    new_client = input("Whats is the name of client_name: ")

    if new_client == ("exit"):
        new_client = None
        break

if not new_client:
    sys.exit()

return new_client

Si no me equivoco, cuando se te acaba la memoria RAM y sigues necesitando de espacio para ejecutar programas, tu computadora empezará a utilizar el espacio del disco duro, el cual es súper lento y por eso tu computadora empezará a estar tan lenta.

El curso esta cumpliendo con todas las expectativas, nice!!!

No te angusties por los errores.

Los While loop hasta obtener el dato que tenemos.

Es muy divertido hacer infinites loops para experimentar.

En el caso de Python, el while loop el que tiene solo la capacidad de verificación.

IMPORTANTE Al momento de utilizar un ciclo while es sumamente importante que pienses bien el por que y para que pues que esto te ayuadara encontrar mucho mas el caso de falsedad, por ejemplo en un video juego podemos utilizar un while para que el jugador pueda realizar hechos mientras tenga mana para el mismo, asi sucesivamente seria un caso real del while loop.

Les comparto mi codigo

import sys

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_message_client()


def delete_client(client_name):
    global clients

    if client_name in clients:
        clients = clients.replace(client_name + ',', '')

    else:
        _print_message_client()


def seach_client(client_name):
    global clients
    client_list = clients.split(',')

    for client in client_list:
        if client != client_name:
            continue
        else:
            return True


def _add_comma():
    global clients

    clients += ','


def _print_welcome():
    print('=' * 40)
    print('Welcome to Platzi ventas')
    print('=' * 40)
    print('What would you like to do today')
    print('-' * 40)
    print('[C]reate client')
    print('[L]ist   client')
    print('[U]pdate client')
    print('[D]elete client')
    print('[S]earch client')
    print('*' * 40)


def _get_client_name():
    client_name = None

    while not client_name:
        client_name = input('What is the client name? ')

        if client_name == 'exit':
            client_name = None
            break

    if not client_name:
        sys.exit()

    return client_name


def _print_message_client():
    print('Client is not in clients 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()
        delete_client(client_name)
        list_clients()
    elif command == 'L':
        list_clients()
    elif command == 'U':
        client_name = _get_client_name()
        updated_client_name = input('What is the updated client name ')
        update_client(client_name, updated_client_name)
        list_clients()
    elif command == 'S':
        client_name = _get_client_name()
        found = seach_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')
import sys
clients = ''

def add_client(client_name):
    global clients
    
    if client_name.upper() not in clients.upper():
        clients += client_name
        _add_coma()
    else:
        print("The client already exist!!")


def update_client(client_name,name_update):
    global clients
    
    if client_name.upper() in clients.upper():
        clients = clients.replace(client_name,name_update)
    else:
        print("The client not exist!!")


def search_client(client_name):
    global clients

    client_list = clients.split(',')
    for client in client_list:
        if client != client_name:
            continue
        else:
            return True


def delete_client(client_name):
    global clients
    
    if client_name.upper() in clients.upper():
        clients = clients.replace(client_name+',','')
    else:
        print("The client not exist!!")


def _add_coma():
    global clients
    clients += ','

def list_client():
    global clients
    print(clients)

def _get_client_name():
    client_name = None
    while not client_name:
        client_name =  input("What's client Name? ")
        if client_name == 'exit':
            client_name == None
            break
    if not client_name:
        sys.exit()
    return client_name



def _print_welcome():
    mesaje ="""
        WELCOME TO PLATZI VENTAS
        '*'*50
        What would you lke to do today?
        [C] Create Client
        [L] List Client
        [D] Delete Client
        [U] Update Client
        [S] Search Client
        [E] Salir
        : """
    option  = input(mesaje)
    return option

if __name__ == "__main__":
    
    active = True

    while active:

        option = _print_welcome()
        if option == 'L' or option == 'l':
            list_client()

        elif option == 'C' or option == 'c':
            name = _get_client_name()
            add_client(name)
            list_client()
        elif option == 'S' or option == 's':
            name = _get_client_name()
            found = search_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(name))

        elif option == 'U' or option == 'u':
            name = _get_client_name()
            name_update = input("What's name to update? ")
            update_client(name,name_update)
            list_client()
        elif option == 'D' or option == 'd':
            name = _get_client_name()
            delete_client(name)
            list_client()

        elif option == 'E' or option == 'e':
            active = False