9  2022-03-24
Examen de Inteligencia de los Negocios

Fecha de publicación

24 de marzo de 2022

Grado: Inteligencia de los Negocios
Fecha: 24 de marzo de 2022

Ejercicio 9.1 Escriba un programa que permita practicar una variante simplificada de la prueba de cálculo mental La calculadora humana del concurso televisivo Saber y ganar. El usuario debe ir sumando todos los números de la lista de uno en uno hasta que se equivoque o termine la lista, en cuyo caso ganará.

Ejemplo usando la lista [50, 4, 28, 33, 12]:

SUMAR Y GANAR 
Vaya sumando todos los números que le iré diciendo. Empezamos por 0. 
Más 50: 50 
Más 4: 54 
Más 28: 72 
Te has equivocado, pero has acertado 2 veces seguidas.


SUMAR Y GANAR 
Vaya sumando todos los números que le iré diciendo. Empezamos por 0. 
Más 50: 50 
Más 4: 54 
Más 28: 82
Más 33: 115
Más 12: 127
Enhorabuena, GANASTE.
# Definimos la lista de números
numeros = [50, 4, 28, 33, 12]
# Definimos un acumulador para llevar la suma
suma = 0
print("SUMAR Y GANAR")
print("Vaya sumando todos los números que le iré diciendo. Empezamos por 0.")
# Bucle iterativo para recorrer la lista de números
for i in range(len(numeros)):
    # Preguntamos al usuario por la siguiente suma
    respuesta = int(input("Más " + str(numeros[i]) + ": "))
    # Añadimos el siguiente número a la suma
    suma += numeros[i]
    # Si la respuesta del usuario no coincide con la suma, le avisamos y salimos del bucle.
    if respuesta != suma:
        print("Te has equivocado, pero has acertado", i, "veces seguidas.")
        break
# Si el acumulador suma contiene la suma de todos los números entonces el usuario ha ganado.
if suma == sum(numeros):
    print("Enhorabuena, GANASTE.")
SUMAR Y GANAR
Vaya sumando todos los números que le iré diciendo. Empezamos por 0.
Enhorabuena, GANASTE.

Ver notebook de la solución en Colab

Ejercicio 9.2 Escribir un programa que calcule a partir de una fecha de un año no bisiesto el número de días que han transcurrido en ese año y el número de meses lunares completos que abarcan. Se recuerda que un mes lunar dura aproximadamente 29,53 días.

El programa debe usar diccionarios para acceder al número de días de cada mes.

Ejemplo:

CALENDARIO LUNAR 
Este programa convierte una fecha de un año NO bisiesto a un calendario lunar. 
Indique el día: 1 
Indique el mes: henero 
El mes henero no existe. 

CALENDARIO LUNAR 
Este programa convierte una fecha de un año NO bisiesto a un calendario lunar 
Indique el día: -5 
Indique el mes: marzo 
El día -5 de marzo no existe.

CALENDARIO LUNAR 
Este programa convierte una fecha de un año NO bisiesto a un calendario lunar 
Indique el día: 29 
Indique el mes: febrero 
El día 29 de febrero no existe. 

CALENDARIO LUNAR 
Este programa convierte una fecha de un año NO bisiesto a un calendario lunar 
Indique el día: 1 
Indique el mes: febrero 
El día 1 de febrero es el día 32 del año. 
Habrán pasado 1.08 meses lunares.
# Definimos una lista con los meses del año en orden
meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"]
# Definimos un diccionario con los días de cada mes
dias = {"enero":31, "febrero":28, "marzo":31, "abril":30, "mayo":31, "junio":30, "julio":31, "agosto":31, "septiembre":30, "octubre":31, "noviembre":30, "diciembre":31}
# Definimos el número de días de un mes lunar
meslunar = 29.53
print("CALENDARIO LUNAR")
print("Este programa convierte una fecha de un año NO bisiesto a un calendario lunar.")
# Preguntamos al usuario por el día
dia = int(input("Indique el día: "))
# Preguntamos al usuario por el mes
mes = input("Indique el mes: ")
# Si el mes no está en la lista de meses, avisamos al usuario y terminamos la ejecución.
if mes not in meses:
    print("El mes", mes, "no existe.")
