[ Foro de Python ]

Ayuda con FUnciones en Python

15-May-2022 00:15
Invitado (kvanegas214)
0 Respuestas

Hola a todos. Tengo el siguiente inconveniente: necesito transformar un código de Python a funciones pero no sé qué estoy haciendo mal. El planteamiento del problema original es este: Se requiere un programa que calcule el volumen del paquete teniendo en cuenta su altura, su ancho y su profundidad. El costo del paquete será de 5 veces su volumen. Adicional a esto, si el paquete tiene más de 30 cm de ancho, su costo de envío aumenta en $2.000 y si este costo de envío es mayor a $10.000, se le debe aumentar un impuesto del 19%.

Luego de esto, se hizo una modificación al programa y ese código se ingresó en un ciclo For ya que el programa debe pedirle al usuario que digite el número de paquetes al cual se le va a hacer el proceso anteriormente mencionado y que también ingrese un número entre 1 y 100 para aplicarle un descuento. Este es el código que se encuentra en este momento, el cual funciona correctamente:

numeroPaquetes = int(input("Ingrese el número de paquetes: "))
descuento = int(input("Digite el porcentaje de descuento: "))
valorTotal = 0
for i in range(1,(numeroPaquetes + 1)):
   altoPaquete = float(input("Por favor, ingrese la altura del paquete: "))
   anchoPaquete = float(input("Ahora, digite el ancho del paquete: "))
   profundidadPaquete = float(input("Finalmente, inserte la profundidad del paquete: "))
   volumenPaquete = altoPaquete * anchoPaquete * profundidadPaquete
   costoEnvioPaquete = volumenPaquete * 5
   if altoPaquete > 30:
       costoEnvioPaquete = costoEnvioPaquete + 2000
   if costoEnvioPaquete > 10000:
       costoEnvioPaquete = costoEnvioPaquete + costoEnvioPaquete * 0.19
   valorTotal = valorTotal + costoEnvioPaquete
descuento = descuento / 100
valorTotal = valorTotal - (valorTotal * descuento)
print("El valor total de envío de los paquetes es: $",valorTotal)

Ahora, me están pidiendo que se debe tomar este código y separarlo en dos funciones: calcularCosto(alto, ancho, profundo) y costoTotal(numeroPaquetes, descuento). La primera función, calcularCosto(alto, ancho, profundo), debe contener el código que calcula el costo de un paquete dado su volumen, pero sin las impresiones en pantalla. La segunda función, costoTotal(numeroPaquetes, descuento), deberá solicitar los datos de cada paquete el número de veces que el parámetro numeroPaquetes indique pero sin las impresiones en pantalla. La función calcularCosto debe RETORNAR el costo del paquete, mientras que la función costoTotal debe RETORNAR el costo acumulado de los paquetes que ha leído, con el descuento que se envíe como parámetro.

Para la primera función, tengo este código, que funciona:

def calcularCosto(alto,ancho,profundo):
   volumen = alto * ancho * profundo
   costo = volumen * 5
   if alto > 30:
       costo = costo + 2000
   if costo > 10000:
       costo = costo + (costo * 0.19)
   return costo

Funciona porque se puede probar con este código que va por fuera de la función calcularCosto:

altoPaquete = float(input("Por favor, ingrese la altura del paquete: "))
anchoPaquete = float(input("Ahora, digite el ancho del paquete: "))
profundidadPaquete = float(input("Finalmente, inserte la profundidad del paquete: "))    
costo = calcularCosto(altoPaquete,anchoPaquete,profundidadPaquete)
print("El costo de envío del paquete es: $",costo)

Pero, para la segunda función, no sé qué hacer. Tengo este código:

def costoTotal(numeroPaquetes,descuento):
   for i in range(1,(numeroPaquetes + 1)):
       calcularCosto(alto,ancho,profundo)
       valorTotal = valorTotal + calcularCosto(alto,ancho,profundo)
   descuento = descuento / 100
   valorTotal = valorTotal - (valorTotal * descuento)
   return valorTotal

Pero siempre me genera varios errores ya que solo entra una vez en el ciclo For y el cálculo no se realiza correctamente ni para el valorTotal que está dentro del For, ni al momento de aplicar el descuento. ¿Me pueden ayudar, por favor? Muchas gracias de antemano.




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...