# listas: colección de variables
nota = 7 # Una variable en la que guardo un valor
notas = [5, 8, 6, 4] # Una lista es una colección de variables
vacia = []
foo = ["hola"]
varios = ["a", "b", "c"]
mixta = [1, 4, "cadena", False, 3.56, "otra cadena", 28] # Los elementos pueden ser de cualquier tipo
print(mixta[2]) # cadena
print(mixta[-1]) # 28 (el último)
for elemento in mixta:
print(elemento)
print(mixta[2:4])
print(mixta[2:5])
print(mixta[2:3])
clase = ["Ana", "Pep", "Eva", "Iu"]
# la variable alumno va a ir tomando los valores de la lista 'clase'
# es decir, primero Ana, después Pep, luego Eva y por último Iu
for alumno in clase:
print(alumno)
# Mutables: que se pueden cambiar
clase[1] = "Juan"
print(clase)
# Métodos de las listas
# append añade un elemento al final de la lista
clase.append("Rosa")
print(clase)
# extend nos añade una lista al final de otra lista
otraclase = ["John", "Mary"]
clase.extend(otraclase)
print(clase)
# también podemos hacerlo simplemente sumando
otraclasemas = ["Luis", "María"]
clase += otraclasemas
print(clase)
# el append también se puede hacer sumando pero ¡ojo! entre corchetes
clase += ["Fernando"]
print(clase)
# Podemos insertar un elemento en cualquier posición con insert
clase.insert(2, "Florencia")
# ¡Ojo! No es lo mismo insertar que cambiar. Añado Florencia y el resto se desplaza
print(clase)
# Eliminamos la primera ocurrencia de Florencia
clase.remove("Florencia")
print(clase)
# Extraer elementos
# Estoy extrayendo el último elemento y lo estoy guardando en último
ultimo = clase.pop()
print(ultimo)
print(clase)
# Puedo hacer pop sin guardar, simplemente elimino el último elemento
clase.pop()
print(clase)
# pop puede tener como parámetro una posición
al = clase.pop(3) # extraigo el elemento 3 (Iu)
print(al)
print(clase)
for i in range(len(clase)):
clase.pop()
print(clase)
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Soluciones ejercicios
# 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"
def masLarga(cadena1, cadena2):
if len(cadena1) >= len(cadena2):
return cadena1
else:
return cadena2
print(masLarga("hola", "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
def mismoInicioFin(cadena):
return cadena[0] == cadena[-1] # if cadena[0]==cadena[-1] return True else: return False
def mismoInicioFinOtro(cadena):
if cadena[0] == cadena[-1]:
return "Empiezan y acaban por la misma letra"
else:
return "Tiene inicio y fin distinto"
print(mismoInicioFin("hola"))
print(mismoInicioFin("ajada"))
print(mismoInicioFinOtro("ajada"))
# 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
# numerizar("leche")->"13ch3"
def numerizar(cadena):
cadena = cadena.lower()
cadena = cadena.replace("l", "1")
cadena = cadena.replace("e", "3")
return cadena
def numerizarCompacto(cadena):
cadena = cadena.lower().replace("l", "1").replace("e", "3")
return cadena
print(numerizarCompacto("leche"))
# Cread una función a la que le pasemos una cadena y nos devuelva la cadena invertida
# alreves("hola")->"aloh"
def alreves(cadena):
resultado = ""
for letra in cadena:
resultado = letra + resultado
return resultado
def alrevesNinja(cadena):
return cadena[::-1]
cadena = "en un lugar de la mancha"
print(cadena[2:5])
print(cadena[:10])
print(cadena[:])
print(cadena[2:5:2]) # el primer número es el inicio. El segundo el final. El tercero el paso
print(cadena[:10:2]) # Si no pongo el primero se entiende que desde el principio
print(cadena[::3]) # Si no pongo tampoco el segundo se entiende que hasta el final
print(cadena[::-1])
print(alreves("hola"))
print(alrevesNinja("hola"))
# Cread una función que nos diga si en una cadena hay letras repetidas consecutivas
# repetidas("hola que tal")-> False repetidas("sevilla")->True
def repetidas(cadena):
anterior = ""
for letra in cadena:
# si la letra es igual a la anterior devuelvo True[
if letra == anterior:
return True
# Guardo en anterior la letra actual, que será la anterior del siguient paso del bucle
anterior = letra
# He recorrido toda la cadena y no he encontrado una letra repetida, devuelvo False
return False
def repetidasDos(cadena):
# Ir desde el 1 hasta el final de la cadena
# Porque antes del 0 no hay letra
for i in range(1, len(cadena)):
if cadena[i] == cadena[i - 1]:
return True
return False
print(repetidasDos("sevilla"))
print(repetidasDos("hola que tal"))
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}")