Soluciones comprension

# Crea una lista con los cuadrados de los números del 1 al 10.

cuadrados = [numero ** 2 for numero in range(1, 11)]
print(cuadrados)
lista = [1.4, 5.6, 9.35]
cuadrados = [numero ** 2 for numero in lista]
print(cuadrados)
# Obtén una lista con los números del 0 al 20 que sean múltiplos de 3.
multiplos3 = [numero for numero in range(0, 21) if numero % 3 == 0]
print(multiplos3)
# Dada la lista ["Ana", "Luis", "Pedro"], obtén una lista con sus longitudes.
lista = ["Ana", "Luis", "Pedro"]
longitudes = [len(cadena) for cadena in lista]
print(longitudes)


# Crear una función fueraNegativos a la que le pasamos una lista y nos devuelve
# solo los positivos fueraNegativos ([3, -1, -7, 5, 0])->[3,5,0]
def fueraNegativos(lista):
    resultado = [numero for numero in lista if numero >= 0]
    return resultado


print(fueraNegativos([3, -1, -7, 5, 0]))


# Crea una función a la que se le pasa un límite y un número y nos devuelve una
# lista con todos los números hasta ese límite que son múltiplos de ese número
# listaMultiplos(10,4)->[4,8]
def listaMultiplos(limite, multiplo):
    resultado = [numero for numero in range(1, limite + 1) if numero % multiplo == 0]
    return resultado


print(listaMultiplos(10, 4))  # [4,8]
print(listaMultiplos(20, 3))  # [3,6,9,12,15,18]


# Crea una función a la que le pasamos un número y nos devuelve una lista
# con la tabla de multiplicar de ese número tablaMultiplicar(7)->[7,14,21,…70]
def tablaMultiplicar(numero):
    resultado = [numero * n for n in range(1, 11)]
    return resultado


def tablaMultiplicar2(numero):
    resultado = [n for n in range(1, numero * 10 + 1) if n % numero == 0]
    return resultado


print(tablaMultiplicar(7))  # [7, 14, 21, 28, 35, 42, 49, 56, 63, 70]
print(tablaMultiplicar2(7))  # [7, 14, 21, 28, 35, 42, 49, 56, 63, 70]


# Crea una función a la que le pasamos una lista de palabras y nos devuelve solo
# las que tengan vocales conVocales([“hola”,”qwfr”,”que”])->[“hola”,”que”]

def tieneVocal(cadena):
    cadena = cadena.lower()
    vocales = "aeiouáéíóúàèìòùü"
    for vocal in vocales:
        if vocal in cadena:
            return True
    return False


print(tieneVocal("hola"))  # True
print(tieneVocal("gjhgjh"))  # False


def conVocales(lista):
    resultado = [cadena for cadena in lista if tieneVocal(cadena)]
    return resultado


print(conVocales(["asasa", "jkhkjhk", "pepe", "sÍ", "üà"]))  # ['asasa', 'pepe']


# Crea una función a la que le pasamos un límite y nos dice los números primos
# hasta ese límite
def esPrimo(numero):
    for i in range(2, numero):
        if numero % i == 0:
            return False
    return True


def primosHasta(limite):
    resultado = [numero for numero in range(1, limite + 1) if esPrimo(numero)]
    return resultado


print(primosHasta(100))

Solución ejercicios

# Definir el algoritmo
# Los pasos que vamos a implementar para resolver el problema
# La 'receta'
# Divide y vencerás: un problema grande se compone de otros más pequeños
# Lo primero es pensar ¿Cömo voy a resolver este problema?

# Cread una función a la que le pasamos una lista de números y nos devuelva una lista
# con el menor y el mayor
# menorMayor([3,1,8,5])->[1,8]

# Cual es el mayor y cual es el menor

# Esta solución es más fácil
def menorMayor(lista):
    ordenada = sorted(lista)
    return [ordenada[0], ordenada[-1]]


# Esta solución es más eficiente, porque ordenar es algo muy costoso
def menorMayor2(lista):
    menor = lista[0]
    mayor = lista[0]
    for numero in lista:
        if numero < menor:
            menor = numero
        if numero > mayor:
            mayor = numero
    return [menor, mayor]


# Esto de aquí hay que evitarlo: No se modifican los parámetros que pasamos
def menorMayor3(lista):
    lista.sort()
    menor = lista.pop(0)
    mayor = lista.pop(-1)
    return [menor, mayor]


print(menorMayor([3, 1, 8, 5]))
print(menorMayor2([3, 1, 8, 5]))

milista = [2, 1, 6, 8, 33, 4, 12, 25]
print(menorMayor3(milista))
print(milista)


