Ejercicios cadenas

# Cread una función a la que le pasamos dos cadenas y nos devuelve la cadena más larga
# si son iguales nos devuelve la primera
# masLarga("hola","adios")-> "adios"



# Cread una función que nos devuelva True si la cadena empieza y acaba por la misma letra, False en caso contrario
# mismoInicioFin("hola")->False mismoInicioFin("ajada")->True


# Cread una función a la que le pasemos una cadena y nos reemplace todas las 'l' por un '1'
# y todas las 'e' por '3' independientemente de si son mayúsculas o minúsculas
# nnumerizar("leche")->"13ch3"


# Cread una función a la que le pasemos una cadena y nos devuelva la cadena invertida
# alreves("hola")->"aloh"


# Cread una función que nos diga si en una cadena hay letras repetidas consecutivas
# repetidas("hola que tal")-> False  repetidas("sevilla")->True

Ejemplos funciones de cadena

# podemos definir nuestras propias funciones
# pero python tiene muchas funciones predefinidas

cadena = "Hola que tal"

print(len(cadena))

# Funciones de cadena: nos permiten manipular cadenas de texto

# Acceder a un carácter específico de la cadena o a un rango de caracteres

print(cadena[3])  # imprime la letra 'a'

# Con los dos puntos obtenemos una subcadena de la cadena desde el primer carácter hasta el último NO INCLUÍDO
print(cadena[3:7])  # imprime 'a qu' va del 3 al 6 (incluído)

for i in range(0, len(cadena) + 1):
    print(cadena[0:i])

mayusculas = cadena.upper()
print(mayusculas)
minusculas = cadena.lower()
print(minusculas)
print(cadena.title())

# Si una cadena está dentro de otra
print("que" in cadena)
print("pepe" in cadena)

# Nos busca la posición de una cadena dentro de otra
# Si no está nos devuelve -1
posicion = cadena.find("que")
print(posicion)
posicion = cadena.find("pepe")
print(posicion)

# Podemos reemplazar una cadena por otra

print(cadena.replace("que", "ke"))
print(cadena.replace("a", "@"))

print(cadena.replace("a", ""))
# Podemos indicar las veces que queremos reemplazar
cadena = "patatas para ana"
print(cadena.replace("a", "@", 3))

cadena = "   hola que tal   "
# con strip quito espacios del principio y del final

print(cadena.strip().upper())  # encadenamiento y funciona porque las funciones devuelven un valor

sinespacios = cadena.strip()
mayus = sinespacios.upper()
print(mayus)

# en una cadena reemplazar las A por @ independentemiente de mayúsculas o minúsculas

cad = "CADA PATATA tiene carbohidratos"

print(cad.lower().replace("a", "@"))

some_string = 'Hello World'
print('Testing a String')
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())

Parámetros por defecto y llamar a otra función

# Podemos tener parámetros por defecto o con valores predeterminados

def saludo(nombre="Anónimo"):
    return "Hola " + nombre


ana = saludo("Ana")

anonim = saludo()  # Como no paso un valor a 'nombre' pone por defecto 'Anónimo'

print(ana, anonim)


def potencia(numero, exponente=2):
    return numero ** exponente  # En python para elevar un número a otro se usa ** numero^exponente


# suma 1+1+1+1+1  5*1 (multiplicación)
# multiplicación 5*5*5*5 5^4 (potencia)


print(potencia(2, 4))
print(potencia(8))  # Como no le pongo valor a 'exponente' le pone por defecto 2


# En la siguiente función vamos a hacer que la cantidad por defecto sea '2'
# Si yo pongo repetir("Ana")-> "AnaAna"

def repetir2(cadena, cantidad):
    return cadena * cantidad


# Que las funciones pueden llamar a otras funciones

def esPar(numero):
    # En general siempre que tenemos un if que devuelve true o false podemos devolver directamente la condición del if
    return numero % 2 == 0


def sumaPares(numero):
    suma = 0
    for i in range(0, numero + 1):
        if esPar(i):
            suma += i
    return suma


print(sumaPares(100))


def esVocal(letra):
    if letra == "a" or letra == "e" or letra == "i" or letra == "o" or letra == "u":
        return True
    else:
        return False


