Saltar a contenido

Conductores

Considerando la siguiente estructura de datos:

conductores = {
    #username: [nombre, puntaje, [marca, modelo]]
    'azambrano': ['Andres Zambrano', 5.6, ['Hyundai', 'Elantra']],
    'jojeda': ['Juan Ojeda', 1.1, ['Hyundai', 'Accent']],
    #...
}

a) Desarrolle la función agrega_conductor(conductores, nuevo_conductor) donde nuevo_conductor corresponde a una lista con los siguientes datos [username, nombre_completo, puntaje, [marca, modelo]]. Por ejemplo;

>>> agrega_conductor(conductores,['fsoto', 'Fabiola Soto', 4.4, ['Peugeot', '308']])
True
La función debe modificar el diccionario y retornar True. Si el username del conductor a agregar ya existe, no modifique el diccionario y sólo retorne False.

b) Desarrolle la función elimina_conductor(condutores, username) que elimine el conductor con el username desde la estructura conductores.

>>> elimina_conductor(conductores, 'jojeda')
True
>>> elimina_conductor(conductores, 'pmunoz')
False
c) Desarrolle la función ranking(conductores) que recibe el diccionario conductores y entrega una lista de listas con los usernames y puntajes, ordenados de mayor a menor puntaje. Por ejemplo;
>>> ranking(conductores)
[['Andres Zambrano', 5.6], ['Fabiola Soto', 4.4]]

Solución
def agrega_conductor(conductores, nuevo_conductor):
    username = nuevo_conductor[0]
    nombre = nuevo_conductor[1]
    puntaje = nuevo_conductor[2]
    marca = nuevo_conductor[3][0]
    modelo = nuevo_conductor[3][1]
    if username in conductores:
        return False
    conductores[username] = [nombre, puntaje, [marca, modelo]]
    return True


def elimina_conductor(conductores, username):
    if username not in conductores:
        return False
    del conductores[username]
    return True


def ranking(conductores):
    r = []
    for c in conductores:
        r.append([conductores[c][1], conductores[c][0]])
    r.sort()
    r.reverse()
    final = []
    for datos in r:
        puntaje = datos[0]
        nombre = datos[1]
        final.append([nombre, puntaje])
    return final


conductores = {
    'azambrano': ['Andres Zambrano', 5.6, ['Hyundai', 'Elantra']],
    'jojeda': ['Juan Ojeda', 1.1, ['Hyundai', 'Accent']],
    # ...
}

print(agrega_conductor(conductores,['fsoto', 'Fabiola Soto', 4.4, ['Peugeot', '308']]))
print(elimina_conductor(conductores, 'jojeda'))
print(elimina_conductor(conductores, 'pmunoz'))
print(ranking(conductores))