# Si el día no es un día válido del mes introducido, avisamos al usuario y terminamos la ejecución.
elif dia < 1 or dia > dias[mes]:
    print("El día", dia, "de", mes, "no existe.")
# En caso contrario, la fecha introducida es válida y procedemos al cálculo de días transcurridos
else:
    # Definimos un acumulador para el número de días transcurridos
    numdias = 0
    # Bucle iterativo para recorrer la lista d emeses por valor
    for i in meses:
        # Si el mes i no coincide con el mes introducido, añadimos el número de días del mes i a los días transcurridos
        if i != mes:
            numdias += dias[i]
        # Si el mes i coincide con el mes introducido, añadimos el día introducido a los días transcurridos y salimos del bucle
        else:
            numdias += dia
            break
    # Mostramos por pantalla el número de días transcurridos hasta la fecha introducida
    print("El día", dia, "de", mes, "es el día", numdias, "del año.")
    # Mostramos por pantalla el número de meses lunares transcurridos hasta la fecha introducida
    print("Habrán pasado", round(numdias / meslunar, 2), "meses lunares.")
CALENDARIO LUNAR
Este programa convierte una fecha de un año NO bisiesto a un calendario lunar.
El día 1 de febrero es el día 32 del año.
Habrán pasado 1.08 meses lunares.

Ver notebook de la solución en Colab

Ejercicio 9.3 Un cine tiene una sala rectangular con 5 filas y 4 columnas de butacas. Escribir un programa que permita gestionar la reserva de butacas con los siguientes requisitos:

  • El programa mostrará una matriz con el carácter X para las butacas libres y O para las ocupadas y preguntará por la fila y columna de la butaca a reservar.
  • Si el usuario introduce una fila o una columna no válidas, se le avisará y se le volverá a preguntar.
  • Si la fila y la columna introducida corresponde a una butaca ocupada, se avisará al usuario y se le volverá a preguntar.
  • Si la butaca está libre se reservará y se volverá a preguntar al usuario si quiere hacer más reservas.
  • El programa terminará cuando el usuario no quiera hacer más reservas.

Ejemplo:

RESERVA DE BUCATAS 
XXXXX  
XXXXX  
XXXXX  
XXXXX  
Introduce la fila que quieres: 2  
Introduce la columna que quieres: 3  
Reserva realizada.  
¿Desea realizar otra reserva? (S/N): S

RESERVA DE BUCATAS 
XXXXX  
XXOXX  
XXXXX  
XXXXX  
Introduce la fila que quieres: 5  
Introduce la columna que quieres: 1  
La fila y columna elegidas no son válidas.  
¿Desea realizar otra reserva? (S/N): S

RESERVA DE BUCATAS  
XXXXX  
XXOXX  
XXXXX  
XXXXX  
Introduce la fila que quieres: 2  
Introduce la columna que quieres: 3  
La butaca elegida está ocupada.  
¿Desea realizar otra reserva? 
(S/N): S

RESERVA DE BUCATAS  
XXXXX  
XXOXX  
XXXXX  
XXXXX  
Introduce la fila que quieres: 1  
Introduce la columna que quieres: 2  
Reserva realizada.  
¿Desea realizar otra reserva? (S/N): N  
¡Gracias! 

Solución 1

# Número de filas
nfil = 4
# Número de columnas
ncol = 5
# Creamos una lista para representar las filas del cine
cine = []
for i in range(nfil):
    # Representamos cada fila con una cadena de "X" del tamaño del número de columnas
    cine.append("X" * ncol)