# Cread una función a la que le pasamos una lista de nombres y nos devuelve una lista
# con todos los nombres en minúsculas
# minusculas(["Ana","Pep","Iu"])->["ana","pep","iu"]

# Tener un sitio donde guardar el resultado
# recorrer la lista
# como pasar una cadena a minúsculas
def minusculas(lista):
    resultado = []
    for elemento in lista:
        resultado.append(elemento.lower())
    return resultado


print(minusculas(["Ana", "Pep", "Iu"]))


# Cread una función a la que le pasamos una lista de cadenas y nos devuelve una lista
# con las que tengan una longitud par
# longitudPar(["aa","bbb","cccc","ddddd"])->["aa","cccc"]

# Tener un sitio donde guardar el resultado
# recorrer la lista
# Si la longitud es par, lo añado a la lista
def longitudPar(lista):
    resultado = []
    for elemento in lista:
        if len(elemento) % 2 == 0:
            resultado.append(elemento)
    return resultado


print(longitudPar(["aa", "bbb", "cccc", "ddddd"]))

Soluciones ejercicios

# Cread una función a la que le pasamos un cantidad y nos devuelve una lista con
# esa cantidad de la cadena "hola" repetidas
# crearHolas(4)->["Hola","Hola","Hola","Hola"]

def crearHolas(cantidad):
    # devolver una lista con la cadena "Hola" repetida 'cantidad' veces
    resultado = []
    # Tengo añadir la cadena "Hola" a esa lista n veces
    # 1.- Hacer algo n veces for
    # 2.- Añadir una cadena a una lista append
    for i in range(cantidad):
        resultado.append("Hola")

    return resultado


def crearHolas2(cantidad):
    return ["Hola"] * cantidad


print(crearHolas(4))
print(crearHolas2(4))


# tengo la siguiente función que me calcula la media de una lista
def media(lista):
    suma = 0
    for numero in lista:
        suma += numero
    return (suma / len(lista))


# Cread una función mediaAprobados que nos calcule la media pero solo de aquellos números
# que son >=5

def mediaAprobados(lista):
    suma = 0
    cont = 0
    for numero in lista:
        if numero >= 5:
            suma += numero
            cont += 1
    print(suma)
    return (suma / cont)


def mediaAprobados2(lista):
    aprobados = []
    for numero in lista:
        if numero >= 5:
            aprobados.append(numero)
    return media(aprobados)


lista = [1, 8, 3, 4, 5, 6, 2, 8, 9]
calculo = mediaAprobados(lista)
print(calculo)
calculo = mediaAprobados2(lista)
print(calculo)


# Cread una función a la que le pasemos una lista de cadenas y una longitud y nos diga
# cuantas cadenas son mayores de esa longitud
# contarCadenas(["aaa","bbbb","ccccc"],3)->2

def contarCadenas(lista, longitud):
    # una variable donde contar
    cont = 0
    # recorrer la lista de cadenas
    for cadena in lista:
        # Si la cadena tiene una longitud mayor de 'longitud' contarla y si no hago nada
        if len(cadena) > longitud:
            cont += 1
    return cont


print(contarCadenas(["aaa", "bbbb", "ccccc"], 3))
print(contarCadenas(["aaa", "bbbb", "ccccc"], 2))


# Cread una función a la que le pasamos una lista de cadenas y nos devuelve True si
# alguna de las cadenas tiene una 'j'
# tieneJ(["aa","bb"])->False   tieneJ(["aa","bb","ajo"])->True

def tieneJ(lista):
    # recorrer la lista
    for cadena in lista:
        # si la cadena tiene una j devuelvo true si no tiene NO HAGO NADA
        if "j" in cadena:
            return True
    # si al final ninguna ha tenido una j devolvemos false
    return False


print(tieneJ(["aa", "bb"]))
print(tieneJ(["aa", "bb", "ajo"]))


# Crea una función a la que le pasamos una lista de cadenas y me devuelva la más larga
# si hay varias cadenas con la misma longitud, la primera
# masLarga(["aa","eeeee","bbb"])->"eeeee"

# en algún sitio guardaré la cadena más larga
# recorrer la lista
# si la cadena que estoy mirando es más larga que la que ya tengo me quedo con ella

def masLarga(lista):
    larga = ""
    for cadena in lista:
        # Aquí está la magia
        if len(cadena) > len(larga):
            larga = cadena

    return larga

Soluciones variables

import datetime

ahora = datetime.datetime.now()

anio_actual=ahora.year
anio_actual=2025
anio_nacimiento=int(input("Dime tu año de nacimiento"))

print(f"Este año tendrás {anio_actual-anio_nacimiento} años")

