[ Foro de Python ]

Ayuda con ejercicio Python

06-Sep-2021 21:37
Invitado (Britanny)
1 Respuestas

Hola buenas Tardes,

Llevo 3 semanas en un curso de Python y me pidieron realizar el siguiente ejercicio...
Adjunto el enunciado y lo que he hecho hasta el momento...Agradeceria enormemente cualquier ayuda me puedan brindar:

ENUNCIADO:

Una Aerolinea desea implementar un sistema para emitir boletos de avion con los
siguientes datos:

Los Boletos de Avion tienen: NombreCliente, DireccionCliente, TelefonoCliente, ValorBoleto,ImpuestoSalida, PrecioPagar = ValorBoleto + ImpuestoSalida; HoraSalida, HoraLlegada,CiudadSalida, CiudadDestino, ademas para cada una de estas ciudades se almacena la HoraActual.

Existen tambien Boletos de Avion para Clientes Frecuentes que tienen ademas un PorcentajeDescuento,de modo tal que PrecioPagar = ValorBoleto + ImpuestoSalida -PorcentajeDescuento* ValorBoleto.

Los Boletos de Avion para Ejecutivos tienen tambien una lista de Alimentos Extras, donde cada alimento extra tiene Codigo, Descripciion y Precio, asi para los Boletos de Avion para Ejecutivos se tiene que el TotalAlimentos = suma de cada uno de los precios de la lista de alimentos, y el precio a pagar del boleto se calcula como sigue:
PrecioPagar = ValorBoleto+ ImpuestoSalida + TotalAlimentos.

LO QUE HE HECHO HASTA EL MOMENTO:


import pandas as pd
import numpy as np

class BoletoAvion(): #Clase Base
   def __init__(self, valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino):
       self.__valorBoleto= valorBoleto
       self.__impuestoSalida = impuestoSalida
       self.__horaSalida = horaSalida
       self.__horaLlegada = horaLlegada
       self.__cliente = cliente
       self.__ciudadSalidad = ciudadSalida
       self.ciudadDestino = ciudadDestino
       
   @property
   def PrecioPagar(self):
       prepag = self.__valorBoleto + self.__impuestoSalida
       return (prepag)
   
   def imprimirboleto(self):
       for x in self.boletoAvion:
             print("ValorBoleto: ",x.valorBoleto, "impuestoSalida: ", x.impuestoSalida,
                   "horaSalida: ", x.horaSalida,"horaLlegada: ", x.horaLlegada,"ciudadDestino: ", x.ciudadDestino)      

   
class Cliente (): #La clase base posee una clase llamada:Cliente
   def __init__(self, valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino,nombre,direccion,telefono):
       super().__init__(valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino)
       self.__nombre = nombre
       self.__direccion = direccion
       self.__telefono = telefono

   
class Ciudad (): #La clase base posee una clase llamada: Ciudad
   def __init__(self, valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino,salidaDestino,horaActual):
       super().__init__(valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino)
       self.__salidaDestino = salidaDestino
       self.__horaActual = horaActual

class Boleto_Cliente_Frecuente(BoletoAvion): #Clase derivada de la clase base
   def __init__(self, valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino,descuento):
       super().__init__(valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino)
       self.__descuento= 10
   
   @property
   def PrecioPagarCF(self):
       preciopagar = self.__valorBoleto + self.__impuestoSalida - self.descuento * self.__valorBoleto
       return (preciopagar)
   

   
class BoletoEjecutivo(BoletoAvion): #Clase derivada de la clase base
   
    def __init__(self,valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino,listaAlimentos):
       super().__init__(valorBoleto,impuestoSalida,horaSalida,horaLlegada,cliente,ciudadSalida,ciudadDestino)
       self.__alimentos = listaAlimentos
       
    @property
    def alimentos(self):
       return self.__alimentos

    @alimentos.setter
    def alimentos(self,listaAlimentos):
       self.__alimentos = listaAlimentos
   
    def totalAlimento(self):
       return sum([i.precio for i in self.__alimentos])
   
    def precioPagar(self):
       return super().precioPagar() + self.totalAlimento()
   
    def __str__(self):
       alimentos = "\n\n[Alimentos]:\n"
       for i in self.__alimentos:
           alimentos += i.__str__() + "\n\n"
       return super().__str__() + alimentos
   
class AlimentoExtra():
   def __init__(self, alimentos):
       self.__alimentos = alimentos
       
   @property
   def alimentos(self):
           return self.__alimentos
     
   def imprimirAlimentos(self):
       for x in self.alimentos:
             print("Codigo: ",x.codigo, "Descripcion: ", x.descripcion, "Precio: ", x.precio)      


class Alimento(): #La clase Bioleto ejecutivo posee una clase llamada: Alimento
     def __init__(self, codigo, descripcion, precio):
       self.__codigo = codigo
       self.__descripcion = descripcion
       self.__precio = precio
   
     @property
     def codigo(self):
       return self.__codigo  
     
     @property
     def descripcion(self):
       return self.__descripcion    
       
     @property
     def precio(self):
       return self.__precio

   
     def __str__(self):
       codigo = "Codigo: %s\n" % (self.__codigo)
       descripcion = "Descripcion: %s\n" % (self.__descripcion)
       precio = "Precio: %s\n" % (self.__precio)
       return codigo + descripcion + precio


09-Sep-2021 03:28
Invitado (eliseo)

hola britanny

yo también estoy empezando, lo que me parece es un empacho de clases jajaja
bueno en realidad creo que le falta un poco de diseño o organización

lo que te propongo es que la clase Boleto guarde todos los datos del boleto y
llame a los metodos privados correspondientes para pedirlos desde __init__
por ej
  - d_cliente, guarda los datos del cliente en una tupla
  - d_vuelo, guarda en una tupla los datos del vuelo
  - etc

y vas rellenado todos los campos del boleto

finalmente sobreescribes __str__ de manera que compruebe si todos los
campos estan rellenados y envie una cadena con todos los datos del boleto
listos para imprimir

en el programa principal entras en un bucle que pida boletos, los guardará
en una lista y al salir pregunte si quieres ver la lista de ventas de boletos que
imprimira cada elemento de la lista ej [print(boleto) for boleto in l_boletos]

te ahorrarás todos los @property y setters ya que son metodos privados

antes de guardar cada boleto visualizalo y confirma que esté correcto, si no lo
es borra con del(boleto) y vuelve a pedir los datos

suerte ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)