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

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