Autor Tema: Deseo ayuda con un problema que no puedo resolver  (Leído 3942 veces)

ccrlos1

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Deseo ayuda con un problema que no puedo resolver
« en: 14 de Septiembre 2022, 09:22 »
Estoy trabajando en un proyecto en python en cual estoy haciendo un codigo al estilo de lo que vendria a ser un aeropuerto, mi problema es que no logro crear la parte de boleteria y quisiera que si alguien puede me asistiera en eso unicamente.
    En lo de boleteria unicamente hay 4 vuelos que tienen distintos destinos, origenes, precios y cantidad de asientos. Tengo que ser capaz de elegir un avion (Los vuelos se eligen  ingresando un codigo de vuelo) que se muestre los datos del vuelo, cuantos asientos disponibles tiene y que se este actualizando la disponibilidad de asientos del vuelo. Los asientos no se pueden repetir, es decir no puedo vender el mismo asiento 2 veces.
    Gracias por leer esto y por su tiempo, por favor de serte posible ayudame con esto ;D.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Deseo ayuda con un problema que no puedo resolver
« Respuesta #1 en: 14 de Septiembre 2022, 18:10 »
No conozco el lenguaje Python.
Pero la metodología de programación es la misma sin que importe el lenguaje.

¿Estás haciéndolo usando programación orientada a objetos?
En ese caso, puedes hacer una clase "Avion", con los atributos: código vuelo, origen, destino y precio asiento.
Otro atributo sería un arreglo que represente los asientos disponibles. Puedes usar valor 0 para los asientos libres y valor 1 para los que ya están ocupados.
Así puedes evitar ofrecer dos veces el mismo asiento, porque los que tengan valor 1 estarán ocupados.

Luego ya a esta clase le añades métodos que devuelvan el valor de esos atributos, que puedan recorrer el arreglo para determinar si hay asientos libres o no, para cambiar el valor de un asiento ha "ocupado" cuando se formalice la venta del boleto,...

Intenta escribir esta clase y compartir el código que tengas hecho.
La gente que conozca Python, se animará más ayudarte si muestras un código ya empezado, en lugar de que tengan ellos que empezar uno desde cero.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

ccrlos1

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Deseo ayuda con un problema que no puedo resolver
« Respuesta #2 en: 15 de Septiembre 2022, 11:38 »
Gracias por tus recomendaciones, las tomé en cuenta.

    *Bueno referente al codigo hice lo siguiente; Cree una diccionario anidado con los datos de los vuelos, hay un input para ingresar el numero de vuelo que al hacerlo libera los datos de este mismo (luce contraproducente el que repita los datos que estan en el diciconario anidado ahi pero lo hice por 2 razones; ocupo esos datos mas adelante para ciertos procesos y considero que es mucho mas facil de esta forma que creando variables para acceder a ellos) y por ultimo solo se encuentra una variable con una dirrecion del diccionario y un print, los cuales nos son muy importantes unicamente los puse para poder ver que cambios se daban si cambiaba ciertas cosas.
    *No se como hacer para que al elegir un asiento que busque si se encuentre en el vuelo y cambie el estado de dicho asiento,  por decir algo "x" o "ocupado" y que al ingresar nuevamente el mismo asiento y haga la busqueda de este mismo y no aparezca y que por ello entienda el codigo que al no estar el asiento es porque esta ocupado.
    Nuevamente agradesco por su tiempo y que hayan leido mi consulta, adjunto el código que tengo hecho por el momento (Estoy trabajando en phython).