def contarVocales(cadena):
    # variable que acumula: en este caso lo que hago es contar
    contador = 0
    # Bucle para recorrer, en este caso recorro todas letras de la cadena
    for letra in cadena:
        # En letra tenemos todas las letras de la cadena
        # Llamamos a la función esVocal para saber si es vocal o no

        if esVocal(letra):
            # Si sí que es vocal, contamos uno
            contador += 1
    # devolvemos el resultado
    return contador


print(esVocal("a"))
print(esVocal("j"))

print(contarVocales("hola que tal"))  # 5


def esPrimo(numero):
    for i in range(2, numero):
        if numero % i == 0:
            return False
    return True


def mostrarPrimos(numero):
    resultado="1"
    for i in range(2,numero+1):
        if esPrimo(i):
            resultado+=f",{i}"
    return resultado

print(esPrimo(100))
print(esPrimo(17))

print(mostrarPrimos(50))

Soluciones funciones

# Cread una función a la que le pasemos un nombre y nos devuelva una cadena con un saludo
# saludo("Ana") -> "Hola Ana"

def saludo(nombre):
    resultado = "Hola " + nombre
    return resultado


# Cread una función a la que le pasamos una cadena y una cantidad y nos devuelve la cadena repetida esa cantidad
# repetir("Ana",3)->"AnaAnaAna"

def repetir(cadena, cantidad):
    # código que nos repita una cadena una cantidad de veces
    # Variable que me servirá de 'acumulador'
    resultado = ""
    # Bucle que me recorra una serie de elementos o, como en este caso, que me repita algo un número
    # determinado de veces
    for i in range(0, cantidad):
        # Hago la operación que sea: concatenar, sumar, contar, multiplicar...
        resultado += cadena

    return resultado


def repetir2(cadena, cantidad):
    return cadena * cantidad


def nombreTriple(nombre):
    return (f'{nombre}\n' * 3)  # Lo estamos imprimiendo directamente por la consola IMPURA


nombreTriple('Jenn')


# Cread una función a la que le pasamos un número y nos devuelve True si es par y False si no lo es
# esPar(5)->False  esPar(80)->True

def esPar(numero):
    if numero % 2 == 0:
        resultado = True
    else:
        resultado = False
    return resultado


def esParCompacta(numero):
    # En general siempre que tenemos un if que devuelve true o false podemos devolver directamente la condición del if
    return numero % 2 == 0


repetida = repetir("Hola", 5)
print(repetida)
repetida = repetir2("Hola", 5)
print(repetida)
print("hola" * 5)
print(nombreTriple("Ana"))
nombrerepetido = nombreTriple("Federico")

print(esPar(5))
print(esPar(6))

print(esParCompacta(5))
print(esParCompacta(6))

Ejercicio funciones

# Cread una función a la que le pasemos un nombre y nos devuelva una cadena con un saludo
# saludo("Ana") -> "Hola Ana"


# Cread una función a la que le pasamos una cadena y una cantidad y nos devuelve la cadena repetida esa cantidad
# repetir("Ana",3)->"AnaAnaAna"


# Cread una función a la que le pasamos un número y nos devuelve True si es par y False si no lo es
# esPar(5)->False  esPar(80)->True

Ejemplos funciones

# Programación funcional
# lo que hemos estado haciendo hasta ahora es lineal
# cada instrucción sigue a la siguiente hasta que acabamos
# El primer paso para una programación estructurada es usar funciones
# ¿Qué es una función?
# Bloque de código reutilizable que permite recibir parámetros y devolver un resultado

# sintaxis def nombre_de_la_funcion(parametros):
# Esta función no tiene parámetros pero uso () igual
def saludar():
    # Estas tres líneas se ejecutan cuando se llama a la función
    print("Hola")
    print("¿Qué tal estás")
    print("Yo muy bien")


saludar()
print("------")
saludar()
print("------")


# Incorporamos un parámetro
def saludarNombre(nombre):
    print(f"Hola {nombre}")
    print("¿Qué tal estás")
    print("Yo muy bien")


saludarNombre("Ana")
print("------")
saludarNombre("Juan")


# Añadir devolver un resultado

def suma(a, b):
    return a + b


print(suma(2, 3))
print(suma(8, 10))

resultado = suma(19, 35)
print(resultado)


# Un ejemplo más complejo
def contarLetra(cadena, letra):
    contador = 0
    for c in cadena:
        if c == letra:
            contador += 1
    return contador


total = contarLetra("mancha", "a")
print(total)
total = contarLetra("En un lugar de la mancha", "n")
print(total)

