Mes: octubre 2023
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)