# Calcular el área de un triángulo
base=float(input("Dime la base"))
altura=float(input("Dime la altura"))
area=base*altura/2
print("El área es ",area)
# saber hacer esto es importante porque puede ser que queramos
# almacenar el valor, no imprimirlo
print("El área es "+str(area))
print(f"El área es {area}")

# Pido el número
numero=int(input("Dime un numero del 10 al 99"))
decenas=numero//10
unidades=numero%10
suma=decenas+unidades
print("La suma es ",suma)

# Pido los minutos
total_minutos=int(input("Dime cuantos minutos"))

# calculo horas y minutos
horas=total_minutos//60
minutos=total_minutos%60

# muestro
print(f"{horas} horas y {minutos} minutos")



Probemos el if… y todo lo demás

Cread un script de JS que nos pida (con prompt) la edad al usuario y la altura en centímetros

Si la edad es mayor de 16 o la altura mayor de 150 que muestre un mensaje que diga ‘Puedes pasar’

¿Qué pasa si el usuario no pone ningún valor (ya sabemos como son)?

Recopilación ejercicios de cadenas

 

Una función que nos ponga una cadena en minúsculas y la primera y última letra en mayúsculas. Ejemplo: flupper(“HOLA”)->”HolA” flupper(“cacahauete”)->”CacahuetE”

 

Crear una función ToTitleCase que nos ponga la primera letra de cada palabra en mayúsculas
ToTitleCase(“hoLA que TAL”)=>”Hola Que Tal”

Una función que ponga las vocales en minúsculas y las consonantes en mayúsculas

Una función que devuelva true si la cadena que le pasamos empieza y acaba con la misma letra, independientemente de mayúsculas y minúsculas. Ejemplo iniciofin(“hola”)->false iniciofin(“alubia”)->true iniciofin(“Alava”)->true;

Una función que nos quite los n primeros caracteres de una cadena. recortar(“En un lugar de la mancha”,2)->” un lugar de la mancha”

Una función que nos devuelva el centro de una cadena. El centro es, si la longitud de la cadena es impar, la letra que está en el medio. Si la longitud de la cadena es par, las dos letras del medio. centro(“mar”)->”a” centro(“casa”)->”as”;

Crear una función InternalTrim que elimine espacios de más DENTRO de una cadena.
InternalTrim(“Hola      que    tal”)=>”Hola que tal”

Crear una función contarCaracter que nos cuente cuantas veces aparece un caracter en una cadena sin tener en cuenta mayúsculas o minúsculas
contarCaracter(“Hola que tal. A mi plim”,”a”)->3

Crear una función quitarAcentos que nos cambie las vocales acentuadas por vocales sin acentuar:
quitarAcentos(“Camión molón”)->”Camion molon”

Crear una función VocalsCount que nos diga las vocales que hay en una cadena

VocalsCount(“Hola que tal”)=>5

Lo mismo pero teniendo en cuenta acentos

Vamos a crear una función cuantasPalabras a la que le pasamos una cadena y un caracter y nos dice cuantas palabras en esa cadena contienen ese caracter
cuantasPalabras(“hola que tal”,”a”)->2

Vamos a crear una funcion que nos devuelva True si hay dos letras iguales repetidas
repetidas(“hola que tal”)->False
repetidas(“viva sevilla”)->True (hay dos l)
repetidas(“mi carro me lo robaron”)->True (hay dos r)

Escribir una función que invierta el orden de los caracteres de una cadena dada. invertir(“hola”)–>”aloh”

Crear una función esPalindromo que nos diga si una cadena es palíndroma:

boolean esPalindromo(String cadena)

esPalindromo(“Viva la paella”)->false
esPalindromo(“Sara Baras”)->true

Función Leet: Nos convierte una cadena a https://es.wikipedia.org/wiki/Escritura_leet
Usad la tabla más simple:
a 4  e 3    g 6    i |    l 1     o 0     s 5      t 7      z 2

Crear una función repetirPad que le pasemos una cadena, una longitud y nos devuelva una cadena repetida tantas veces como haga falta para alcanzar longitud (pero sin pasarse) y después, si todavía falta para llegar a longitud, lo rellene con ‘#’. Veamos ejemplos:
repetirPad(“hola”,10)->”holahola##”
repetirPad(“adios”,18)->”adiosadiosadios###”

 

Vamos a crear una función mezclar a la que le pasamos una cadena y nos crea otra con  la primera parte las letras pares y la segunda las impares, con unos ejemplos lo vemos mejor:
mezclar(“abcdefg”)->”acegbdf” mezclar(“12345678″)->”13572468” mezclar(“ababcdcd”)->”aaccbbdd”