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)
Soluciones ejercicios
# Crea una función llamada area_cuadrado que tome # la longitud de un lado como argumento y devuelva el área del cuadrado. def area_cuadrado(lado): if lado<=0: return 0 return lado*lado # return lado**2 # Crea una función llamada promedio que tome tres números # como argumentos y devuelva su promedio. def promedio(num1,num2,num3): return(num1+num2+num3)/3 print(promedio(2,4,6)) # Crea una función factorial que calcule el factorial de un número entero dado. El factorial de un número n se calcula # como el producto de todos los enteros positivos desde 1 hasta n. def factorial(numero): resultado=1 for i in range(1,numero+1): resultado*=i return resultado def factorial2(numero): resultado=numero for i in range(2,numero): resultado*=i return resultado def factorial3(numero): resultado=1 for i in range(numero,1,-1): resultado*=i return resultado def factorial4(numero): for i in range(2,numero): numero*=i return numero print(factorial4(5)) # Crea una función cuenta_letras a la que le pasamos una cadena y una letra # y nos devuelva cuantas veces aparece esa letra en la cadena def cuenta_letras(cadena,letra): 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==letra: cont+=1 return cont print(cuenta_letras("hola que tal estas","s"))
Funciones
# funciones # Un fragmento de código que realiza algo y que se puede reutilizar # Una manera de organizar código, de simplificar flujo de programa # Tener las cosas centralizadas def saludo(nombre="Desconocido"): # parámetro nombre print("Hola",nombre,"que tal estás. Yo muy bien.") print("Es importante aprender las funciones") print("Y estudiar") saludo("Juan") print("yo no") saludo("Ana") print("Yo tampoco") saludo(15) def mayor(a,b): if (a>b): print(a) else: print(b) mayor(8,8) mayor(1,89) mayor(87,1) # PURAS # funciones # Un fragmento de código que realiza algo y que se puede reutilizar # Una manera de organizar código, de simplificar flujo de programa # Tener las cosas centralizadas # Esto sí es una función pura def saludo(nombre="Desconocido"): # parámetro nombre return "Hola "+nombre+" que tal estás. Yo muy bien." # return nos sirve para devolver algo resultado=saludo("Juan") print(resultado) # Funciones puras # es una caja negra. Le paso parámetros y me devuelve resultados # Sin interactuar con el entorno def mayor(a,b): if (a>b): return a else: return b num=mayor(23,232) # Un programa que sume una lista de numeros solo si son pares def es_par(numero): return numero % 2 == 0 def sumaPares(lista): total = 0 for numero in lista: if es_par(numero): # ¿Por qué utilizar una función? total += numero return total lista=[1,2,3,4,5,6] print(sumaPares(lista)) # Crear una función que le pasemos tres numeros y nos devuelva el mayor # el def y el nombre # parametros # codigo que resuelve el problema # devolver el resultado # probar def mayor(a,b,c): if a>=b and a>=c: return a if b>=a and b>=c: return b return c print(mayor(10,200,200))
Bucles anidados
# pintar un arbolito for i in range(5): for j in range(i + 1): print("*", end=" ") print() # Todas las tablas de multiplicaar for j in range(1,11): print("Tabla de multiplicar del ",j) for i in range(1,11): print(f"{i} x {j} = {i*j}") # Todos los números primos hasta el 100 for numero in range(2,100): es_primo=True for i in range(2,numero): if (numero % i==0): es_primo=False break if es_primo: print(numero, end=", ") for i in range(2,20): numero=i while numero!=1: # Si el número es par (numero %2==0) dividirlo entre 2 print(numero,end=", ") if numero%2==0: numero//=2 # numero=int(numero/2) # Si el número es impar multiplicarlo por 3 y sumarle 1 else: numero=numero*3+1 # lo imprimo print(1)
Soluciones ejercicio
# Pedir al usuario un número numero=int(input("Introduce un número")) # Hacemos un proceso hasta que el número sea 1 # Cuando sea uno hemos acabado while numero!=1: # Si el número es par (numero %2==0) dividirlo entre 2 print(numero,end=", ") if numero%2==0: numero//=2 # numero=int(numero/2) # Si el número es impar multiplicarlo por 3 y sumarle 1 else: numero=numero*3+1 # lo imprimo print(1) # Pedir al usuario un número numero=int(input("Introduce un número")) # Hacemos un proceso hasta que el número sea 1 # Cuando sea uno hemos acabado cadena=str(numero)+", " while numero!=1: # Si el número es par (numero %2==0) dividirlo entre 2 if numero%2==0: numero//=2 # numero=int(numero/2) # Si el número es impar multiplicarlo por 3 y sumarle 1 else: numero=numero*3+1 cadena+=str(numero)+", " # lo imprimo print(cadena[:-2])