Mas diccionarios

[Python]
coche1={“marca”:”Tesla”,”tipo”:”Electrico”,”autonomía”:500,”precio”:40000}
coche2={“marca”:”Citroen”,”tipo”:”Gasolina”,”autonomía”:2500,”precio”:10000}

empleado1={“departamento”:”contabilidad”,”sueldo”:3000,”nombre”:”Ana Pi”}
empleado2={“departamento”:”marketing”,”sueldo”:2000,”nombre”:”Eva Buj”}

# sueldo del emppleado 1
print(empleado1[‘sueldo’])

# aumento el sueldo un 10% al empleado 1:
empleado1[‘sueldo’]*=1.1

print(empleado1[‘sueldo’])

concesionario=[{“marca”:”Tesla”,”tipo”:”Electrico”,”autonomía”:500,”precio”:40000},
{“marca”:”Citroen”,”tipo”:”Gasolina”,”autonomía”:2500,”precio”:10000},
{“marca”: “Ford”, “tipo”: “Gasolina”, “autonomía”: 3500, “precio”: 20000},
{“marca”: “Ferrari”, “tipo”: “Gasolina”, “autonomía”: 5500, “precio”: 120000},
{“marca”: “Seat”, “tipo”: “Electrico”, “autonomía”: 700, “precio”: 10000},
{“marca”: “Skoda”, “tipo”: “Gasolina”, “autonomía”: 3500, “precio”: 7000},
]

for coche in concesionario:
print(coche)

# Cual es el coche más caro
def coche_mas_caro(concesionario):
caro=concesionario[0]
for coche in concesionario:
if coche[‘precio’]>caro[‘precio’]:
caro=coche
return caro

# media de precios
def media_precios_coche(concesionario):
total=0
for coche in concesionario:
total+=coche[‘precio’]
return total/len(concesionario)

def coches_con_autonomia(concesionario, autonomia):
res=[]
for coche in concesionario:
if coche[‘autonomía’]>=autonomia:
res.append(coche[‘marca’]) # res+=[coche]
return res

print(“Mas caro”,coche_mas_caro(concesionario))
print(media_precios_coche(concesionario))
for coche in coches_con_autonomia(concesionario,2000):
print(coche)

empleados=[{“departamento”:”contabilidad”,”sueldo”:3000,”cantidad”:3},
{“departamento”:”marketing”,”sueldo”:2000,”cantidad”:2},
{“departamento”:”ceo”,”sueldo”:12000,”cantidad”:1},
{“departamento”:”administracion”,”sueldo”:1500,”cantidad”:5}]

# ¿Cuanto gasta la empresa en sueldos al mes?

def total_sueldos(empresa):
total=0
# ¿Qué recorro? UNA LISTA
for empleado in empresa:
total+=empleado[‘sueldo’]*empleado[‘cantidad’]
return total

print(total_sueldos(empleados))
[/Python]

Ejemplos diccionarios

[Python]
# Pares clave:valor
# nombre del alumno y la nota
alumnos=[“Ana”,”Pep”,”Eva”]
notas=[6,7,2]

alumno1={“nombre”:”Ana”,”nota”:6,”email”:”ana@ana.com”,”telefono”:”666999666″}
alumno2={“nombre”:”Pep”,”nota”:7}
alumno3={“nombre”:”Eva”,”nota”:2}

clase=({“nombre”:”Ana”,”nota”:6,”email”:”ana@ana.com”,”telefono”:”666999666″},
{“nombre”:”Pep”,”nota”:7},
{“nombre”:”Eva”,”nota”:2})
print(alumno1[‘nombre’])
# recorremos el diccionario, por defecto son las claves (nombre, nota…)
for clave in alumno1:
print(clave, alumno1[clave])
# recorremos solo los valores del diccionario (“Ana”,6,…)
for valor in alumno1.values():
print(valor)
# recorremos las dos cosas, la clave y el valor desempaquetando los items
for clave,valor in alumno1.items():
print(clave,valor)

# bucle anidado para recorrer la lista de alumnos y después sus valores
for alumno in clase: # Primero obtengo el alumno
print(alumno)
for clave, valor in alumno.items(): #para cada alumno recorro sus valores
print(clave, valor)

