# 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} ]
Categoría: Python
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))
Soluciones tuplas
#Crear una tupla con tus cuatro colores favoritos e imprimirla por la consola # Crear una tupla con otros dos colores y crear otra tupla más con la suma de las dos favoritos=("rojo","verde","rosa palo","gris") otros=("amarillo","blanco") print(favoritos) for color in favoritos: print(color) suma=favoritos+otros print(suma) # Crear una función hayverde a la que le pasamos una tupla y nos # devuelve true si en esa tupla está el color verde y false en caso contrario def hayverde(colores): res=False for color in colores: if color=="verde": res= True return res def hayverde2(colores): return colores.count("verde")>0 def hayverde3(colores): return "verde" in colores # Todos True print(1 in (1,2,3)) print("h" in "hola") print(hayverde3(favoritos)) # Crear una función sumatupla a la que le pasamos # una tupla de números y nos devuelve la suma def sumatupla(numeros): total=0 for numero in numeros: total+=numero return total def sumatupla2(numeros): return sum(numeros) # max y min print(sumatupla2((1,2,30))) mitupla=(8,9,10) print(sumatupla2(mitupla)) alumnos=("Ana","Pep","Eva","Pepon") print(max(alumnos)) # Crear una función cadena_larga a la que le pasamos una tupla de cadenas y # nos devuelva la cadena mas larga, si hay varias cadenas con # la misma longitud podemos devolver la que prefiramos. def cadena_larga(cadenas): larga=cadenas[0] # Siempre inicializo con un miembro del iterable for cadena in cadenas: if len(cadena)>len(larga): larga=cadena return larga def min(numeros): minimo=numeros[0] for numero in numeros: if numero<minimo: minimo=numero return minimo print(min((1,5,6))) alumnos=("Ana","Eva","juan","Herminia","Pep") print(cadena_larga(alumnos)) def cadena_larga2(cadenas): return max(cadenas, key=len) # En vez de usar el orden alfabético usamos la longitud # Crear una funcion cadenaMinMax a la que le pasamos una tupla de cadenas # y nos devuelve una tupla con la cadena más corta y la más larga def cadenaMinMax(cadenas): larga=cadenas[0] corta=cadenas[0] for cadena in cadenas: if len(cadena)>len(larga): larga=cadena if len(cadena)<len(corta): corta=cadena return (corta,larga) def cadenaMinMax2(cadenas): return (min(cadenas,key=len),max(cadenas,key=len)) print(cadenaMinMax2(("a","bbbbbb","cc"))) corta,larga=cadenaMinMax(("a","bbbbbb","cc")) print(corta)
Tuplas ejemplos
# tupla: conjunto de valores: int, float,str, boolean # Se crea poniendolos entre paréntesis tupla=(1,2,3,"nombre",False,(1,2,3),"pepe@pepe.com") otratupla=("w",1,"ppp",3) for valor in tupla: #valor es una variable temporal print(valor) print("|||",valor) for valor in otratupla: #valor es una variable temporal print(valor) print(tupla[3]) print(len(tupla)) for i in range(len(tupla)): print(tupla[i]) for i in range(2,5): print(tupla[i]) for valor in tupla[::-1]: print(valor) print(tupla[2:5]) suma=tupla+otratupla print(suma) print(otratupla*3) print(tupla.count(1)) print(tupla.count(9)) print(tupla.index(1)) tupla=tupla+(1,5) print(tupla) # SON INMUTABLES # Desempaquetar valores=(1,2,3) a,b,c=valores print(a,b,c) def mayor_y_menor(valores): mayor=valores[0] menor=valores[0] for valor in valores: if mayor<valor: mayor=valor if menor>valor: menor=valor return (menor,mayor) tupla_resultado=mayor_y_menor((3,1,9,5,6)) print(tupla_resultado) menor,mayor=tupla_resultado def partes_correo(correo): parte1=list(correo.split("@")) parte2=list(parte1[1].split(".")) return (parte1[0],parte2[0],parte2[1]) partes=partes_correo("ana@gmail.com") print(partes) nombre,servidor,extension=partes if servidor=="gmail": print(nombre, "tienes un buen servidor de correo") else: print("Cuidado ",nombre," hazte una cuenta en gmail")
Solución archivo
numero=input("Introduce el número: ") # abrir el archivo: w (escribir) r (leer) a (añadir) archivo=open("tabla_del_"+numero+".txt","w") # proceso la información leyéndola archivo.write # o escribo información archivo.read numero=int(numero) for i in range(1,11): archivo.write(f"{i} x {numero} = {i*numero}\n") # cerrarlo archivo.close() # abro el archivo archivo=open("curso.txt","r") datos=archivo.read() total=0 lista=list(datos.split(",")) print(lista) for valor in lista: total+=int(valor) print(total) # cierro el archivo archivo.close()
Ejemplos archivos
# Abrir un archivo en modo escritura (sobrescribe el archivo si ya existe) archivo = open("mi_archivo.txt", "w") # Escribir datos en el archivo cadena="." while cadena!="": cadena=input("Dame una frase (enter para acabar)") archivo.write(cadena+"\n") # Cerrar el archivo cuando hayas terminado de escribir archivo.close() # Abrir un archivo en modo lectura archivo = open("mi_archivo.txt", "r") # Leer el contenido del archivo contenido = archivo.read() print(contenido) # Cerrar el archivo archivo.close() archivo=open("curso.txt","a",encoding='utf-8') nota="." while nota!="": alumno=input("Introduzca el nombre del alumno: ") nota=input("Introduzca su nota: ") archivo.write(alumno+" - "+nota+"\n") archivo.close() archivo=open("curso.txt","r",encoding='utf-8') total=0 cont=0 for alumno in archivo: lista=list(alumno.split(" - ")) print(lista) if lista[1]!="\n": nota=int(lista[1].replace("\n","")) total+=nota cont+=1 print(nota) print("media de la clase ",total/cont)
Docstring en python
def recortar(cadena, left, right): """ Esta función recorta una cadena eliminando caracteres. Args: cadena (str): La cadena a recortar. left (int): Letras a recortar de la izquierda. right (int): Letras a recortar de la derecha. Returns: str: La cadena recortada. """ if left + right > len(cadena): return "" return cadena[left:-right] def cuenta_letras(cadena,letra): """ Esta función cuenta las apariciones de una letra en una cadena. Args: cadena (str): La cadena donde se busca. letra (str): La letra que vamos a contar. Returns: int: Número de apariciones de letra en cadena. """ cont=0 cadena=cadena.lower() letra=letra.lower() # recorrer todas las letras de la cadena for caracter in cadena: # si la letra de la cadena es igual a la letra que nos pasan # contamos una aparición if caracter==letra: cont+=1 return cont recortar() cuenta_letras()
https://trifulcas.com/courses/programacion-en-pyhton/lessons/docstrings/
Soluciones funciones cadena
# Crear una función extensa a la que le pasemos # dos cadenas y nos devuelva la cadena de mayor longitud def extensa(cadena1,cadena2): if len(cadena1)==len(cadena2): return "" # comparar la longitud de las dos cadenas y devolver la mas larga if len(cadena1)>=len(cadena2): return cadena1 else: return cadena2 larga=extensa("a","b") if larga!="": print("La cadena mas larga es: ",larga) else: print("Son iguales")</pre> # Crear una funcion contarVocales que le pasemos una cadena y # nos devuelva el número de vocales (a,e,i,o,u) que tiene. # Podemos utilizar la función contarLetra def cuenta_letras(cadena,letra): cont=0 cadena=cadena.lower() letra=letra.lower() # recorrer todas las letras de la cadena for caracter in cadena: # si la letra de la cadena es igual a la letra que nos pasan # contamos una aparición if caracter==letra: cont+=1 return cont def contarVocales(cadena): cont = 0 # recorrer todas las letras de la cadena for caracter in cadena: # si la letra de la cadena es igual a la letra que nos pasan # contamos una aparición if caracter == "a" or caracter=="e" or caracter=="i" or caracter=="o" or caracter=="u": cont += 1 return cont def contarVocales2(cadena): aes=cuenta_letras(cadena,"a") es=cuenta_letras(cadena,"e") ies=cuenta_letras(cadena,"i") oes=cuenta_letras(cadena,"o") ues=cuenta_letras(cadena,"u") return aes+es+ies+oes+ues def contarVocales3(cadena): vocales="aeiou" total=0 for vocal in vocales: total+=cuenta_letras(cadena,vocal) return total def contarVocales4(cadena): vocales="aeiouáéíóúüàèìòù" total=0 for vocal in vocales: total+=cuenta_letras(cadena,vocal) return total print(contarVocales4("Está El pingüino"))</pre> # Crear una función recortar a la que le pasamos una cadena y dos # números y nos devuelva una cadena 'recortada' por la izquierda y # la derecha con los valores que le hemos pasado. # Punto extra si comprobamos si la cadena se puede o no recortarCrear # una función recortar a la que le pasamos una cadena y dos números y # nos devuelva una cadena 'recortada' por la izquierda y la derecha con los valores que le hemos pasado. Punto extra si comprobamos si la cadena se puede o no recortar def recortar(cadena,left,right): if left+right>len(cadena): return "" return cadena[left:-right] print(recortar("abcdefghi",2,3)) # Crear una función arrobar que nos cambie # todas las 'a' minúscula por el símbolo '@' def arrobar(cadena): return cadena.replace('a','@') print(arrobar("mañana")) # Crear una función invertir a la que le pasemos una cadena # y nos la devuelva invertida: invertir("hola")->"aloh" def invertir(cadena): return cadena[::-1] # operador slicing def invertir2(cadena): res="" for letra in cadena: res=letra+res return res nombre="Ana Pi" print(nombre[1:6:2]) print(nombre[1:]) print(nombre[::-1]) print(invertir2("hola"))
Ejemplos funciones
some_string = 'Hello World' print('Testing a String') print(some_string[2]) print(some_string[2:5]) print(some_string[2:]) print(some_string[:-2]) print('-|-' * 20) print('some_string', some_string) print("some_string.startswith('H')", some_string.startswith('H')) print("some_string.startswith('h')", some_string.startswith('h')) print("some_string.endswith('d')", some_string.endswith('d')) print('some_string.istitle()', some_string.istitle()) print('some_string.isupper()', some_string.isupper()) print('some_string.islower()', some_string.islower()) print('some_string.isalpha()', some_string.isalpha()) print('String conversions') print('-' * 20) print('some_string.upper()', some_string.upper()) print('some_string.lower()', some_string.lower()) print('some_string.title()', some_string.title()) print('some_string.swapcase()', some_string.swapcase()) print('String leading, trailing spaces', " xyz ".strip()) cadena=" hola que tal " print("|"+cadena+"|") print("|"+cadena.strip()+"|") clientes=["ana pi ","PEDRO","JUAN perez "] for cliente in clientes: print("|"+cliente.strip().title()+"|") cadena="hola que tal" pos=cadena.find("pepe") pos2=cadena.find("que") print(pos,pos2) pos3=cadena.find("a") print(pos3) pos4=cadena.find("a",pos3+1) print(pos4) cadena="Mañana cantara Sara" pos=cadena.find("w") while pos!=-1: print(pos) pos=cadena.find("a",pos+1)
Funciones de orden superior
# Funciones normales sin misterio def cuadrado(numero): return numero**2 def cubo(numero): return numero**3 # Función que usa otra función como parámetro def aplicar(funcion,numero): return funcion(numero) print(aplicar(cubo,3)) # Esta función nos genera una función nueva dependiendo del parámetro # Y la devuelve def generar_funcion(exponente): def potencia(numero): return numero**exponente return potencia micubo=generar_funcion(3) micuadrado=generar_funcion(2) print(micuadrado(5)) print(micubo(2)) # Python usa filter que es de orden superior # Su primer parámetro es una función lista=[1,2,8,3,4,5] def aprobado(numero): return numero>=5 def suspendidos(numero): return numero<5 def impar(numero): return numero%2==1 res=list(filter(aprobado,lista)) print(res) res=list(filter(impar,lista)) print(res) res=list(filter(suspendidos,lista)) print(res) def mitad(numero): return numero/2 res=list(map(mitad,lista)) print(res)