Soluciones de ejercicios y proyecto – 100 días de Python #5

curso de Python

Esta página contiene las soluciones para los ejercicios y el proyecto del quinto día del curso.

  1. Recuerda que para llegar al valor 14, el range() tiene que tener hasta el 15.
for i in range(7,15):
    print(f"El valor del bucle es: {i}.")
  1. En este caso, se puede poner de condición, menor o igual a 14.
i = 7

while i <= 14:
    print(f"El valor del bucle es: {i}.")
    i += 1
  1. Primero el bucle for y luego el while:
for i in range (0,-5001, -500):
    print(f"El valor del bucle es: {i}.")
i = 0

while i >= -5000:
    print(f"El valor del bucle es: {i}.")
    i -= 500
  1. Una vez aprendes bien a iterar listas con bucles, esto es de lo más sencillo de hacer:
for pais in paises:
    print(f"-> {pais} <-")

Recuerda que la variable «i» de los bucles, se suele poner por convención, no es obligatoria. Hay veces donde es más entendible poner, por ejemplo «pais», que es lo que se almacena en cada vuelta del bucle, un «país» de la lista de «países».

  1. En primer lugar, ordeno la lista de menor a mayor con sort(). Para que el 356 quede al final (es el mayor),

Con un bucle for, itero toda la lista.

Anido un if para indicar que si el valor es igual a 10, que lo omita (continue).

Si el valor es igual a 356, que rompa la ejecución del bucle (break) como se pide (también se podía hacer con un «continue» puesto que está al final de la lista y el bucle ya termina).

Si no es ninguno de estos dos valores, se imprimen con normalidad.

Tienes dos posibles soluciones, hacer if individuales o un if elif else:

lista_numeros = [10,45,356,10,10,10,46,67,45,10,10,43,10,65,10,10]

# Se ordena la lista de menor a mayor
lista_numeros.sort()

# Bucle para iterar la lista
for i in lista_numeros:
    if i == 10:
        continue # Se omiten los valores 10
    if i == 356:
        break # Se rompe la iteración en el momento que el valor de i es 356
        
    print(f"El valor del elemento es: {i}")
lista_numeros = [10,45,356,10,10,10,46,67,45,10,10,43,10,65,10,10]

# Se ordena la lista de menor a mayor
lista_numeros.sort()

# Bucle para iterar la lista
for i in lista_numeros:
    if i == 10:
        continue # Se omiten los valores 10
    elif i == 356:
        break # Se rompe la iteración en el momento que el valor de i es 356
    else:   
        print(f"El valor del elemento es: {i}")

Solución del proyecto de pedido en pizzería

Primero de todo, aquí tienes el código. Si lo has hecho diferente, lo importante, como siempre digo, es que cumpla con los requisitos solicitados que puedas lograr. Como siempre, puedes ver la explicación de este código con todo detalle en el vídeo correspondiente a este día del curso.

# Declaración de las variables del programa
dinero = float(input("Hola, indique el dinero que lleva.\n"))
DINERO_INICIAL = dinero
total = 0
pedido = []

margarita = 7.85
jamon_queso = 9.65
cuatro_quesos = 8.95

extra_queso = 1.25
champinones = 0.85
albahaca = 0.5

# Título del programa
print("-> Pizzería PF <-\n")

# Bucle infinito (True) para pizzas - Número de ejecuciones indeterminadas
while True:
	# Menú de pizzas
    print(f"1 - Margarita - {margarita}$")
    print(f"2 - Jamón y queso - {jamon_queso}$")
    print(f"3 - Cuatro quesos - {cuatro_quesos}$")
    
	# Almacena la elección del usuario
    eleccion = int(input("Hola, por favor, seleccione su pizza con un número de opción.\n"))

    # Se calcula el cambio y el total, se indica la pizza elegida, se añade a la lista
    match eleccion:
        case 1:
            print(f"Ha elegido la pizza margarita.\nTotal a pagar {margarita}$.")
            dinero -= margarita
            print(f"Le quedan {round(dinero,2)}$.")
            total += margarita
            pedido.append(f"Margarita - {margarita}$")
            break
        case 2:
            print(f"Ha elegido la pizza de jamón y queso.\nTotal a pagar {jamon_queso}$.")
            dinero -= jamon_queso
            print(f"Le quedan {round(dinero,2)}$.")
            total += jamon_queso
            pedido.append(f"Jamón y queso - {jamon_queso}$")
            break
        case 3:
            print(f"Ha elegido la pizza cuatro quesos.\nTotal a pagar {cuatro_quesos}$.")
            dinero -= cuatro_quesos
            print(f"Le quedan {round(dinero,2)}$.")
            total += cuatro_quesos
            pedido.append(f"Cuatro quesos - {cuatro_quesos}$")
            break
        case _:
            print(f"Opción incorrecta. Seleccione una opción del 1 al 3.")