# Función para calcular la media de notas de una clase
def mediaNotas(clase):
total=0
for alumno in clase: # recorro la lista de alumnos
total+=alumno[‘nota’] # accedo directamente al valor del diccionario que me hace falta
# no hace falta un bucle anidado
return total/len(clase)
print(mediaNotas(clase))
[/Python]

Ejemplos bucles anidados y otros

# bucle anidado: bucle dentro de otro bucle
def palabrascon2A(cadena):
    res=[]
    for palabra in cadena.split():
        cont=0
        for i in palabra:
            if i == "a":
                cont+=1
        if (cont==2):
            res.append(palabra)
    return res

print(palabrascon2A("hola que tal hacia mañana"))

def contarLetra(palabra,letra):
    cont=0
    for l in palabra:
        if l==letra:
            cont+=1
    return cont

def palabrasConLetrasContadas(cadena,letra,cantidad):
    res=[]
    for palabra in cadena.split():
        if contarLetra(palabra,letra)==cantidad:
            res+=[palabra]
    return res

print(palabrasConLetrasContadas("ojo con los monstruos horrososo","o",2))

Ejemplos datos

cadena="holi"
tupla=(1,2,3)
lista=[1,2,3]
diccionario={"a":1,"b":2}
conjunto={1,2,3}

print(tupla[0])

for i in tupla:
    print(i)

a,b,c=tupla # desempaquetado
print(a,b,c)

def extremos(lista):
    menor=lista[0]
    mayor=lista[0]
    for numero in lista:
        if numero<menor:
            menor=numero
        if numero>mayor:
            mayor=numero
    return (menor, mayor)

print(extremos([2,23,4,5,23,5,23,9,67,4]))
menor,mayor=extremos([2,23,4,5,23,5,23,9,67,4])
ana,pepe=extremos([2,23,4,5,23,5,23,9,67,4])
print("menor",menor)
print("mayor",mayor)

Ejemplos for

# for en python es muy sencillo, solo recorre cosas

lista=[1,2,3,4]
for i in lista:
    print(i)
for letra in "hola":
    print(letra)
for numero in range(10):
    print(numero)
for n in range(1,11):
    print(n)
for n in range(10,1000,10):
    print(n)
tupla=(4,8,1)
for t in tupla:
    print(t)
diccionario={"nombre":"Ana","nota":6}
for d in diccionario:
    print(d)
for v in diccionario.values():
    print(v)
for j in diccionario.items():
    print(j)
print(list(range(1,11)))

# recorrer una lista de numeros y sumarla
total=0
for n in lista:
    total+=n
print(total)

# recorrer una lista de numeros y sumarla si son pares
total=0
for n in lista:
    if n%2==0:
        total+=n
print(total)

# recorrer una cadena y contar las 'a'
contador=0
for letra in "hola que tal":
    if letra=='a':
        contador+=1
print(contador)

Ejercicios listas

# funcion pivote de una lista de números nos divide la lista en 2 partes
# primero los menores del número que pasemos y por otra los mayores
# pivote([4,1,9,5,3,7],6)->([4,1,5,3],[9,7])

def pivote(lista,numero):
    menores=[]
    mayores=[]
    for i in lista:
        if i<numero:
            menores.append(i)
        else:
            mayores.append(i)
    return(menores,mayores)

print(pivote([4,1,9,5,3,7],5))

# definir la función con los parámetros def pivote(lista,numero)
# saber que tengo que devolver ¿un número? p. ej. un total, una cuenta, un promedio..
# ¿Una lista? los que cumplen una condicion, un filtro
# ¿Una tupla con diferentes valores? (menores,mayores)
# son una lista pues lo tengo que definir.
# Cualquier cosa que vaya a devolver la tengo definir: total, res, menores, mayores...
# recorrer la lista de numeros, de palabras, de lo que sea
# Con cada uno de los elementos de la lista tenemos que hacer algo
# sumarlo, contarlo, añadirlo, transformarlo
# Si cumple alguna condicion: es par, si es mayor si es algo...

# sacar todos lo anagramas de una palabra
# mar->amr arm mar mra ram rma

# vamos a crear una función a la que pasamos una lista de números y nos diga cuantos
# pares hay contarPares([1,2,3,4])->2

def contarPares(lista):
    cont=0
    for numero in lista:
        # que condicion es relevante aquí: numero sea par
        if numero%2==0:
            cont+=1

    return cont

