python

Python: ejercicio precio de hotel

Hoy vamos a resolver un ejercicio de Python sobre calcular el precio que se cobra al cliente por su estancia en determinado hotel. Los datos se deben extraer de una cadena. El ejercicio dice algo así:

Enunciado

En el Hotel “ejemplo”, a los pasajeros que ingresan se les asigna un código que corresponde a un número con exactamente 16 cifras. El significado de estas cifras es el siguiente:

  • Los 8 primeros dígitos corresponden a la fecha de ingreso (aaaammdd)
  • Los siguientes 2 dígitos representan el número de noches de estadía.
  • Los siguientes 3 dígitos, corresponde al número de la habitación que
    ha ocupado.
  • El siguiente dígito corresponde al tipo de servicios que incluye su
    estadía (1: solo desayuno, 2: todo incluido en alimentación y otros:
    piscina, spa, tours, espectáculos).
  • Los últimos 2 dígitos corresponden al número de veces que se ha
    alojado en el Hotel.
  • Por ejemplo, si un código corresponde a 2006110813201203, significa
    que el pasajero ingreso el 8 de noviembre del 2006, se quedó 13
    noches, ocupó la habitación 201, contrató al tipo de servicio todo
    incluido y es tercera vez que aloja en el hotel.
  • Para calcular el monto que debe cancelar el pasajero por la actual
    estadía, se deben aplicar los siguientes criterios en conjunto:
  • El precio base por la estadía de 1 noche es de $70.000.
  • Las habitaciones con número par tienen vista al lago. Por este motivo
    su precio base aumenta en un 10%.
  • Si el tipo de estadía es todo incluido, el precio base incrementa en un 15%.
  • Si el periodo en el que ingresa el pasajero está en el rango de
    fechas desde el 20 de diciembre al 5 de marzo (ambas fechas
    incluidas), o entre el 10 de septiembre al 20 de septiembre (ambas
    fechas incluidas), se considera temporada alta. Si el período de
    ingreso es en cualquier otra fecha, se considera temporada baja. En
    el caso de temporada alta, el precio base se aumenta en un 20% la
    estadía del pasajero.
  • Si el pasajero ha alojado antes en el Hotel, entonces se le aplica un
    descuento de un 3% por cada vez sobre el precio base.

Se pide:

Escribe un código fuente en Python que reciba el código de un pasajero, y que imprima por pantalla la siguiente información:

  1. Fecha de ingreso: (en formato dd-mm-aaaa)
  2. Tipo de estadía:
  3. Tiempo de estadía:
  4. Número de habitación:
  5. Número de veces que ha alojado:
  6. Valor de estadía completa:

Veamos ahora el ejercicio resuelto.

Ejercicio resuelto en Python

Sin más que agregar, dejo el código fuente de este ejercicio de análisis de cadenas en Python. Lo coloco aquí y lo explico más abajo:

"""
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
    
    Copyright (c) 2020 Luis Cabrera Benito
    Licenciado bajo la licencia MIT
    
    El texto de arriba debe ser incluido en cualquier redistribución
"""

PRECIO_POR_NOCHE = 70000

TIPO_ESTADIA_SOLO_DESAYUNO = "1"
TIPO_ESTADIA_TODO_INCLUIDO = "2"


def calcular(codigo):
    fecha_ingreso = codigo[0:8]
    anio = fecha_ingreso[0:4]
    mes = fecha_ingreso[4:6]
    dia = fecha_ingreso[6:8]
    fecha_sin_anio = mes + dia
    numero_noches = int(codigo[8:10])
    habitacion = int(codigo[10:13])
    servicios = codigo[13:14]
    veces_alojado = int(codigo[14:])

    precio_alojamiento = PRECIO_POR_NOCHE * numero_noches
    aumento = 0
    if habitacion % 2 == 0:
        aumento += precio_alojamiento * 0.1
    if servicios == TIPO_ESTADIA_TODO_INCLUIDO:
        aumento += precio_alojamiento * 0.15

    if ("1220" <= fecha_sin_anio <= "0305") or ("0910" <= fecha_sin_anio <= "0920"):
        aumento += precio_alojamiento * 0.2

    descuento = (precio_alojamiento * 0.03) * veces_alojado
    total = precio_alojamiento - descuento + aumento
    print(f"Fecha de ingreso: {dia}-{mes}-{anio}")
    print(f"Tipo de estadía: {servicios}")
    print(f"Tiempo de estadía: {numero_noches} días")
    print(f"Número de habitación: {habitacion}")
    print(f"Número de veces que ha alojado: {veces_alojado}")
    print(f"Valor de estadía completa: ${total}")


def main():
    codigo = input("Ingresa el código del pasajero: ")
    calcular(codigo)


main()

Lo primero que hacemos es usar split para separar cadenas en Python; con eso podemos extraer una subcadena gracias a las operaciones para cortar listas.

Después simplemente hacemos matemáticas, aumentamos o restamos según sea el caso y las comparaciones.

Una cosa importante es el rango de fechas, pues debemos verificar si la fecha se encuentra entre un período u otro.

Para ello simplemente comparé las fechas como si de cadenas se tratara, pues afortunadamente las cadenas son comparadas lexicográficamente y a su vez cronológicamente.

Al final simplemente imprimo los resultados (con las f strings para evitar concatenar). Como puedes ver, todo está encerrado en una función que recibe el código que se debe analizar, mismo que se obtiene en la función main del código fuente.

Probar ejercicio

He colocado este ejercicio en línea. Puedes acceder en este enlace. Algunos códigos para probar pueden ser:

  • 2020091807122202
  • 2020030810301100

La salida es como se ve en la imagen:

Probando ejercicio de hotel en Python

¿Te gusta la programación con Python? en mi blog tengo varios tutoriales sobre ese lenguaje de programación.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.