# variables entero=9 decimal=9.6 cadena="hola que tal" booleano=True # estructura de control if # nos permite controlar el flujo del programa si se cumplen condiciones """ if condicion_es_cierta: hago_esto else: hago_esto_otro """ edad=20 if edad>=18: print("Puedes comprar alcohol") else: print("No puedes comprar") # las condiciones pueden ser muy complicadas pais='España' # Los paréntesis EN ESTE CASO no hacen falta if (pais=='España' and edad>=18) or (pais=='EEUU' and edad>=21) or (edad>40) and (pais!='arabia saudi'): print("Puedes comprar alcohol") else: print("No puedes comprar") # Bucles: while y for """ Cuando no sabemos cuando se va a cumplir la condición while condicion: hago algo OJO: que dentro del bucle se cambie la condición """ cont=0 while cont<10: print(cont) cont+=1 # modifiquemos la condicion # empezar por 1 y luego duplicar hasta llegar a 1000000 cont=1 while cont<1000000: print(cont) cont*=2 numero=1 while numero!=0: numero=int(input("Dame un numero (0 para salir")) # bucle for: cuando si sabemos la longitud de lo que queremos recorrer for i in range(1,11): print(i) # Hace algo 10 veces va del 0 al 9 for i in range(10): print(i) # recorre cualquier iterable: tuplas diccionarios conjuntos listas lista=[1,4,2,6,3,9] for numero in lista: print(numero)
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Soluciones repaso
# Crear una función que nos calcule el área de un círculo si le pasamos el radio (PI*radio*radio). # Usad el módulo math parra coger el valor de PI import math def area_circulo(radio): area=math.pi*radio**2 return round(area,2) print(area_circulo(1)) # Crear una función acceso a la que le pasamos como parámetros # el departamento y la categoría, nos devuelve true si 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 def acceso2(departamento,categoria): res=False if (departamento=='gerencia' or (departamento=='administracion' and categoria=='mando intermedio') or (departamento=='marketing' and (categoria=='mando intermedio' or categoria=='jefe de proyecto'))): res=True return res # probar todos los casos relevantes print(acceso('administracion','jefe de proyecto')) # Crear una función palabras_largas a la que le pasemos una cadena y nos devuelva una lista de # las palabras cuya longitud sea mayor de 6 def palabras_largas(cadena,longitud=6): palabras=cadena.split(" ") res=[] # [palabra for palabra in palabras if len(palabra)>6] for palabra in palabras: if len(palabra)>longitud: res.append(palabra) return res print(palabras_largas("hola federico que comiste ayer",3)) # conocer lenguaje # antes que eso: saber programar # ante un problema analizar los pasos que daremos pare resolverlo # el plan, la receta, el algoritmo # palabras tengo una cadena y quiero las palabras cuya longitud sea myor de 6 # obtener las palabras # ¿Si tengo una cadena, se obtener la lista de palabras? # si con split(' ') falla si hay signos de puntuación--> para la versión 2.0 # recorriendo las palabras # for palabra in palabras # contando las letras # len() # si son más de seis las apunto # condicion len()>6 necesito un if # añadir append def cadena_mas_larga(cadena): palabras=cadena.split(' ') res=[] for palabra in palabras: if len(palabra)>6: res.append(palabra) return res print(cadena_mas_larga("hola federico que comisteis ayer"))
Soluciones random
# Crear una funcion moneda() que devuelva aleatoriamente 'cara' o 'cruz' # moneda()->'cara' import random def moneda2(): if random.randint(0,1)==0: return "cara" else: return "cruz" def moneda3(): # operador ternario return "cara" if random.randint(0,1)==0 else "cruz" def moneda(): opciones=["cara","cruz"] return random.choice(opciones) print(moneda()) # Crear una función lanzamientos(numero) que nos devuelva una lista de 'caras' y 'cruces' de longitud numero # # lanzamientos(3)->['cara','cara','cruz'] def lanzamientos2(numero): resultado=[] for i in range(numero): resultado.append(moneda()) return resultado def lanzamientos(numero): # utilizar de manera 'ninja' la compresión de listas return [moneda() for i in range(numero)] print(lanzamientos(6)) # Crear una función rascaygana() que nos devuelva un premio de la siguiente manera: # # obtenemos un número entre 1 y 20 # # si el número está entre 1 y 12 no hay premio # # si está entre 13 y 18 un euro de premio # # Si está entre 19 y 20 dos euros def rascaygana2(): numero=random.randint(1,20) if numero<=12: return 0 elif numero<=18: return 1 elif numero<=20: return 2 def rascaygana(): # premios=[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2] premios=[0]*12+[1]*6+[2]*2 return random.choice(premios) print(rascaygana()) print([0]*12+[1]*6+[2]*2)
Ejemplos aleatorios
# obtener un número aleatorio import random numero_aleatorio=random.random() # entre 0 y 1 sin llegar nunca al 1 print(numero_aleatorio) print(round(numero_aleatorio*10)+1) print(random.randint(1,10)) colores = ["rojo", "verde", "azul", "amarillo"] color_aleatorio = random.choice(colores) print(color_aleatorio) # Por ejemplo, "verde" lista=[1,2,3,4,5,6,7,8,9] random.shuffle(lista) print(lista) imagenes=['gatito.jpg','peces.jpg','paisaje.png'] print(random.choice(imagenes)) numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] numeros_aleatorios = random.sample(numeros, 3) # Selecciona 3 números únicos al azar. print(numeros_aleatorios) def dado(): return random.randint(1,6) print(dado()) def carta(): valores=[1,2,3,4,5,6,7,10,11,12] palos=["oros","copas","espadas","bastos"] return str(random.choice(valores))+" de "+random.choice(palos) print(carta()) def baraja(): valores = [1, 2, 3, 4, 5, 6, 7, 10, 11, 12] palos = ["oros", "copas", "espadas", "bastos"] baraja=[] for valor in valores: for palo in palos: baraja.append(str(valor)+" de "+palo) random.shuffle(baraja) return baraja print(baraja())
Solucion Combinadas
# Crear una función a la que le pasemos una lista de números y nos devuelva # una tupla con la suma de los números pares y de los impares: # sumaparidad([1,2,3,4])->(6,4) def sumaparidad(lista): pares=0 impares=0 for numero in lista: if numero%2==0: pares+=numero else: impares+=numero return (pares,impares) def sumaparidad2(lista): pares=[numero for numero in lista if numero%2==0] impares=[numero for numero in lista if numero%2!=0] return (sum(pares),sum(impares)) def sumaparidad3(lista): return (sum([numero for numero in lista if numero%2==0]),sum([numero for numero in lista if numero%2!=0])) print(sumaparidad3([1,2,3,4])) milista=[1,1,1,1,1,2,2,2,2,2] print(sumaparidad3(milista)) # Crear una función a la que le pasamos un diccionario con una lista # de clientes y sus deudas y nos devuelva el total de deudas. # La lista sería así: # clientes={"Ana":[100,500,3000],"Eva":[900,300,200]} # # totaldeuda(clientes)->5000 def totaldeuda(clientes): total=0 for deudas in clientes.values(): total+=sum(deudas) return total def totaldeuda2(clientes): return sum(sum(clientes.values(),[])) print(totaldeuda2(clientes)) # sum(clientes.values(),[]) concatena diferentes listas en una lista print(clientes.values()) print(sum(clientes.values(),[])) lista1=[[1,2,3],[3,4,5],[7,8,9]] lista4=sum(lista1,[]) print(lista4) # Crea una función a la que le pasamos una lista de diccionarios # que son alumnos con el siguiente formato: # clase=[{"nombre":"Ana","notas":[5,7,8]},{"nombre":"Pep","notas":[8,6,8]}] # # Y que nos devuelva la media total de las notas # # media_total(clase)->7 def media_total0(clase): total_notas=0 numero_notas=0 for alumno in clase: for nota in alumno["notas"]: total_notas+=nota numero_notas+=1 return round(total_notas/numero_notas,2) def media_total(clase): total_notas=[] for alumno in clase: total_notas+=alumno["notas"] return round(sum(total_notas)/len(total_notas),2) def media_total_ninja(clase): # Anidación de compresión de listas total_notas=[nota for alumno in clase for nota in alumno["notas"]] return round(sum(total_notas) / len(total_notas), 2) print(media_total_ninja(clase))
Conjuntos ejemplos
# conjunto es una colección de elementos que no se repiten lista=[1,2,1,2,1,2] print(lista) print(lista[2]) conjunto={1,2,1,2,1,2} print(conjunto) vacio=set() vacio2={} while True: num=int(input("Numero (0 para salir) ")) if num!=0: vacio.add(num) else: break print(vacio) c3=set("hola amigo") print(c3) c4=set([1,2,3,3,2,1,4,4,3,2]) print(c4) c1={1,2,3} c2={2,3,4,"hola",6.78, False} print(c1 | c2) print(c1.union(c2)) print(c1 & c2) print(c1.intersection(c2)) print(c1-c2) print(c1.difference(c2)) clase_mates={"ana","eva","pep","rosa","juan"} clase_fisica={"eva","albert","pep","maria"} total_alumnos=clase_mates | clase_fisica alumnos_dos_clases=clase_mates & clase_fisica alumnos_mates_noen_fisica=clase_mates-clase_fisica print(total_alumnos) print(alumnos_dos_clases) print(alumnos_mates_noen_fisica) # Escribe un programa que tome una lista de palabras y # elimine los duplicados, devolviendo una nueva lista sin duplicados. def sin_duplicados(lista): res=[] for palabra in lista: if palabra not in res: res.append(palabra) return res def sin_duplicados2(lista): conjunto=set(lista) # lo paso a conjunto, eliminan duplicados return list(conjunto) print(sin_duplicados2(["hola","que","hola","que","pasa"])) # Escribe un programa que tome una cadena de texto y cuente cuántas # vocales diferentes (a, e, i, o, u) se encuentran en la cadena. # Utiliza un conjunto para realizar el seguimiento de las vocales # únicas encontradas. def vocales(cadena): diferentes=set() for letra in cadena: if letra in "aeiou": diferentes.add(letra) return diferentes print (vocales("hola que tal")) alumnos=[ {"nombre":"Ana", "asignaturas":{"fisica","mates"}, "pagos":[20,50,60,70] }, {"nombre": "Pep", "asignaturas": {"quimica", "mates"}, "pagos": [20, 150, 60, 70] }, {"nombre": "Eva", "asignaturas": {"fisica", "quimica"}, "pagos": [20, 50, 60, 70] } ] print(alumnos) for alumno in alumnos: print(alumno["nombre"],sum(alumno["pagos"])) # matricular a todos los alumnos en 'mates' for alumno in alumnos: alumno["asignaturas"].add("mates") print(alumnos) for alumno in alumnos: for asignatura in alumno["asignaturas"]: print(alumno["nombre"],asignatura) # crear un diccionario cuyas claves sean las asignaturas y el valor # un conjunto de alumnos asignaturas={} for alumno in alumnos: for asignatura in alumno["asignaturas"]: if asignatura in asignaturas: asignaturas[asignatura].add(alumno["nombre"]) else: asignaturas[asignatura]={alumno["nombre"]} print(asignaturas) total=0 pagos={} # total de pagos de todos los alumnos for alumno in alumnos: total+=sum(alumno["pagos"]) pagos[alumno["nombre"]]=total print(total) print(pagos)
Soluciones diccionarios
# Conteo de letras: Crea una función llamada contar_letras(palabra) # que tome una cadena de texto como argumento y devuelva un diccionario # que contenga el recuento de cada letra en la palabra. Ignora los espacios # y considera las letras en minúsculas y mayúsculas como iguales. def contar_letras(palabra): res = {} for letra in palabra: letra=letra.lower() # La paso a minúsculas if letra.isalpha(): # compruebo que sea una letra if letra in res: res[letra] += 1 else: res[letra] = 1 return res print(contar_letras("hola, ¿que tal estaS?")) # Calculadora de calificaciones: Crea una función llamada # calcular_promedio(calificaciones) que tome un diccionario # de calificaciones (nombre del estudiante como clave y calificación # como valor) y devuelva el promedio de todas las calificaciones. def calcular_promedio(calificaciones): total=sum(calificaciones.values()) return round(total/len(calificaciones),2) def calcular_promedio2(calificaciones): total=0 for calificacion in calificaciones.values(): total+=calificacion return round(total/len(calificaciones),2) print(calcular_promedio2({'Juan': 90, 'Ana': 85, 'Pedro': 88})) diccionario={} def calcular_algo(): # No es una función pura y suspendes el examen diccionario['algo']=42 # No debemos acceder a información fuera de la función return diccionario print(calcular_algo()) # bucle infinito: explota # Que una función se llame a ella misma se llama recursividad def error_gordo(numero): return 3#error_gordo(numero) def factorial(numero): if numero<=1: return 1 else: return factorial(numero-1)*numero print(error_gordo(4)) print(factorial(5))
Más ejemplos diccionarios
import random nombres_alumnos = [ "Juan", "María", "Pedro", "Ana", "Carlos", "Luisa", "José", "Elena", "Miguel", "Sofía", "Laura", "Diego", "Isabel", "Antonio", "Carmen", "Manuel", "Rosa", "Francisco", "Eva", "Javier" ] clases = ["Clase A", "Clase B", "Clase C"] diccionario_alumnos = {} for alumno in nombres_alumnos: clase_asignada = random.choice(clases) if clase_asignada not in diccionario_alumnos: diccionario_alumnos[clase_asignada] = [] diccionario_alumnos[clase_asignada].append(alumno) print(diccionario_alumnos) alumnos={} for clase in diccionario_alumnos: for alumno in diccionario_alumnos[clase]: alumnos[alumno]=clase print(alumnos) # Crea un diccionario que almacene nombres de frutas como # claves y sus precios como valores. Luego, escribe un programa que # calcule el costo total de comprar una cantidad específica de cada fruta. precios={"pera":3,"melón":4,"uva":7,"manzana":2} def calcula_precio(precios,fruta,cantidad): precio=precios.get(fruta,0) return cantidad*precio def cesta(precios,cesta): total=0 for elemento,cantidad in cesta.items(): total+=calcula_precio(precios,elemento,cantidad) return total print(calcula_precio(precios,"melocotón",5)) micesta={"uva":3,"pera":2,"melón":1} print(cesta(precios,micesta)) # Escribe un programa que tome una lista de palabras y cuente cuántas # veces aparece cada palabra en la lista. Almacena los resultados en # un diccionario donde las palabras son las claves y el recuento de # apariciones es el valor. def cuenta_palabras(lista): res={} for palabra in lista: if palabra in res: res[palabra]+=1 else: res[palabra]=1 return res lista="hola que tal que pasa hola tal dia que fui".split(" ") print(lista) print(cuenta_palabras(lista)) alumnos=["Ana","juan","pep"] notas=[1,2,3] clase=dict(zip(alumnos,notas)) print(clase)
Ejemplos diccionario
# dos listas relacionadas pero porque lo sabemos nosotros alumnos=["Ana","Juan","Eva"] notas=[5,7,10] # recorro las dos listas propenso a errores for i in range(len(alumnos)): print(alumnos[i],notas[i]) # Esto es un diccionario donde la información SI está relacionada clase={"Ana":5,"Juan":7,"Eva":9} # Recorriendo el diccionario a través de las claves for alumno in clase: print(alumno,clase[alumno]) # recorriendo el diccionario a través de los items # que son la clave y el valor for alumno,nota in clase.items(): print(alumno,nota) for notas in clase.values(): print(notas) print(len(clase)) # longitud del diccionario print(clase.keys()) print(clase.values()) print(clase.items()) # dos listas relacionadas pero porque lo sabemos nosotros alumnos=["Ana","Juan","Eva"] notas=[5,7,10] # recorro las dos listas propenso a errores for i in range(len(alumnos)): print(alumnos[i],notas[i]) # Esto es un diccionario donde la información SI está relacionada clase={"Ana":5,"Juan":7,"Eva":{"ingles":8,"matematicas":6,"catalán":9}} # Recorriendo el diccionario a través de las claves for alumno in clase: print(alumno,clase[alumno]) # recorriendo el diccionario a través de los items # que son la clave y el valor for alumno,nota in clase.items(): print(alumno,nota) for notas in clase.values(): print(notas) print(len(clase)) # longitud del diccionario print(clase.keys()) print(clase.values()) print(clase.items()) personas = [ {"nombre": "Juan", "edad": 30,"notas":[3,5,6,7,(8,9),{"extra":8,"comun":8}]}, {"nombre": "María", "edad": 25}, {"nombre": "Pedro", "edad": 35} ]
Soluciones listas
# Crear una lista con los números que se pidan al usuario y que cuando # introduzca un 0 se acabe de pedir e imprima la lista lista=[] numero=int(input("Dame un numero (0 para salir) ")) while numero!=0: lista.append(numero) numero = int(input("Dame un numero (0 para salir) ")) print(lista) lista2=[] while True: numero = int(input("Dame un numero (0 para salir) ")) if numero==0: break lista2.append(numero) print(lista2) # Crear una función primos a la que le pasamos una lista de # números y nos devuelva la cantidad de números primos que hay # (usando la función primos que ya vimos en otro ejercicio) def esprimo(numero): esprimo = True for i in range(2, numero): if numero % i == 0: # que sí que es divisible y por lo tanto NO ES PriMO esprimo = False break return esprimo def cuentaPrimos(lista): total=0 for numero in lista: if esprimo(numero): total+=1 return total print(cuentaPrimos([3,5,9])) # recorrer la lista de cadenas (ok) # obtener la primera letra de una cadena cadena[0] # obtengo la letra de la primera cadena y miro si todos empiezan por lo mismo def inicioIgual(cadenas): primera=cadenas[0] letra=primera[0] res=True for cadena in cadenas: if cadena[0]!=letra: res= False break return res print(inicioIgual(["pepe","pque","ptal"])) # Crear una función eliminaMultiplos a la que le pasamos una lista # de números y un número y nos devuelva la lista que nos han pasado # sin los números que sean múltiplos # recorrer la lista (ok) # saber si un numero es multiplo de otro (ok) # si el numero NO es multiplo lo añado def eliminaMultiplos(lista, numero): resultado=[] for elemento in lista: if elemento%numero!=0: resultado.append(elemento) return resultado # CÓDIGO ninja def eliminaMultiplos2(lista, numero): return [num for num in lista if num%numero!=0] print(eliminaMultiplos2((1,2,3,4,5,6,7,8,9),3))