print(contarPares([1,5,7,9]))

# Una función palabras con a a la que le pasamos una cadena y nos devuelve
# la lista de palabras que tienen una a
# palabrasConA('hola que tal')->['hola','tal']

def palabrasConA(cadena):
    res=[]
    for palabra in cadena.split():
        # si la palabra tiene una a la añado a res
        if 'a' in palabra:
            res+=[palabra]
    return res

print(palabrasConA('hola que tal'))

def palabrasconA2(cadena):
    res=[]
    for palabra in cadena.split():
        for i in palabra:
            if i == "a":
                res.append(palabra)
                break
    return res
print(palabrasconA2("hola que tal mejor mañana"))

Ejercicios ifs

# Vamos a hacer una función que calcule el PVP de un producto
# le pasamos el precio, el tipo y si está en oferta o no
# Tenemos que devolver:
# Si el tipo es reducido el iva es  un 10% en cualquier otro caso es un 21%
# Si está en oferta hacemos un descuento del 5%

def PvP(precio,tipo,oferta=False): # precio de un producto es el precio mas el iva menos el descuento
    if tipo=='reducido':
        iva=precio*0.1
    else:
        iva=precio*.21
    if oferta:
        descuento=precio*.05
    else:
        descuento=0
    return precio+iva-descuento


print(PvP(100,'normal',True))
print(PvP(100,'normal'))

# vamos a hacer una función a la que le pasamos un tipo de bono
# un tipo de cliente y una cantidad y nos calcule el precio de acuerdo a lo siguiente
# bono=vip precio=3000
# bono=extra precio=2000
# bono=normal precio=1000
# tipo cliente= standard, el precio no cambia
# tipo cliente=premium, el precio es la mitad

def precioBono(cantidad,bono,cliente): # precio por cantidad
    if bono=='vip':
        precio=3000
    elif bono=='extra':
        precio=2000
    else:
        precio=1000

    if cliente=='premium':
        precio/=2
    return precio*cantidad

# por defecto el bono sea normal y el cliente tambien
# los parámetros por defecto siempre al final
def precioBono2(cantidad,bono='normal',cliente='normal'): # precio por cantidad
    if cliente=='premium':
        coeficiente=.5
    else:
        coeficiente=1
    if bono=='vip':
        precio=3000
    elif bono=='extra':
        precio=2000
    else:
        precio=1000
    return precio*cantidad*coeficiente

print(precioBono2(1))

Ejercicios corregir código

# esta función, en teoría, cuenta el número de pares que hay en la lista
# ¿Funciona? Si es que no por qué y como arreglarlo
def contarPares(lista):
    total=0
    for i in lista:
        if total%2==0:
            total+=i
    return total

lista=[2,3,4,5,6]
print(contarPares(lista)) #debería imprimir 2

# esta funcion nos debería devolver las palabras más largas de un numero

def palabrasLargas(cadena, numero):
    res=[]
    for palabra in cadena:
        if len(palabra)>=numero:
            res+=[palabra]
    return res

cadena="Hola mi amigo piensa un poco"
print(palabrasLargas(cadena,5)) # ['amigo','piensa']


def separarParidad(lista):
    pares=[]
    impares=[]
    for numero in lista:
        if numero%2==0:
            impares.append(numero)
        else:
            pares.append(numero)
    return (pares, impares)

print(separarParidad([1,2,3,4,5])) # ([2,4],[1,3,5])

Ejemplo test unitario

def acceso(departamento,categoria):
    res=False
    if departamento=='gerencia':
        res=True
    if departamento=='administracion' and categoria=='mando intermedio':
        res=True
    if departamento=='marketing' and categoria=='mando intermedio' or categoria=='jefe de proyecto':
        res=True
    return res

El test:

from unittest import TestCase

from acceso import acceso


class Test(TestCase):
    def test_acceso(self):
        test = acceso('gerencia', 'jefe de proyecto')
        self.assertTrue(test)
        test = acceso('gerencia', 'becario')
        self.assertTrue(test)
        test = acceso('administracion', 'becario')
        self.assertFalse(test)
        test = acceso('administracion', 'mando intermedio')
        self.assertTrue(test)
        test = acceso('administracion', 'jefe de proyecto')
        self.assertFalse(test)