# Bucle para preguntar al usuario por la reserva
while True:
    print("\nRESERVA DE BUTACAS")
    # Bucle para recorrer las filas del cine y mostrarlas por pantalla
    for i in cine:
        print(i)
    # Preguntamos al usuario por la fila que quiere
    fila = int(input("Introduce la fila que quieres: "))
    # Preguntamos al usuario por la columna que quiere
    columna = int(input("Introduce la columna que quieres: "))
    # Si el número de fila o columna son mayores de los disponibles avisamos al usuario
    if fila > nfil or columna > ncol:
        print("La fila y columna elegidas no son válidas.")
    # Si la fila y la columna que quiere el usuario está ocupada, le avisamos
    elif cine[fila-1][columna-1] == "O":
        print("La butaca elegida está ocupada.")
    # En caso contrario, reservamos la butaca escribiendo un "O" en la posición de la fila y la columna
    else:
        cine[fila-1] = cine[fila-1][:columna-1] + "O" + cine[fila-1][columna:]
        print("Reserva realizada.")
    # Preguntamos al usuario si quiere hacer otra reserva y si no salimos del bucle
    if input("¿Desea realizar otra reserva? (S/N): ") != "S":
        break
print("¡Gracias!")

RESERVA DE BUTACAS
XXXXX
XXXXX
XXXXX
XXXXX
Reserva realizada.

RESERVA DE BUTACAS
XXXXX
XXXXX
XOXXX
XXXXX
La fila y columna elegidas no son válidas.

RESERVA DE BUTACAS
XXXXX
XXXXX
XOXXX
XXXXX
La butaca elegida está ocupada.

RESERVA DE BUTACAS
XXXXX
XXXXX
XOXXX
XXXXX
Reserva realizada.
¡Gracias!

Solución 2

# Número de filas
nfil = 4
# Número de columnas
ncol = 5
# Creamos una lista para las filas del cine
cine = []
# Bucle iterativo para recorrer las filas del cine
for i in range(nfil):
    # Creamos una lista para las butacas de una fila
    fila = []
    for j in range(ncol):
        # Ponemos el caracter X en la fila i y la columna j del cine
        fila.append("X")
    # Añadimos la fila al cine
    cine.append(fila)
# Bucle para preguntar al usuario por la reserva
while True:
    print("\nRESERVA DE BUTACAS")
    # Bucle para recorrer las filas del cine y mostrarlas por pantalla
    for i in cine:
        #Unimos todas las butacas de la fila i en una cadena y la mostramos por pantalla
        print("".join(i))
    # Preguntamos al usuario por la fila que quiere
    fila = int(input("Introduce la fila que quieres: "))
    # Preguntamos al usuario por la columna que quiere
    columna = int(input("Introduce la columna que quieres: "))
    # Si el número de fila o columna son mayores de los disponibles avisamos al usuario
    if fila > nfil or columna > ncol:
        print("La fila y columna elegidas no son válidas.")
    # Si la fila y la columna que quiere el usuario está ocupada, le avisamos
    elif cine[fila-1][columna-1] == "O":
        print("La butaca elegida está ocupada.")
    # En caso contrario, reservamos la butaca escribiendo un "O" en la posición de la fila y la columna
    else:
        cine[fila-1][columna-1] = "O" 
        print("Reserva realizada.")
    # Preguntamos al usuario si quiere hacer otra reserva y si no salimos del bucle
    if input("¿Desea realizar otra reserva? (S/N): ") != "S":
        break
print("¡Gracias!")

RESERVA DE BUTACAS
XXXXX
XXXXX
XXXXX
XXXXX
Reserva realizada.

RESERVA DE BUTACAS
XXXXX
XXXXX
XOXXX
XXXXX
La butaca elegida está ocupada.

RESERVA DE BUTACAS
XXXXX
XXXXX
XOXXX
XXXXX
Reserva realizada.
¡Gracias!

Ver notebook de la solución en Colab