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])