Código: [Seleccionar]
#Boleteria
vuelos={"HN012":{"ORIGEN":["San Pedro Sula"],"DESTINO":["Roatan"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8'],"PRECIOu":[165.7],"COSTOe":[1200.70]}
        ,"HN013":{"ORIGEN":["Comayagua"],"DESTINO":["Roatan"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8', 'A#9', 'A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16'],"PRECIOu":[278.9 ],"COSTOe":[4500.00]}
        ,"HN016":{"ORIGEN":["Tegucigalpa"],"DESTINO":["San Pedro Sula"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8', 'A#9', 'A#10'],"PRECIOu":[125.8],"COSTOe":[1245.69]}
        ,"HN019":{"ORIGEN":["Ceiba"],"DESTINO":["Roatan"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8', 'A#9', 'A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16', 'A#17', 'A#18', 'A#19', 'A#20'],"PRECIOu":[124.9],"COSTOe":[2550.54]}}

numeroDeVuelo=input("Ingrese el codigo de vuelo: ")
numeroDeVuelo=numeroDeVuelo.upper()
going=False

while going==False:
    if numeroDeVuelo=="HN012":
        origen="San Pedro Sula"
        destino="Roatan"
        cantidad_asientos=8
        precioU=165.7
        costoE=1200.70
        going=True

    elif numeroDeVuelo=="HN013":
        origen="Comayagua"
        destino="Roatan"
        cantidad_asientos=16
        precioU=278.9 
        costoE=4500.00
        going=True

    elif numeroDeVuelo=="HN016":
        origen="Tegucigalpa"
        destino="San Pedro Sula"
        cantidad_asientos=10
        precioU=125.8
        costoE=1245.69
        going=True

    elif numeroDeVuelo=="HN019":
        origen="Ceiba"
        destino="Roatan"
        cantidad_asientos=20
        precioU=124.9
        costoE=2550.54
        going=True

    else:
        print("«««Numero de vuelo inexistente»»»")
        numeroDeVuelo=input("Ingrese codigo de vuelo existente: ")
        numeroDeVuelo=numeroDeVuelo.upper()

codigoA=vuelos[numeroDeVuelo]["cASIENTOS"]
   
print("Asientos disponibles del vuelo: ","\n",
      codigoA)
« Última modificación: 15 de Septiembre 2022, 18:58 por Mario R. Rancel »

Alejandro Cores

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re: Deseo ayuda con un problema que no puedo resolver
« Respuesta #3 en: 21 de Septiembre 2022, 19:15 »
Para el problema que planteas podría ser conveniente hacer uso de clases de python, donde "cASIENTOS" sería una lista de tuplas atributo de la clase "Vuelo", y dicho atributo consistiría en un diccionario, tal que, las claves son asientos y los valores representen ocupado o no ocupado.

 

Alejandro Cores

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re: Deseo ayuda con un problema que no puedo resolver
« Respuesta #4 en: 22 de Septiembre 2022, 16:52 »
Hola, siguiendo lo comentado por Kabuto te dejo por aquí lo que sería su sugerencia de clase Vuelo expresado en Python.

No sé si estás familiarizado el trabajo con clases (orientado a objetos) en Python.

Código de la clase "Vuelo":
Código: [Seleccionar]

# -*- coding: utf-8 -*-

class Vuelo:

    def __init__(self,codigo_vuelo,id_avion,origen,destino,precio,asientos):
   
        self.codigo_vuelo = codigo_vuelo
        self.id_avion = id_avion
        self.origen = origen
        self.destino = destino
        self.precio = precio
        self.asientos = asientos
        self.asientos_disponibles= [k for k in asientos if asientos[k]==0]
        self.asientos_no_disponibles = [k for k in asientos if asientos[k]==1]



Alejandro Cores

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re: Deseo ayuda con un problema que no puedo resolver
« Respuesta #5 en: 26 de Septiembre 2022, 16:34 »
Buenas, aquí te dejo lo que podría ser una solución al problema que planteas.

Una vez instanciada la clase Vuelo, podemos trabajar con ella haciendo consultas a lo que sería una pequeña base de datos.

En cuanto al código:

He modificado la forma en la que sugieres los datos sobre los vuelos. Como puedes observar se tiene un diccionario donde las claves son los asientos y los valores su estado de ocupación, siendo 0:no ocupado y 1:ocupado.

Código: [Seleccionar]
# -*- coding: utf-8 -*-

"""
#Boleteria
vuelos={"HN012":{"ORIGEN":["San Pedro Sula"],"DESTINO":["Roatan"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8'],"PRECIOu":[165.7],"COSTOe":[1200.70]}
        ,"HN013":{"ORIGEN":["Comayagua"],"DESTINO":["Roatan"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8', 'A#9', 'A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16'],"PRECIOu":[278.9 ],"COSTOe":[4500.00]}
        ,"HN016":{"ORIGEN":["Tegucigalpa"],"DESTINO":["San Pedro Sula"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8', 'A#9', 'A#10'],"PRECIOu":[125.8],"COSTOe":[1245.69]}
        ,"HN019":{"ORIGEN":["Ceiba"],"DESTINO":["Roatan"],"cASIENTOS":['A#1', 'A#2', 'A#3', 'A#4', 'A#5', 'A#6', 'A#7', 'A#8', 'A#9', 'A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16', 'A#17', 'A#18', 'A#19', 'A#20'],"PRECIOu":[124.9],"COSTOe":[2550.54]}}

"""

vuelos = [["HN012","San Pedro Sula","Roatan",165.7,{'A#1':1, 'A#2':1, 'A#3':1, 'A#4':1, 'A#5':1, 'A#6':1, 'A#7':1, 'A#8':1, 'A#9':0, 'A#10':0, 'A#11':0, 'A#12':0, 'A#13':0, 'A#14':0, 'A#15':0, 'A#16':0, 'A#17':0, 'A#18':0, 'A#19':0, 'A#20':0}],
          ["HN013","Comayagua","Roatan",278.9, {'A#1':1, 'A#2':1, 'A#3':1, 'A#4':1, 'A#5':1, 'A#6':1, 'A#7':1, 'A#8':1, 'A#9':1, 'A#10':1, 'A#11':1, 'A#12':1, 'A#13':1, 'A#14':1, 'A#15':1, 'A#16':1, 'A#17':0, 'A#18':0, 'A#19':0, 'A#20':0}],
          ["HN016","Tegucigalpa","San Pedro Sula",125.8,{'A#1':1, 'A#2':1, 'A#3':1, 'A#4':1, 'A#5':1, 'A#6':1, 'A#7':1, 'A#8':1, 'A#9':0, 'A#10':1, 'A#11':0, 'A#12':0, 'A#13':0, 'A#14':0, 'A#15':0, 'A#16':0, 'A#17':0, 'A#18':0, 'A#19':0, 'A#20':0}],
          ["HN019","Ceiba","Roatan",124.9,{'A#1':1, 'A#2':1, 'A#3':1, 'A#4':1, 'A#5':1, 'A#6':1, 'A#7':1, 'A#8':1, 'A#9':1, 'A#10':1, 'A#11':1, 'A#12':1, 'A#13':1, 'A#14':1, 'A#15':1, 'A#16':1, 'A#17':1, 'A#18':1, 'A#19':1, 'A#20':1}]]

class Vuelo:

    def __init__(self,codigo_vuelo,origen,destino,precio,asientos):
   
        self.codigo_vuelo = codigo_vuelo
        #self.id_avion = id_avion
        self.origen = origen
        self.destino = destino
        self.precio = precio
        self.asientos = asientos
        self.asientos_disponibles= [k for k in asientos.keys() if asientos[k]==0]
        self.asientos_no_disponibles = [k for k in asientos.keys() if asientos[k]==1]


def carga(conj_vuelos):
    l = []
    for i in range(len(conj_vuelos)):
        l.append(Vuelo(conj_vuelos[i][0],conj_vuelos[i][1],conj_vuelos[i][2],conj_vuelos[i][3],conj_vuelos[i][4]))
       
    return l

def consecuencia(codigo):
    for i in range(len(bbdd)):
        if bbdd[i].codigo_vuelo==codigo:
            return bbdd[i]
   

def mostrar_menu(opciones):
    print('Seleccione una opción:')
    for clave in sorted(opciones):
        print(f' {clave}) {opciones[clave][0]} {opciones[clave][1]} ')


def leer_opcion(opciones,l):
    while (a := input('Opción: ')) not in l:
        print('Opción incorrecta, vuelva a intentarlo.')
    return a


def ejecutar_opcion(opcion, opciones):
    opciones[1][2](opcion)


def generar_menu(opciones,l, opcion_salida):
    opcion = None
    while opcion != opcion_salida:
        mostrar_menu(opciones)
        opcion = leer_opcion(opciones,l)
        ejecutar_opcion(opcion, opciones)
        print()


def menu_principal():
    lista =[i.codigo_vuelo for i in bbdd]
    opciones = {
        1: ['Seleccionar un código de vuelo: ', lista, accion1]
       # '2': ('Salir', salir)
    }

    generar_menu(opciones,lista, '1')
   
bbdd = carga(vuelos)

def mostrar_menu2(opciones):
    print('Seleccione una opción:')
    for clave in sorted(opciones):
        print(f' {clave}) {opciones[clave][0]}')
       
def leer_opcion2(opciones):
    l = [i for i in opciones.keys()]
    a = int(input('Opción: '))
    while a not in l:
        print('Opción incorrecta, vuelva a intentarlo.')
    return a

def ejecutar_opcion2(opcion, opciones,vuelo):
    opciones[opcion][1](vuelo)

def generar_menu2(opciones,vuelo):
        mostrar_menu2(opciones)
        opcion = leer_opcion2(opciones)
        ejecutar_opcion2(opcion, opciones,vuelo)
        print()
       
def accion1(o):
    vuelo = consecuencia(o)
    opciones = {
        1: ['Consulta asientos disponibles', consultaDis],
        2: ['Ocupa asiento', ocupa],
        3: ['Consulta precio', consultaP]
    }

    generar_menu2(opciones,vuelo)


def consultaDis(vuelo):
    print(vuelo.asientos_disponibles)
   
def leer_asiento_seleccionado(vuelo):
    a = input('Asiento: ')
    vuelo.asientos[a] = 1
    vuelo.asientos_disponibles.remove(a)
    vuelo.asientos_no_disponibles.append(a)
   

def ocupa(vuelo):
    print("Selecciona un asiento: ",vuelo.asientos_disponibles)
    asiento = leer_asiento_seleccionado(vuelo)
   
def consultaP(vuelo):
    print(vuelos.precio)


if __name__ == '__main__':
    menu_principal()

Aquí adjunto un ejemplo de una ejecución de esta pequeña aplicación:

Citar
Seleccione una opción:
 1) Seleccionar un código de vuelo:  ['HN012', 'HN013', 'HN016', 'HN019']

Opción: HN012
Seleccione una opción:
 1) Consulta asientos disponibles
 2) Ocupa asiento
 3) Consulta precio

Opción: 1
['A#9', 'A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16', 'A#17', 'A#18', 'A#19', 'A#20']


Seleccione una opción:
 1) Seleccionar un código de vuelo:  ['HN012', 'HN013', 'HN016', 'HN019']

Opción: HN012
Seleccione una opción:
 1) Consulta asientos disponibles
 2) Ocupa asiento
 3) Consulta precio

Opción: 2
Selecciona un asiento:  ['A#9', 'A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16', 'A#17', 'A#18', 'A#19', 'A#20']

Asiento: A#9


Seleccione una opción:
 1) Seleccionar un código de vuelo:  ['HN012', 'HN013', 'HN016', 'HN019']

Opción: HN012
Seleccione una opción:
 1) Consulta asientos disponibles
 2) Ocupa asiento
 3) Consulta precio

Opción: 1
['A#10', 'A#11', 'A#12', 'A#13', 'A#14', 'A#15', 'A#16', 'A#17', 'A#18', 'A#19', 'A#20']

Creo que con el código, la explicación de Kabuto y lo que te he añadido aquí podrás interpretarlo todo. No obstante, si tienes alguna duda consulta.

Saludos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".