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

Códigos while y for

# bucle while ejecuta mientras se cumpla una condicion

cont=1
numero=7
print(f"Tabla de multiplicar del {numero}")
while cont<=10:
    print(f"{cont} x {numero} = {cont*numero}")
    # Dentro del bucle while tengo que modificar algo de la condicion
    cont+=1

total=0
num=int(input("Introduce un numero (0 para salir) "))

while num!=0:
    total+=num
    num = int(input("Introduce un numero (0 para salir) "))
print("La suma total es",total)


import random

numero_secreto = random.randint(1, 100)
print(numero_secreto)
intentos = 0
intento=0
while intento != numero_secreto:
    intento = int(input("Intenta adivinar el número (entre 1 y 100): "))
    if intento<1 or intento>100:
        print('ERROR: Numeros entre 1 y 100')
        continue # Sáltate el resto de líneas y vuelve al principio

    intentos += 1
    if intento == numero_secreto:
        print(f"Felicitaciones, ¡adivinaste el número {numero_secreto} en {intentos} intentos!")
        break # Sal del bucle
    elif intento>numero_secreto-5 and intento<numero_secreto+5:
        print("Estás cerca")
    elif intento < numero_secreto:
        print("El número es mayor. Intenta de nuevo.")
    else:
        print("El número es menor. Intenta de nuevo.")

lista=[1,2,3,4,5,6,7]

for elemento in lista:
    print(elemento)

alumnos=["Ana","Juan","Eva","Pep"]

for alumno in alumnos:
    print(alumno)

cant="hola que tal"

for n in cant:
    print(n)

for i in range(len(alumnos)):
    print(alumnos[i])

for i in range(1,6):
    print(i)

for i in range(1, 6,2):
    print(i)

"""Escribe un programa que recorra una lista de números
 y calcule la suma de todos los números pares en la lista.
 También la media """

lista=[1,2,3,4,5,6,7,100,90,3]

suma=0
cont=0
for elemento in lista:

    print(elemento)
    if elemento%2==0:
        suma+=elemento
        cont+=1

print("Total",suma)
print("Media",suma/cont)

Soluciones if

"""Desarrolla un programa que pida al usuario un número entero y determine si es par o impar. Si es par,
muestra “Es un número par”, si es impar, muestra “Es un número impar”."""

numero=int(input("Introduce un número"))
if numero%2==0:
    print("par")
else:
    print ("impar")

"""Escribe un programa que solicite al usuario su calificación en un examen y determine si ha aprobado o reprobado. 
Si la calificación es igual o superior a 60, muestra “Aprobado”, de lo contrario, muestra “Reprobado”."""

calificacion=float(input("Introduce nota"))

if calificacion>=60:
    print("Aprobado")
else:
    print("Reprobado")

"""Desarrolla un programa que pida al usuario dos números enteros y 
determine si al menos uno de ellos es positivo y par. 
Si alguna de estas condiciones se cumple, muestra 
“Al menos uno de los números es positivo y par”, 
de lo contrario, muestra “Ninguno de los números cumple con las condiciones”."""

a=int(input("Introduce numero 1 "))
b=int(input("Introduce numero 2 "))

# NO hace falta paréntesis
if (a%2==0 and a>0) or (b%2==0 and b>0):
    print("Positivo y par")
else:
    print("No positivo y par")