[ Foro de Python ]

Python __cmp__ !

13-Aug-2016 05:26
Invitado (equipo_de_gnc)
1 Respuestas


Holaa

el codigo es el siguiente,


def es_numero(valor): return isinstance(valor, (int, float, long, complex) )

def es_cadena_no_vacia (valor): return isinstance (valor, (str))

class Hotel(object):

def __init__ (self, nombre = '*', ubicacion = '*',
             puntaje = 0, precio = float("inf")):


    if es_cadena_no_vacia (nombre):
        self.nombre = nombre
    else:
        raise TypeError ("El nombre debe ser una cadena no vacía")

    if es_cadena_no_vacia (ubicacion):
        self.ubicacion = ubicacion
    else:
        raise TypeError ("La ubicación debe ser una cadena no vacía")

    if es_numero(puntaje):
        self.puntaje = puntaje
    else:
        raise TypeError ("El puntaje debe ser un número")

    if es_numero(precio):
        if precio != 0:
            self.precio = precio
        else:
            self.precio = float("inf")
    else:
        raise TypeError("El precio debe ser un número")

def __str__(self):
    """ Muestra el hotel según lo requerido. """
    return self.nombre + " de "+ self.ubicacion+ \
            " - Puntaje: "+ str(self.puntaje) + " - Precio: "+ \
            str(self.precio)+ " pesos."

def ratio (self):
    """ Calcula la relación calidad-precio de un hotel de acuerdo a la fórmula que nos dio el cliente. """
    return ((self.puntaje**2)*10.)/self.precio

h1 = Hotel("Hotel Guadalajara", "Pinamar", 1, 35)

h2 = Hotel("Hostería París", "Aosario", 1, 35)

h3 = Hotel("Apart-Hotel Estocolmo", "Esquel", 3, 105)

h4 = Hotel("Posada El Cairo", "Salta", 2.5, 15)

lista = [ h1, h2, h3, h4 ]

lista.sort()

for Hotel in lista:

print Hotel



el ejercicio que no estoy pudiendo resolver es el siguiente:

Modificar el método cmp de Hotel para poder ordenar de menor a mayor las listas de hoteles según el criterio: primero por ubicación, en orden alfabético y dentro de cada ubicación por la relación calidad-precio.

o sea, si entiendo bien, si dos hoteles se llaman igual , ordenar segun calidad precio (de ratio). Como lograria esto? Agradezco infinitamente cualquier respuesta orientativa al menos ya que carezco de algunos conocimientos, e intente algunas maneras, y no logro sacarlo.. puede que no este entendiendo bien/ o no este del todo bien expresado el enunciado del ejercicio? (de aca: https://librosweb.es/libro/algoritmos_python/capitulo_14/ejercicios_14.html)

Muchas gracias!! llorando!


25-Aug-2016 15:24
Nacho Cabanes (+83)

Pero ese método cmp no lo tienes creado aún. Comienza por que ordene sólo por un criterio (por ejemplo, por ubicación). Es poco más que un "if" que compare la ubicación de los dos datos. En cuanto eso funcione, no te costará ampliar ese "if" para que, en caso de que las dos ubicaciones sean iguales, compare las relaciones calidad / precio.






(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.)