Break y continue

for i in range(1, 100):
    print(i)
    if i == 16:
        break

cadena = input("Dime una cadena")
tiene = False
for letra in cadena:
    if letra == "ñ":
        tiene = True
        break

if tiene:
    print("Tiene Ñ")
else:
    print("No hay ninguna Ñ")

numero = int(input("Dime un número"))
esPrimo = True
for i in range(2, numero):
    if numero % i == 0:
        esPrimo = False
        break
if esPrimo:
    print(f"{numero} es primo")
else:
    print(f"{numero} no es primo")

# continue Se salta las instrucciones que hay a continuación y sigue con el bucle

numero = 100
suma = 0
for i in range(1, numero + 1):
    if i % 2 == 0:
        continue
    print(i)
    suma += i

cadena = input("Dime una cadena ")
resultado = ""
for letra in cadena:
    if letra == "a":
        continue
    resultado += letra
print(resultado)

Ejemplos bucles anidados

# bucles anidados (y cualquier tipo de anidación)
# Nosotros podemos poner bucles dentro de bucles igual que poníamos ifs dentro de ifs

for numero in range(1, 11): # Este bucle va del 1 al 10
    print(f"Tabla del {numero}: ") # ¿Cuantas veces se imprime esto? 10 veces
    for i in range(1, 11): # Este también va del 1 al 10
        print(f"{i} x {numero} = {i * numero}") # ¿Cuantas veces se imprime esto? 100 veces

colores = ["rojo", "verde", "azul"]
frutas = ["manzana", "plátano", "uva"]

for color in colores:
    for fruta in frutas:
        print(color, fruta) # ¿Cuantas veces se imprime esto? 9 veces

vocales="aeiou"
consonantes="ptd"

for vocal in vocales:
    for consonante in consonantes:
        print(consonante+vocal)

# pa ta da pe te de...

# pa pe pi po pu ta te ti to tu da de di do du
for consonante in consonantes:
    for vocal in vocales:
        print(consonante+vocal)

# Reloj

for hora in range(1,25):
    for minuto in range(1,60):
        print(f"{hora}:{minuto}")


Soluciones ejercicios for

# 1.- Pedir un número al usuario y mostrar la suma de todos los números hasta ese número
# 5->1+2+3+4+5=15

numero = int(input("Dime un número"))
suma = 0
for i in range(1, numero + 1):
    suma += i
print(suma)

# 2.- Pedir una cadena al usuario y escribir si tiene o no tiene alguna 'ñ'
# 'Logroño'-> Tiene 'Barceloba'->No tiene

cadena = input("Dime una cadena")
tiene = False
for letra in cadena:
    if letra == "ñ":
        tiene = True

if tiene:
    print("Tiene Ñ")
else:
    print("No hay ninguna Ñ")

# 3.- Pedir un número al usuario y escribir su tabla de multiplicar

numero = int(input("Dime el número "))
for i in range(1, 11):
    print(f"{i} x {numero} = {i * numero}")

# 4.- Pedir dos números al usuario (mínimo y máximo) y calcular la suma entre los dos
# 2 y 5 ->2+3+4+5=14
minimo = int(input("Dime el primer número "))
maximo = int(input("Dime el segundo número "))
suma = 0
for i in range(minimo, maximo + 1):
    suma += i
print(suma)

# 5.- Pedir una cadena al usuario y escribir una cadena sin la letra 'a'
# 'patata' -> ptt 'ayer se fue' -> 'yer se fue'
cadena = input("Dime una cadena ")
resultado = ""
for letra in cadena:
    if letra != "a":
        resultado += letra
print(resultado)

Ejercicios for

# 1.- Pedir un número al usuario y mostrar la suma de todos los números hasta ese número
# 5->1+2+3+4+5=15

# 2.- Pedir una cadena al usuario y escribir si tiene o no tiene alguna 'ñ'
# 'Logroño'-> Tiene 'Barceloba'->No tiene

# 3.- Pedir un número al usuario y escribir su tabla de multiplicar

# 4.- Pedir dos números al usuario (mínimo y máximo) y calcular la suma entre los dos
# 2 y 5 ->2+3+4+5=14

# 5.- Pedir una cadena al usuario y escribir una cadena sin la letra 'a'
# 'patata' -> ptt 'ayer se fue' -> 'yer se fue'