# Bucle infinito (True) para ingredientes - Número de ejecuciones indeterminadas            
while True:
	# Menú de ingredientes
    print(f"1 - Extra de queso - {extra_queso}$")
    print(f"2 - Champiñones - {champinones}$")
    print(f"3 - Albahaca - {albahaca}$")
    print(f"4 - No añadir nada extra y pagar.")
    
    # Almacena la elección del usuario
    eleccion = int(input("Si desea algún ingrediente extra, selecciónelo.\n"))
    
    # Se calcula el cambio y el total, se indican los ingredientes elegidos, 
    # se añaden a la lista...
    match eleccion:
        case 1:
            print(f"Ha elegido extra de queso.\nExtra a pagar {extra_queso}$.")
            dinero -= extra_queso
            total += extra_queso
            print(f"Total a pagar: {total}$.")
            print(f"Le quedan {round(dinero,2)}$.")
            pedido.append(f"Extra de queso - {extra_queso}$")
        case 2:
            print(f"Ha elegido champiñones extra.\nExtra a pagar {champinones}$.")
            dinero -= champinones
            total += champinones
            print(f"Total a pagar: {total}$.")
            print(f"Le quedan {round(dinero,2)}$.")
            pedido.append(f"Champiñones - {champinones}$")
        case 3:
            print(f"Ha elegido añadir albahaca.\nExtra a pagar {albahaca}$.")
            dinero -= albahaca
            total += albahaca
            print(f"Total a pagar: {total}$.")
            print(f"Le quedan {round(dinero,2)}$.")
            pedido.append(f"Albahaca - {albahaca}$")
        case 4:
            print("De acuerdo, no se añade nada extra.")
            break
        case _:
            print(f"Opción incorrecta. Seleccione una opción del 1 al 4.")

# Un condicional para determinar si le llega el dinero al usuario con su pedido.
# Si le llega, se ejecuta el if y le saca el ticket con todo lo pedido.
if total <= DINERO_INICIAL:
    print("\n--- SU PEDIDO ---")

    print(f"El total  de su pedido es: {total}$.")
    print(f"Su cambio: {dinero}$.\n")

    for i in pedido:
        print(f"-{i}.")

    print("\n¡Buen provecho!")

# Si el dinero no le llega, le indica que no le llega y no imprime el ticket.    
else:
    print("No le llega el dinero para todo eso. Por favor, vuelva a empezar.")
Soluciones de ejercicios y proyecto – 100 días de Python #5

