# sumar listas para crear listas nuevas con los elementos de las listas sumados
lista1 = [1, 2, 3]
lista2 = [4, 5, 6]
lista3 = lista1 + lista2
print(lista1, lista2, lista3)
# añadir a una lista existente otra lista
lista1.extend(lista2)
print(lista1, lista2, lista3)
lista4 = lista2 + lista1
print(lista4)
lista4.sort()
print(lista4)
lista4.sort(reverse=True)
print(lista4)
alumnos = ["Ana", "Eva", "pep", "Iu", "juan", "Rosa", "Iu", "Iu"]
alumnos.sort()
print(alumnos)
# usando key lo que le digo es que antes de ordenar aplique esa función
alumnos.sort(key=str.lower)
print(alumnos)
def valorAbsoluto(numero):
if numero<0:
numero=-numero
return numero
valores=[1,-3,6,-2,-8,3,-4]
valores.sort(key=valorAbsoluto)
print(valores)
def nombreCompleto(tratamiento,nombre,apellido):
return tratamiento+" "+nombre+" "+apellido
print(nombreCompleto("Sr.","Pepito","Pérez"))
print(nombreCompleto(nombre="Ana",tratamiento="Excelentísima",apellido="Pi"))
Categoría: Python
Solución ejercicios listas y archivos
# crear una función generarRango a la que le pasamos un número y nos devuelve una lista
# desde el 1 hasta ese número generarRango(5)_>[1,2,3,4,5]
def generarRango(numero):
rango = []
for i in range(numero):
rango.append(i + 1)
return rango
print(generarRango(9)) # [1,2,3,4,5]
# crear una función mediaAritmetica a la que le pasamos una lista de números y nos devuelve la media
# mediaAritmetica([2,4,6])->4
def mediaAritmetica(lista):
return sum(lista) / len(lista)
print(mediaAritmetica([2, 4, 6])) # 4
# crear una función a la que le pasamos una letra y un número y nos genera una lista con esa letra
# repetida una, dos y hasta n veces
# generarCadenas("a",5)->["a","aa","aaa","aaaa","aaaaa"]
def generarCadenas(letra, numero):
lista = []
if len(letra) != 1:
return lista
for i in range(numero):
lista.append(letra * (i + 1))
return lista
print(generarCadenas("a", 5)) # ["a","aa","aaa","aaaa","aaaaa"]
# Crear una función a la que le pasamos un nombre de archivo y un número y nos crea ese archivo
# y nos escribe números de líneas hasta el número
# crearArchivo("datos.txt",5) nos genera un archivo 'datos.txt' con 5 líneas numeradas del 1 al 5
def crearArchivo(nombre,rango):
archivo=open(nombre,"w")
for i in range(rango):
archivo.write(str(i+1)+"\n")
archivo.close()
crearArchivo("datos.txt",5)
Ejercicios listas
# crear una función generarRango a la que le pasamos un número y nos devuelve una lista
# desde el 1 hasta ese número generarRango(5)_>[1,2,3,4,5]
#crear una función mediaAritmetica a la que le pasamos una lista de números y nos devuelve la media
# mediaAritmetica([2,4,6])->4
# crear una función a la que le pasamos una letra y un número y nos genera una lista con esa letra
# repetida una, dos y hasta n veces
# generarCadenas("a",5)->["a","aa","aaa","aaaa","aaaaa"]
# Crear una función a la que le pasamos un nombre de archivo y un número y nos crea ese archivo
# y nos escribe números de líneas hasta el número
# crearArchivo("datos.txt",5) nos genera un archivo 'datos.txt' con 5 líneas numeradas del 1 al 5
Listas, una introducción
numero = 5
cadena = "hola que tal"
numero += 9
cadena += " yo muy bien"
alumno1 = "Ana"
alumno2 = "Eva"
alumno3 = "Pep"
# Si tengo 20 alumnos no voy a tener 20 variables una para cada alumno
# Se han inventado las listas: una variable en la que yo puedo introducir muchos elementos
# como defino una lista: con corchetes [...]
# cada elemento está separado por comas
alumnos = ["Ana", "Eva", "Pep"] # lista de nombres
notas = [5, 8, 6] # lista de notas
print(alumnos)
print(notas)
# como accedo a los elementos de la lista: por su posición
print(alumnos[0]) # Ana
print(alumnos[1]) # Eva
print(alumnos[2]) # Pep
alumnos[2] = "Juan" # en la posición 2 cambio Pep por Juan
print(alumnos)
# recorrer la lista
for alumno in alumnos:
print(alumno)
for i in range(len(alumnos)):
print(i, alumnos[i])
listaMixta = [1, "Ana", True, 7.8]
listaMixtaAnidada = [1, "Ana", True, 7.8, [1, 2, 3]]
# valor y referencia
precio=15
otroprecio=precio # copia por valor
precio=20 # cuando cambio el valor de precio no cambia el de otroprecio
print(precio, otroprecio)
lista=[1,2,3,4]
otralista=lista # copia por referencia
otraMas=lista.copy() # copia por valor
lista[1]=27 # cuando cambio el valor de lista SI CAMBIA el de otralista
print(lista,otralista,otraMas)
def cambiarLista(lista):
for i in range(len(lista)):
lista[i]+=2
cambiarLista(lista)
print(lista,otralista)
# añadir elementos al final
lista.append(90)
print(lista)
# recupera y borra el elemento del final
elemento=lista.pop()
print(lista,elemento)
# recupera y borra un elemento en cualquier posición
elemento=lista.pop(0)
print(lista,elemento)
# insertar un elemento en cualquier posición
lista.insert(2,666)
print(lista)
cuadrados=[]
for i in range(11):
cuadrados.append(i**2)
print(cuadrados)
print(cuadrados[-1])
# el mismo slicing que en cadenas
print(cuadrados[2:4])
print(cuadrados[2:])
print(cuadrados[:4])
print(cuadrados[2:-2])
print(cuadrados[-7:-2])
print(cuadrados[0::2])
Ejemplos trabajo con archivos
# trabajar con archivos en python
# Tengo que abrir un archivo: open
# al abrirlo especifico el modo lectura (r) escritura (w) añadir(a)
# hago operaciones de escritura o de lectura
# cierro el archivo
import random
archivo=open("prueba.txt","w")
for i in range(5):
archivo.write("Hola que tal\n")
archivo.close() # Es importante cerrar aunque si no cerramos no pasa nada
archivo=open("prueba.txt","r")
contenido=archivo.read()
print(contenido)
archivo.close()
archivo=open("tiradas.txt","w")
def tirada():
if random.randint(1,2)==1:
return "cara"
else:
return "cruz"
for i in range(10):
archivo.write(tirada()+"\n")
archivo.close()
archivo=open("datos.csv","r")
datos=archivo.read()
for linea in datos.split("\n"):
print("-->",linea)
alumno=linea.split(";")
print(alumno)
archivo.close()
# leer línea a línea
archivo = open("datos.csv", "r")
for linea in archivo:
print("-->", linea.strip())
archivo.close()
archivo = open("datos.csv", "r")
linea = archivo.readline()
while (linea):
print("-->", linea.strip())
linea = archivo.readline()
archivo.close()
el archivo datos.csv:
Ana;ana@ana.com
pepe;pepe@pepe.com
Eva;eva@eva.com
Ejercicios cadenas Python
# Vamos a crear una función cuantasPalabras a la que le pasamos una cadena y un caracte
# Y nos dice cuantas palabras en esa cadena contienen ese caracter
# cuantasPalabras("En un lugar de la mancha","e")->2
# cuantasPalabras("En un lugar de la mancha","n")->3
# cuantasPalabras("En un lugar de la mancha","j")->0
# Como veis da lo mismo mayúsculas que minúsculas
def cuantasPalabras(cadena, letra):
"""Nos cuenta cuantas palabras tienen esa letra"""
cadena = cadena.lower()
letra = letra.lower()
cont = 0
# recorrer las palabras
for palabra in cadena.split():
# saber si una palabra tiene esa letra
if letra in palabra:
cont += 1
return cont
print(cuantasPalabras("En un lugar de la mancha", "e")) # 2
print(cuantasPalabras("En un lugar de la mancha", "n")) # 3
print(cuantasPalabras("En un lugar de la mancha", "j")) # 0
print(cuantasPalabras("En un lugar de la mancha", "a")) # 3
# 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"
def mezclarFor(cadena):
"""Nos crea una cadena con las letras pares primero y después las impares"""
par = ""
impar = ""
for i in range(len(cadena)):
if i % 2 == 0:
par += cadena[i]
else:
impar += cadena[i]
return par + impar
def mezclar(cadena):
"""Nos crea una cadena con las letras pares primero y después las impares"""
return cadena[0::2] + cadena[1::2]
print(mezclar("abcdefg")) # acegbdf
print(mezclar("12345678")) # 13572468
# 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)
def repetidas(cadena):
for i in range(len(cadena) - 1):
if cadena[i] == cadena[i + 1]:
return True
return False
print(repetidas("hola que tal")) # ->False
print(repetidas("viva sevilla")) # ->True (hay dos l)
print(repetidas("mi carro me lo robaron")) # ->True (hay dos r)
def dobleLetra(frase):
fraseLower = frase.lower() # pongo el lower para que me pueda identificar todos los caracteres iguales
indice = 1 # variable de soporte para comparar cada letra en el for vs. la siguiente letra de fraseLower (la cadena en la que busco dobles seguidos)
for letra in fraseLower:
if indice < len(frase) and letra == fraseLower[indice]:
return True
else:
indice += 1
return False
print(dobleLetra("Hola que tal")) # debería devolver un false
print(dobleLetra("Mi carro me lo robaron")) # debería devolver True
Ejemplo función: palíndromo
# saber si una cadena es un palíndromo
# Una cadena es un palíndromo si se lee igual de principio a fin que viceversa
# Isaac no ronca asi
# esPalindromo(cadena)- True si es palíndromo y false en caso contrario
def esPalindromo(cadena):
"""
Comprueba si una cadena es un palíndromo, se lee igual de derecha a izquierda que al revés
Args:
cadena: cadena a comprobar
Returns:
bool: True si es palíndromo
"""
# poner la cadena en mayúsculas o en minúsculas
cadena = cadena.lower()
# quitar espacios
cadena = cadena.replace(" ", "")
"""if (cadena==cadena[::-1]):
return True
else:
return False"""
return cadena == cadena[::-1]
print(esPalindromo("Isaac no ronca asi")) # true
print(esPalindromo("Hola que tal")) # false
print(esPalindromo("Dabale arroz a la zorra el abad")) # true
Ejemplos de cadenas en python
Subcadenas: https://www.learnbyexample.org/python-string-slicing/
cad1 = "hola"
cad2 = "adios"
print(cad1 + " y " + cad2)
print(cad1, " y ", cad2)
cad3 = "ana" * 3
print(cad3)
print(len(cad3))
# subcadenas usamos la sintaxis de los corchetes
cad4 = "En un lugar de la mancha. Camión"
print(cad4[4]) # me escribe la posición 4
print(cad4[4:8]) # me escribe la posición 4 a la posición 8 no incluída
print(cad4[4:-4]) # desde la posición 4 hasta la posición 4 empezando desde el final
print(cad4[4:-1]) # desde la posición 4 hasta la posición 1 empezando desde el final
print(cad4[-4:-1]) # desde la posición 4 empezando desde el final hasta la posición 1 empezando desde el final
print(cad4[-1]) # último carácter
print(cad4[-2]) # penúltimo carácter
for i in range(len(cad4)):
print(cad4[0:i + 1])
# conversiones de mayúsculas/minúsculas
print(cad4.upper()) # lo pone en mayúsculas
print(cad4.lower()) # lo pone en minúsculas
print(cad4.capitalize()) # la primera letra de cada frase en mayúsculas, resto en minúsculas
print(cad4.title()) # la primera letra de cada pelabra en mayúsculas, resto en minúsculas
print(cad4.swapcase()) # las mayúsculas pasan a minúsculas y viceversa
print(cad4.casefold()) # También a minúsculas
# reemplazar
cad5 = cad4.replace("a", "@") # reemplaza todas las apariciones de a en la cadena por @
cad6 = cad4.replace("a", "@", 2) # lo mismo pero solo las dos primeras
print(cad5)
print(cad6)
# eliminar espacios
cad6 = " hola que tal "
print("|" + cad6.strip() + "|") # elimina espacios al principio y al final de la cadena
print("|" + cad6.lstrip() + "|") # elimina espacios al principio de la cadena
print("|" + cad6.rstrip() + "|") # elimina espacios al final de la cadena
# buscar subcadenas dentro de una cadena
print("mancha" in cad4) # esto me devuelve true porque mancha es una subcadena de cad4
print("pepe" in cad4) # esto me devuelve false porque pepe NO es una subcadena de cad4
pos = cad4.find("en") # busca la cadena 'en' dentro de la cad4 y nos devuelve la posición
pos3 = cad4.lower().find("en") # busca la cadena 'en' dentro de la cad4 y nos devuelve la posición
pos2 = cad4.find("un") # busca la cadena 'en' dentro de la cad4 y nos devuelve la posición
print(pos) # -1 porque la cadena 'en' no está, está 'En' que no es lo mismo
print(pos2) # porque 'un' está en la posición 3
print(pos3) # porque 'en' está en la posición 0 (al principio) si lo paso a minúsculas
pos4 = cad4.find("a")
while pos4 != -1:
print(pos4)
pos4 = cad4.find("a", pos4 + 1) # todas las apariciones de la letra 'a' dentro de cad4
cad6="en casa en ocasiones entiendo mis enredos"
pos=cad6.find("en")
print(pos)
pos=cad6.find("en",1)
print(pos)
pos=cad6.find("en",9)
print(pos)
for i in range(len(cad4)):
print(i,cad4[i])
# pasar de cadena a lista y viceversa
# split y join
lista=cad4.split() # me separa cada palabra y me la pone en una lista
print(lista)
print(len(lista)) # Número de palabras de la cadena
for palabra in lista:
print(palabra) # Voy recorriendo cada palabra de la lista
print(cad6.count("en")) # todas las veces que aparece 'en' que puede ser dentro de una palabra
cont=0
for palabra in cad6.split():
if palabra=="en":
cont+=1
print(cont) # cuenta las veces que tenemos la palbra 'en'
cad7="1,2,3,4,5,6,7,8"
numeros=cad7.split(",")
print(numeros)
cad8="-".join(numeros)
print(cad8)
print(cad6[0:8:2]) # Voy de la posición 0 a la 8 de 2 en 2
print(cad6[8:0:-1]) # Voy de la posición 8 a la 0 de uno en uno pero al revés
print(cad6[:4]) # Va desde el principio hasta la posición 4
print(cad6[4:]) # Va desde la posición 4 hasta el final
print(cad6[::-1]) # Invierte la cadena
invpalabras=""
for palabra in cad6.split():
invpalabras+=palabra[::-1]+" "
print(invpalabras)
Ejercicios argumentos variables
# vamos a crear una función a la que le pasamos una cantidad variable # de números y nos dice cuantos pares hay # contarPares(1,2,3)->1 contarPares(1,2,4,6)-> 3 # documentadla # Vamos a crear una función a la que le pasemos una cantidad variable de números # y nos diga la cantidad de aprobados (valor>=5) # aprobados(3,6,7,5)->3 aprobados(7,1,2,9)->2 #documentadla
Recursión en Python
Enlaces de más sencillo a más complicado:
https://www.programiz.com/python-programming/recursion