Ejemplos diccionario


# 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}
]

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)