10 comentarios en «Soluciones de ejercicios y proyecto – 100 días de Python #5»

  1. Mil gracias por este increible curso, estoy aprendiendo muchísimo y de una manera super entretenida. Por si os interesa, comparto mi proyecto de «PIZZA WEB».
    Tiene en cuenta muchas más cosas de las que se solicitan en el proyecto inicial: pregunta al usuario si quiere ingredientes extra (puedes responder con Si o No sin importar mayúsculas o minúscuals, o solo con una S o una N), detecta si dispones de crédito suficiente en todo el proceso, agrupa los pedidos en el tocket final…
    … y alguna cosita que otra más.
    Me lo he pasado genial creándo este proyecto, espero que os guste, he dejado muchísimos comentarios en el código para que no se pierda nadie.

    El resultado final termina con un ticket de este tipo:

    ¡Buen provecho!
    __________________TICKET______________________
    Pizza Base:
    1 Base Pizza Margarita _____________ Total: 12.5 créditos
    Ingredientes extra:
    2 Extra de Quesos ________________ Total: 2.4 créditos
    1 Extra de Champiñones ____________ Total: 1.2 créditos
    3 Extra de tomate natural ___________ Total: 3.6 créditos

    -Coste total del pedido:___________________ 19.7 créditos
    -Crédito disponible:______________________ 16.3 créditos

    CÓDIGO:

    print(«———————-PIZZERÍA WEB————————— «) # Título del programa.

    # Variables y constantes:
    total = 0 # Esta variable acumula el gasto que se carga en cada pedido.
    pedido = [«Pizza Base Margarita», «Pizza Base Boloñesa», «Pizza Base Cuatro Quesos», «Extra de quesos», «Extra de Champiñones», «Extra de tomate natural»] #Esta lista almacenará los elementos de cada pedido para general el ticket final, si bajas al final del código verás que al dejar esta lista pre-cargada, he podido generar un sistema que cuenta, agrupa y valora los ingredientes repetidos.
    #Estas variables indican el precio de cada base de pizza. Si se modifica, se recalcula todo automáticamente, incluidos los criterios utilizados para detectar si el importe del usuario es suficiente para adquirir, al menos, el producto más económico.
    margarita = 12.50
    bolonesa = 14.60
    cuatro_quesos = 13.65
    # Esta lista almacena las bases de pizza, la sentencia de la línea inferior, con el sort(), la ordena de mayor a menor. De esta manera, siempre figurará primero la pizza de menos coste. Más adelante se usa este valor para establecer el crédito mínimo necesario para realizar un pedido.
    lista_productos = [bolonesa, margarita ,cuatro_quesos]
    lista_productos.sort()
    #Estas variables indican el precio de cada ingrediente extra. Es igual que las bases de pizza, se pueden modificar y todo se recalcualrá automáticamente.
    queso = 1.20
    champinon = 1.50
    tomate_natural = 1.10
    # Esta lista almacena los ingredientes extra, la sentencia de la línea inferior, con el sort(), la ordena de mayor a menor. De esta manera, siempre figurará primero el ingrediente de menos coste. Más adelante se usa este valor para establecer el crédito mínimo necesario para añadir un ingrediente.
    lista_extras = [ queso, champinon ,tomate_natural]
    lista_extras.sort()

    #Se inicia el bucle inicial de solicitud y comprobación de saldo:
    while True:
    credito = float(input («¿Qué cantidad de crédito desea cargar para este pedido?\n»)) # Permite introducir los créditos para iniciar el pedido.
    creditos_iniciales = credito # Se establece el crédito inicial.
    print(f»Saldo actual: {creditos_iniciales} créditos») # Informa al usuario del crédito introducido.
    if creditos_iniciales = margarita: # Descuenta al crédito inicial el importe de la pizza.
    pedido.append(f»Pizza Base Margarita») # Añade a la lista el producto adquirido para generar el ticket.
    credito -= float (margarita) # Descuenta el coste de la base de pizza del importe inicial.
    total += margarita # Almacena el total de gasto acumulado con este pedido.
    print(f»Su saldo actual es de {round(credito, 2)} créditos.») # Informa al usuario de saldo actual de sus créditos.
    break # Rompe este bucle para pasar al bucle de elección de ingredientes extra.
    else: # Si el crédito inicial es insuficiente, avisa al usuario y regresa al bucle principal para solicitar crédito otra vez.
    print(f»Crédito insuficiente: su saldo actual es de {creditos_iniciales} créditos» )

    # Los case 2 y 3 son iguales que el case 1, pero con diferentes bases de pizza y precios.
    case 2:
    print(«______________________DATOS DEL PEDIDO_____________________»)
    print(f»Ha seleccionado pizza Boloñesa.\n Total a pagar: {bolonesa} créditos.»)

    if creditos_iniciales >= bolonesa:
    pedido.append(f»Pizza Base Boloñesa»)
    credito -= float(bolonesa)
    total += bolonesa
    print(f»Su saldo actual es de {round(credito, 2)} créditos.»)
    break
    else:
    print(f»Crédito insuficiente: su saldo actual es de {creditos_iniciales} créditos» )

    case 3:
    print(«______________________DATOS DEL PEDIDO_____________________»)
    print(f»Ha seleccionado pizza Cuatro Quesos.\n Total a pagar: {cuatro_quesos} créditos.»)

    if credito >= cuatro_quesos:
    print(f»Su saldo actual es de {round(credito, 2)} créditos.»)
    pedido.append(«Pizza Base Cuatro Quesos»)
    credito -= float(cuatro_quesos)
    total += cuatro_quesos
    print(f»Su saldo actual es de {round(credito, 2)} créditos.»)
    break
    else:
    print(f»Crédito insuficiente: su saldo actual es de {creditos_iniciales} créditos» )

    case _: # Si se selecciona una opción no contemplada, se solicita volver a intentarlo:
    print(«\n\n\n——–¡ERROR! :SELECCIONE UN VALOR DEL 1 AL 3———–\n»)

    while True: # Tercer bucle: este bucle establece los ingredientes extras:
    if credito >= lista_extras[0]: # Comprueba que tenga crédito suficiente (al menos parar el ingrediente extra más económico)
    ingrediente_extra = input(«¿Desea algún ingrediente extra?\n SI\n NO\n»).upper() # Si dispone de crédito, se le pregunta si desea un ingrediente extra:

    if ingrediente_extra == «SI» or ingrediente_extra == «S»: # El usuario podrá contestar si, Si, SI, sI, s, S.
    # Se muestran los ingredientes y sus precios.
    print(«_______________INGREDIENTES EXTRA DISPONIBLES________________\n»)
    print(f» 1- Extra de queso: {queso} créditos»)
    print(f» 2- Champiñones: {champinon} créditos»)
    print(f» 3- Tomate natural: {tomate_natural} créditos»)
    print(«\n————— 0 ——————\n»)
    print(f»Saldo actual: {round(credito,2)} créditos») # Se informa del crédito disponible actualmente.

    eleccion = float(input(«Seleccione un ingrediente extra:\n»)) #Se solicita una elección de ingrediente.
    match eleccion: # Según la elección del cliente se le informa del ingrediente seleccionado y del coste del mismo.
    case 1:
    print(«______________________DATOS DEL PEDIDO_____________________»)
    print(f»Ha seleccionado Extra de queso.\nEl ingrediente extra tiene un recargo de {queso} créditos.»)

    if credito >= queso: #Comprueba que realmente dispone de suficiente crédito:
    pedido.append(«Extra de quesos») # Almacena el ingrediente extra en la lista para generar el ticket:
    credito -= float(queso) # Descuenta el valor del ingrediente extra al saldo del cliente.
    total += queso # Suma el coste del ingrediente extra al total de gastos del cliente.
    print(f»Su saldo actual es de {round(credito, 2)} créditos, el coste actual de su pedido es: {round(total,2)} créditos.»)
    #Informa al usuario de los créditos de su saldo y el coste actual del pedido.
    continue
    else: # Si no dispone de saldo suficiente para este ingrediente extra, se le informa, y se recuerda el saldo actual del usuario.
    print(f»Crédito insuficiente para adquirir un ingrediente extra: su saldo actual es de {creditos_iniciales} créditos» )
    break
    # Los case 2 y 3 son iguales que el case 1 pero con diferentes ingredientes y precios.
    case 2:
    print(«______________________DATOS DEL PEDIDO_____________________»)
    print(f»Ha seleccionado Extra de champiñones.\nEl ingrediente extra tiene un recargo de {champinon} créditos.»)
    if credito >= champinon:
    pedido.append(«Extra de Champiñones»)
    credito -= float(champinon)
    total += champinon
    nuevo_total = total
    print(f»Su saldo actual es de {round(credito, 2)} créditos, el coste actual de su pedido es: {round(total,2)} créditos.»)
    continue
    else:
    print(f»Crédito insuficiente para adquirir un ingrediente extra: su saldo actual es de {creditos_iniciales} créditos» )
    break

    case 3:
    print(«______________________DATOS DEL PEDIDO_____________________»)
    print(f»Ha seleccionado Extra de tomate natural.\nEl ingrediente extra tiene un recargo de {tomate_natural} créditos.»)
    if credito >= tomate_natural:
    pedido.append(«Extra de tomate natural»)
    credito -= float(tomate_natural)
    total += tomate_natural
    nuevo_total = total
    print(f»Su saldo actual es de {round(credito, 2)} créditos, el coste actual de su pedido es: {round(total,2)} créditos.»)
    continue
    else:
    print(f»Crédito insuficiente para adquirir un ingrediente extra: su saldo actual es de {creditos_iniciales} créditos» )
    break

    case _: # Si se selecciona una opción no contemplada, se solicita volver a intentarlo:
    print(«Seleccione un valor comprendido entre 1 y 3»)
    continue

    if ingrediente_extra == «NO» or ingrediente_extra == «N»: # Si el usuario no desea más ingredientes, se finaliza el bucle y se pasa al resumen e impresión del ticket (puede responder con no, No, NO, nO, n, N)
    print(f»\nEl coste total de su pedido es de {round(total,2)} créditos\nDispone de un saldo a su favor de {round(credito)} créditos\n¡Buen provecho!»)
    break

    else:
    print(«Parámetro incorrecto, indique Si o No.») # Si el usuario escribe algo no contemplado, le solicita repetir la opción.
    continue
    else:
    print(«Saldo insuficiente para adquirir ingredientes extra:») # Si el usuario no dispone de saldo suficiente para adquirir ningún ingrediente extra, se rompe el bucle y pasa la resumen e impresión de ticket final.
    break
    # ticket final:
    print(«__________________TICKET______________________»)

    print(«Pizza Base:»)
    # Comprueba la cantidad de elementos que presenta el pedido de cada elemento y los agrupa, sumando su valor total por separado:
    if pedido.count(«Pizza Base Margarita») >= 2:
    numero_de_margaritas = int((pedido.count(«Pizza Base Margarita»)-1))
    print(f»{numero_de_margaritas} Base Pizza Margarita ____________ Total: {round(numero_de_margaritas * margarita,2)} créditos»)

    elif pedido.count(«Pizza Base Boloñesa») >= 2:
    numero_de_bolonesas = int((pedido.count(«Pizza Base Boloñesa»)-1))
    print(f»{numero_de_bolonesas} Base Pizza Boloñesa _____________ Total: {round(numero_de_bolonesas * bolonesa,2)} créditos»)

    elif pedido.count(«Pizza Base Cuatro Quesos») >= 2:
    numero_de_cuatro_quesos = int((pedido.count(«Pizza Base Cuatro Quesos»)-1))
    print(f»{numero_de_cuatro_quesos} Base Pizza Cuatro Quesos ________ Total: {round(numero_de_cuatro_quesos * cuatro_quesos,2)} créditos»)
    else:
    print(«Ningún pedido solicitado»)

    print(«Ingredientes extra:»)

    if pedido.count(«Extra de quesos») >= 2:
    numero_de_extras_queso = int((pedido.count(«Extra de quesos»)-1))
    print(f»{numero_de_extras_queso} Extra de Quesos _________________ Total: {round(numero_de_extras_queso * queso,2)} créditos»)

    if pedido.count(«Extra de Champiñones») >= 2:
    numero_de_extras_queso = int((pedido.count(«Extra de Champiñones»)-1))
    print(f»{numero_de_extras_queso} Extra de Champiñones ____________ Total: {round(numero_de_extras_queso * queso,2)} créditos»)

    if pedido.count(«Extra de tomate natural») >= 2:
    numero_de_extras_queso = int((pedido.count(«Extra de tomate natural»)-1))
    print(f»{numero_de_extras_queso} Extra de tomate natural _________ Total: {round(numero_de_extras_queso * queso,2)} créditos»)

    else: #Si no se desean ingredientes extra, o el crédito es insuficiente para seleccionar uno, se indica en el ticket:
    print(«Ningún ingrediente extra»)

    # Resumen general del estado de coste del pedido y el saldo del cliente.
    print (f»\n-Coste total del pedido:___________________ {round(total,2)} créditos.\n-Crédito disponible:_______________________ {round(credito,2)} créditos\n»)

  2. Código para usar while con la lista de países:

    # Inicializamos el índice
    pais = 0
    # Bucle while para iterar a través de la lista de países
    while pais < len(paises):
    print(paises[pais])
    pais += 1

  3. Saludos el projecto de la pizza esta super interesante. Pero luego de haberlo creado y corrido te das cuenta que al principio no hay una instruccion para saber si tiene el dinero disponible para comprar la pizza. El programa te deja correrlo independientemente si no tienes la cantidad completa del dinero y cuando te tira el resultado te da un negativo. Yo estoy preparando el mismo projecto pero con otras instrucciones que antes de que comienze a ejecutar dinero -= pizza o total += pizza el sistema verifica de ante mano si tiene suficiente dinero para comprar. Lo hice con un if preguntadole al programa que si DINERO_INICIAL > pizza(peperoni,queso) entonces puede continuar ejecutando las instrucciones. Pero si el dinero inicial es menor que el costo de la pizza ahi inmediatamente termina el programa con un mensaje que le dice usted no tiene el dinero disponible para comprar la pizza> Si me lo permiten puedo publicar el codigo aqui para el beneficio de los compañeros

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba