Ejercicios soluciones y test unitario

# Crear una función precio que nos calcule el precio de un viaje de la siguiente manera
# precioViaje(tipoCliente,destino)
# si el cliente es 'vip' y el destino es 'Atenas' 1000
# si el cliente es 'normal' y el destino es 'Atenas' 1300
# si el cliente es 'vip' y el destino es 'Roma' 600
# si el cliente es 'normal' y el destino es 'Roma' 900

def precioViaje(tipoCliente, destino):
    tabla = [{"tipo": "vip", "destinos": [{"destino": "Atenas", "precio": 1000},
                                          {"destino": "Roma", "precio": 600}]},
             {"tipo": "normal", "destinos": [{"destino": "Atenas", "precio": 1300},
                                             {"destino": "Roma", "precio": 900}]}
             ]
    for cliente in tabla:
        for destinos in cliente["destinos"]:
            if cliente["tipo"] == tipoCliente and destinos["destino"] == destino:
                return destinos["precio"]
    return 0


def precioViaje2(tipoCliente, destino):
    if tipoCliente == 'vip':
        if destino == 'Atenas':
            return 1000
        if destino == 'Roma':
            return 600
    if tipoCliente == 'normal':
        if destino == 'Atenas':
            return 1300
        if destino == 'Roma':
            return 900

    return 0


# Crear una función iniciales a la que le pasamos una cadena y nos devuelve una lista
# con las primeras letras de cada palabra
# iniciales("hola que tal")->['h','q','t']

def iniciales01(cadena):
    # cogería cada palabra
    # apuntaría la primera letra
    palabras = cadena.split()  # me convierte una cadena en una lista de palabras
    res = []
    # recorrer las palabras
    for palabra in palabras:
        res.append(palabra[0])
    return res


def iniciales(cadena):
    # cogería cada palabra
    # apuntaría la primera letra
    palabras = cadena.split()  # me convierte una cadena en una lista de palabras
    return [palabra[0] for palabra in palabras]


# Crear una función menorLongitud a la que le pasamos una cadena y un numero y nos devuelve
# una lista con las palabras que tengan menor longitud que ese numero
# menorLongitud("hola que tal estamos. Yo estupendo",4)->['que','tal','Yo']
def menorLongitud01(cadena, numero):
    palabras = cadena.split()
    res = []
    for palabra in palabras:
        if len(palabra) < numero:
            res.append(palabra)
    return res


def menorLongitud(cadena, numero):
    palabras = cadena.split()
    return [palabra for palabra in palabras if len(palabra) < numero]

from unittest import TestCase

from ejercicios_preexamen01 import precioViaje
from ejercicios_preexamen01 import iniciales
from ejercicios_preexamen01 import menorLongitud


class Test(TestCase):
    def test_precio_viaje(self):
        precio = precioViaje('vip', 'Atenas')
        self.assertEqual(precio, 1000)
        precio = precioViaje('vip', 'Roma')
        self.assertEqual(precio, 600)
        precio = precioViaje('normal', 'Atenas')
        self.assertEqual(precio, 1300)
        precio = precioViaje('normal', 'Roma')
        self.assertEqual(precio, 900)

    def test_iniciales(self):
        lista = iniciales("hola que tal")
        self.assertListEqual(lista, ["h", "q", "t"])
        lista = iniciales("yo muy bien sabes")
        self.assertListEqual(lista, ["y", "m", "b", "s"])

    def test_menor_longitud(self):
        lista=menorLongitud("hola que tal estamos. Yo estupendo",4)
        self.assertListEqual(lista,['que','tal','Yo'])
        lista = menorLongitud("aa bbb ccc dddd eeeee fffff ggggggg", 5  )
        self.assertListEqual(lista, ['aa', 'bbb', 'ccc','dddd'])


Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos