# 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])
Respuestas ejercicios
"""Crea un programa que recorra una cadena de caracteres y cuente cuántas veces aparece la letra “a” en la cadena.""" # Pensar en una manera de resolverlo # voy letra por letra y si encuentro una a la cuento # Si una letra es una a contar uno más cadena=input("Introduce una cadena ") contador=0 # recorrer las letras de una cadena -> resuelto for letra in cadena: print(letra) # Si una letra es una a contar uno más ->resuelto if letra=="a": contador+=1 print(f"Hay {contador} aes en la cadena") """Desarrolla un programa que recorra un rango de números del 1 al 10 y muestre el cuadrado de cada número en una línea separada.""" # recorrer los números del 1 al 10 -> resuelto # saber el cuadrado de un número -> resuelto for numero in range(1,11): print(numero*numero) print(numero**2) """Crea un programa que pida números positivos al usuario y nos diga después cual es el número mayor y el menor. Hasta que pnga cero.""" numero=int(input("Introduce número ")) mayor=numero menor=numero # como hago yo un bucle hasta que el usuario me de 0 -> resuelto while numero!=0: # si el numero que me dan es mayor que el que tengo lo cambio numero = int(input("Introduce número ")) if numero!=0: if numero>mayor: mayor=numero if numero<menor: menor=numero print("El numero mayor que me has dicho es el ",mayor) print("El numero menor que me has dicho es el ",menor) """Crea un programa que solicite al usuario un número entero positivo y luego muestre una cuenta regresiva desde ese número hasta 1. Por ejemplo, si el usuario ingresa 5, el programa debe mostrar “5, 4, 3, 2, 1”.""" # pedir un número # bucle desde el número hasta el 1 numero=int(input("Introduce un número ")) """ while numero>0: print(numero) numero-=1 """ for i in range(numero,0,-1): print(i) """Un programa que le pida al usuario un número y nos imprima su factorial . El factorial de 5 es 5*4*3*2*1.""" numero=int(input("Introduce un número ")) factorial=1 for i in range(numero,0,-1): factorial*=i print(factorial) """Un programa que pida al usuario un número y nos imprima su tabla de multiplicar""" numero=int(input("Introduce un número ")) # recorrer los numeros del 1 al 10 -> resuelto for i in range(1,11): print(f"{i} x {numero} = {i*numero}") # print(i," x ",numero, " = ",i*numero) """Pedir al usuario un número y decir si es primo o no""" # ¿Qué es un número primo: solo es divisible por el mismo y la unidad # recorrer todos los números desde el 1 hasta el propio número -> solucionado # y voy a ver si es divisible por alguno # si es divisible no es primo # Si no hay ninguno sí que es primo numero=int(input("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 if esprimo: print("El número es primo") else: print("El número no es primo")