[Go to site: main page, start]

0% encontró este documento útil (0 votos)
12 vistas185 páginas

Actividades de Algoritmos para Niños

El documento define conceptos básicos de programación como código fuente, programa y lenguajes de programación. Explica que la programación implica dar instrucciones a una computadora y que existen diferentes tipos de lenguajes como ensamblador, de alto, medio y bajo nivel, compilados e interpretados. También describe las diferencias entre desarrollo front-end y back-end.

Cargado por

mendozafernandad
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
12 vistas185 páginas

Actividades de Algoritmos para Niños

El documento define conceptos básicos de programación como código fuente, programa y lenguajes de programación. Explica que la programación implica dar instrucciones a una computadora y que existen diferentes tipos de lenguajes como ensamblador, de alto, medio y bajo nivel, compilados e interpretados. También describe las diferencias entre desarrollo front-end y back-end.

Cargado por

mendozafernandad
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

DEFINICIONES BÁSICAS

PROGRAMACIÓN

• Es la actividad humana general que implica el acto de extender o


modificar la funcionalidad de un sistema, se puede considerar como
una forma de decirle a una computadora como debe de hacer su
trabajo.
Para la programación se requieren dos partes esenciales: la tecnología y su fundamento científico. Las
herramientas, técnicas prácticas y estándares que nos permiten programar integran la tecnología,
mientras que el fundamento científico o la ciencia que se integra en la programación, consiste en una
amplia y profunda teoría con poder predictivo, que nos permite entender la programación.

Por lo anterior podemos decir que el código computacional que integra un programa es un conjunto de
enunciados (o sentencias) y cada uno de estos enunciados dirige a la computadora para que realice
un paso sencillo o instrucción; por ende, cada uno de estos pasos es muy preciso.
CÓDIGO FUENTE

• El código fuente del programa son las instrucciones que debe seguir un
programa y que están escritas en un lenguaje de programación específico.
PROGRAMA

• Un programa se define como una colección de instrucciones que le dicen a la


computadora qué hacer.
En resumen, un programa le dice a una computadora como aceptar cierto tipo de entrada (datos), manipular
esa entrada y devolver algún tipo de salida en alguna forma que sea útil acorde a la finalidad para la que se
desarrolló el programa.

Es importante entender que una computadora no hará nada sin alguien diciéndole que hacer, por lo que es
necesario que se use un programa para brindarle las instrucciones exactas de lo que requerimos que haga.
El código puede ser de distintos sabores, es decir, puede ser escrito en diferentes lenguajes de programación. Estos lenguajes son similares a los idiomas que
hablamos y algunas de las características que comparten son:
• Funcionalidad en todos los lenguajes. Todos los lenguajes de programación pueden crear una funcionalidad similar.
• Sintaxis y estructura. Los comandos en los lenguajes de programación pueden superponerse al igual que las palabras en los idiomas hablados se
superponen.
• Ciclo de vida. Los lenguajes de programación nacen cuando un programador piensa en una forma nueva o más fácil de expresar un concepto
computacional. Si otros programadores están de acuerdo, adoptan el lenguaje para sus propios programas, y el lenguaje de programación se propaga. Sin
embargo, al igual que el latín o el arameo, si el lenguaje de programación no es adoptado por otros programadores o aparece un lenguaje mejor, entonces
el lenguaje de programación muere lentamente por falta de uso.

Y difieren de los idiomas hablados en aspectos como:


• Pueden ser creados por una sola persona en un periodo de tiempo corto.
• Están escritos en Inglés. A diferencia de los idiomas hablados, casi todos los lenguajes de programación están escritos en Inglés, ya que usan por lo
general las mismas palabras clave y sintaxis en Inglés en su código. Existen lenguajes de programación escritos en otros idiomas, pero no han sido
ampliamente propagados ni son de los más populares.
Existen múltiples lenguajes de programación entre los cuales se puede elegir para la realización de un programa o
aplicación, ya que cada uno sirve para un propósito en específico y las personas se encuentran constantemente
creando nuevos lenguajes de programación para resolver distintos tipos de problemas. Al final, esto no afecta el
desarrollo de aplicaciones debido a que las computadoras solo comprenden un lenguaje, el cual consiste en ceros y
unos, conocido como lenguaje máquina o código máquina.

El propósito de un lenguaje de programación es hacer el proceso de programar más sencillo, por lo que en lugar
de que los programadores escriban código compuesto por 0s y 1s, se puede elegir entre varios de ellos, el que
represente la opción más sencilla para solucionar un problema específico.
TIPOS DE LENGUAJES DE
PROGRAMACIÓN
LENGUAJE ENSAMBLADOR

• El lenguaje ensamblador usa comandos cortos y fáciles de recordar con nombres como JMP, MOV y
ADD. El lenguaje ensamblador es un atajo de teclear múltiples comandos en lenguaje máquina. Como
resultado, el código fuente en lenguaje ensamblador es más corto y fácil de escribir, leer y modificar
que el código en lenguaje máquina.

• Como la computadora solo entiende lenguaje máquina, los programadores escribieron programas
especiales que traducen y convierten comandos en lenguaje ensamblador a sus equivalentes en
lenguaje máquina. Estos programas especiales son conocidos como ensambladores.

• Si bien el lenguaje ensamblador es más fácil de leer y escribir que el lenguaje máquina, también crea
lenguajes más grandes y lentos que el lenguaje máquina, que utilizan más espacio en disco y memoria,
además de que no son fácilmente portables entre computadoras y el desarrollo en lenguaje
ensamblador generalmente es muy tardado y tedioso.
LENGUAJES DE ALTO, MEDIO Y
BAJO NIVEL
Los lenguajes de bajo nivel interactúan directamente con el procesador de la computadora o la CPU, son capaces de
ejecutar comandos muy básicos y generalmente son difíciles de leer. El código de máquina, otro ejemplo de lenguaje de
bajo nivel, usa código que consta de solo dos números, 0 y 1.

Los lenguajes de medio nivel, como el lenguaje C, suelen ser clasificados como de alto nivel, su característica es que
permiten ciertos manejos de bajo y alto nivel. Por ejemplo, una característica de C es el uso de "apuntadores", útiles en
implementación de algoritmos de listas ligadas, tablas hash, búsqueda y ordenamiento que para lenguajes de alto nivel es
difícil implementar.

Por el contrario, los lenguajes de alto nivel utilizan el lenguaje natural que más se aproximan al lenguaje humano (por lo
general inglés), por lo que es más fácil para las personas leer y escribir. Una vez que el código se escribe en un lenguaje
de alto nivel, como C++, Python o Ruby, un intérprete o compilador debe traducir este lenguaje de alto nivel en un
código de bajo nivel que una computadora pueda entender.
LENGUAJES COMPILADOS Y DE
SCRIPTING
Los lenguajes interpretados o de scripting se consideran más portátiles que los
lenguajes compilados, mientras que los lenguajes compilados se ejecutan más rápido
que los lenguajes interpretados. Sin embargo, la ventaja de la velocidad de los
lenguajes compilados comienza a perder importancia, ya que la mejora en las
velocidades del procesador hace que las diferencias de rendimiento entre los lenguajes
interpretados y compilados sean insignificantes.

Lenguajes de programación de alto nivel como JavaScript, Python y Ruby son lenguajes
interpretados. Para estos lenguajes, el intérprete ejecuta el programa directamente,
traduciendo cada declaración una línea a la vez en código máquina.

Lenguajes de programación de alto nivel como C++, COBOL y Visual Basic son lenguajes
compilados. Para estos lenguajes, después de escribir el código, un compilador traduce
todo el código al código de la máquina y se crea un archivo ejecutable. Este archivo
ejecutable se puede distribuir a través de Internet, CD-ROM u otros medios y se ejecuta
en cualquier equipo. El software que se instala en una computadora, como Microsoft
Windows o Mac OS X, está codificado utilizando lenguajes compilados, generalmente C o
C++.
LENGUAJES DE PROGRAMACIÓN Y
LENGUAJES DE MARCADO
Un lenguaje de marcado es aquel que es usado para representar datos estructurados. Por ejemplo,
HTML tiene etiquetas para especificar que una parte del documento es el título y otra parte es una
lista. Los lenguajes de marcado no son considerados lenguajes de programación.
La diferencia entre un lenguaje de programación y un lenguaje de marcado no siempre son obvias. Por
ejemplo XSLT (eXtensible Stylesheet Language Transformations) es un lenguaje para transformar XML
(eXtensible Markup Language) en otros formatos como HTML, texto plano, que después pueden ser
convertidos en otros formatos como PDF.

Los lenguajes de programación son lenguajes que codifican programas. Codificar significa que una palabra
en el lenguaje puede interpretarse como un programa (una secuencia de acciones). Los lenguajes de
programación de computadoras son un subconjunto de estos.
PROGRAMACIÓN FRONT-END,
BACK-END Y FULLSTACK
FRONT-END

• Los proyectos pueden involucrar a desarrolladores front-end, que escriben código para
diseñar la apariencia de la aplicación, y desarrolladores back-end, que codifican la lógica
y crean bases de datos.
• El desarrollo front-end se encarga de la interfaz del usuario (UI - User Interface), por
ejemplo, en un sitio web, el desarrollo front-end se encarga de todo lo que se puede
ver en el sitio como imágenes, fotos, menú de navegación, botones, etc. El front-end
también es llamado el "lado del cliente" por el lugar donde se llevan a cabo las
acciones.
• Ejemplos de lenguajes de programación front-end son HTML, CSS, JavaScript.
BACK-END

• El desarrollo back-end se encarga de todo aquello que el usuario no puede ver, es un


conjunto de servidores, bases de datos, APIs (Application Programming Interface) y
sistemas operativos que dan potencia un desarrollo front-end. El front-end también
es llamado el "lado del servidor" por el lugar donde se llevan a cabo las acciones.
• Ejemplos de lenguajes de programación back-end son Java, Ruby, Python, PHP.
• Un desarrollador "full stack"es aquel que puede hacer desarrollo tanto front-end
como back-end.
• En proyectos grandes, es más común ver desarrolladores front-end y back-end
especializados, junto con gerentes de proyecto que se aseguran de que todos se
comuniquen entre sí y cumplan con el cronograma para que el proyecto finalice a
tiempo.
ESTRUCTURAS DE DATOS
• Las estructuras de datos son formas organizadas de almacenar y gestionar
datos en un programa informático. Estas estructuras permiten la manipulación
eficiente, el acceso y el almacenamiento de datos de acuerdo con ciertas
necesidades y operaciones específicas. Las estructuras de datos son esenciales
en la programación y se utilizan para resolver una variedad de problemas.
Python ofrece una variedad de estructuras de datos incorporadas que
permiten almacenar y manipular datos de diferentes maneras. Algunas de las
estructuras de datos más comunes en Python incluyen:

• Tuplas
• Listas
• Conjuntos
• Diccionarios
• Estructuras anidadas
TUPLAS

• Una tupla es una estructura de datos en Python similar a una lista en el sentido
de que puede contener una colección de elementos. La principal diferencia es
que las tuplas son inmutables, lo que significa que una vez que se crean, no
pueden modificarse. Las listas, por otro lado, son mutables y pueden cambiar su
contenido.
• Las tuplas se crean utilizando paréntesis () y pueden contener cero o más
elementos, separados por comas. Por ejemplo:
mi_tupla = (1, 2, 3, "cuatro")
• También puedes crear una tupla sin paréntesis, simplemente separando los
elementos por comas:
otra_tupla = 1, 2, 3, "cuatro"
• Características clave de las tuplas:
1. Inmutabilidad: Como se mencionó anteriormente, las tuplas son inmutables. Esto
significa que no puedes cambiar, agregar o eliminar elementos una vez que se ha
creado una tupla. Esto es útil cuando deseas asegurarte de que los datos no se
modifiquen accidentalmente.
2. Orden: Las tuplas mantienen el orden de los elementos, lo que significa que los
elementos se almacenan y recuperan en el mismo orden en que se agregaron a la
tupla.
3. Indexación y segmentación: Puedes acceder a los elementos de una tupla utilizando
índices, al igual que en las listas. Por ejemplo, mi_tupla[0] devolverá el primer
elemento de la tupla.
4. Heterogeneidad: Las tuplas pueden contener elementos de diferentes tipos, como
números, cadenas, listas u otras tuplas.
• Usos comunes de las tuplas:
• Las tuplas se utilizan a menudo cuando deseas representar una colección de valores
relacionados que no deberían cambiarse. Algunos ejemplos de uso común de las
tuplas incluyen:
• Representación de coordenadas (por ejemplo, (x, y)) en un plano.
• Almacenamiento de información sobre fechas, como (año, mes, día).
• Devolución múltiple de valores desde una función (una función puede devolver una
tupla de valores).
• Acceso a datos de las tuplas
thistuple = ("apple", "banana", "cherry")
thistuple[1]
• Desempaquetar tuplas
fruits = ("apple", "banana", "cherry")
(green, yellow, red) = fruits
print(green)
print(yellow)
print(red)
• Ciclos en tuplas
thistuple = ("apple", "banana", "cherry")
for x in thistuple:
print(x)
• Concatenar Tuplas
tuple1 = ("a", "b" , "c")
tuple2 = (1, 2, 3)
tuple3 = tuple1 + tuple2
print(tuple3)
• Multiplicar Tuplas:
fruits = ("apple", "banana", "cherry")
mytuple = fruits * 2
print(mytuple)
• Metodos de las tuplas:
count() retorna el número de ocurrencias de un valor
index() retorna el indice de la primer ocurrecia con el valor dado
• En caso de ser requerido la actualización de una tupla puede hacerse el type
cast a lista y regresarlo a tupla para su actualización

thistuple = ("apple", "banana", "cherry")


y = list(thistuple)
[Link]("orange")
thistuple = tuple(y)
SET (CONJUNTOS)
• En Python, un conjunto es una colección
desordenada de elementos únicos. Los
conjuntos se utilizan cuando necesitas
almacenar una colección de elementos en la
que no te importa el orden y quieres
asegurarte de que no haya elementos
duplicados.
• Puedes crear un conjunto utilizando llaves {} o set().

frutas = {"manzana", "plátano", "naranja"}

colores = set(["rojo", "verde", "azul"])


• Los conjuntos no son indexados, por lo que no puedes
acceder a sus elementos mediante índices. En cambio,
puedes verificar si un elemento está presente en un
conjunto utilizando el operador in.

if "manzana" in frutas:
print("La manzana está en el conjunto de frutas.")
• Puedes obtener los elementos de un conjunto en Python
de varias formas. Los conjuntos en Python son iterables, lo
que significa que puedes recorrerlos utilizando bucles o
convertirlos en una lista o tupla si deseas obtener una
estructura de datos que admita indexación. Aquí tienes
algunas formas de obtener los elementos de un conjunto:

frutas = {"manzana", "plátano", "naranja"}


for fruta in frutas:
print(fruta)
• Agregar Elementos
Puedes agregar elementos a un conjunto utilizando el método add().
[Link]("pera")
• Eliminar Elementos
Puedes eliminar elementos de un conjunto utilizando el método remove()
o discard().
La diferencia principal entre ellos es que remove() generará un error si el
elemento no está en el conjunto, mientras que discard() no generará un
error.
[Link]("naranja")
[Link]("uva")
• Unión de Conjuntos
Puedes realizar una unión entre dos conjuntos utilizando el método
union() o el operador |.

conjunto1 = {1, 2, 3}
conjunto2 = {3, 4, 5}
union = [Link](conjunto2)
union = conjunto1 | conjunto2
• Intersección de Conjuntos
Puedes encontrar la intersección entre dos conjuntos utilizando el
método intersection() o el operador &.
interseccion = [Link](conjunto2)
interseccion = conjunto1 & conjunto2
• Diferencia de Conjuntos
Puedes encontrar la diferencia entre dos conjuntos utilizando el
método difference().

diferencia = [Link](conjunto2)
• Comprobar si un Conjunto es Subconjunto
Puedes verificar si un conjunto es un subconjunto de otro
utilizando el método issubset()

es_subconjunto = [Link](conjunto2)
DICCIONARIOS


En Python, un diccionario es una estructura de datos que almacena pares clave-
valor. Cada elemento en un diccionario consiste en una clave única asociada a
un valor correspondiente. Los diccionarios son extremadamente útiles cuando
necesitas asociar datos de manera que puedas acceder rápidamente a un valor
utilizando su clave en lugar de recorrer una lista o una tupla para encontrarlo.
• Puedes crear un diccionario utilizando llaves {} y especificando pares clave-
valor separados por dos puntos :

mi_diccionario = {"nombre": "Juan", "edad": 30, "ciudad": "Ejemploville"}

• Puedes acceder a los valores de un diccionario utilizando su clave. Por ejemplo:

nombre = mi_diccionario["nombre"]
edad = mi_diccionario["edad"]

• Puedes cambiar el valor asociado a una clave en un diccionario de la siguiente


manera:
mi_diccionario["edad"] = 31
• Puedes agregar nuevos pares clave-valor a un diccionario de la siguiente
manera:
mi_diccionario["profesion"] = ”Richard”

• Puedes eliminar un par clave-valor de un diccionario utilizando la palabra clave


del seguida de la clave que deseas eliminar. Por ejemplo:
del mi_diccionario["ciudad"]

• Puedes verificar si una clave específica existe en un diccionario utilizando el


operador in. Por ejemplo:
if "edad" in mi_diccionario:
print("La clave 'edad' existe en el diccionario.")
• Puedes recorrer un diccionario utilizando bucles for para acceder a sus claves
y valores. Por ejemplo:
for clave, valor in mi_diccionario.items():
print(f"Clave: {clave},Valor: {valor}")
• Diccionarios dentro de diccionarios
myfamily = {
"child1" : {
"name" : "Emil",
"year" : 2004
},
"child2" : {
"name" : "Tobias",
"year" : 2007
},
"child3" : {
"name" : "Linus",
"year" : 2011
}
}
clear() Removes all the elements from the dictionary

copy() Returns a copy of the dictionary


fromkeys() Returns a dictionary with the specified keys and value

get() Returns the value of the specified key


items() Returns a list containing a tuple for each key value pair

keys() Returns a list containing the dictionary's keys


pop() Removes the element with the specified key
popitem() Removes the last inserted key-value pair
setdefault() Returns the value of the specified key. If the key does not exist:
insert the key, with the specified value

update() Updates the dictionary with the specified key-value pairs

values() Returns a list of all the values in the dictionary


FUNCIONES
¿QUE ES UNA FUNCIÓN?

• Una función es un bloque de código reutilizable que realiza una tarea específica
cuando se llama.
• Las funciones se utilizan para descomponer programas en partes más pequeñas
y manejables.
VENTAJAS DE UTILIZAR FUNCIONES

• Reutilización de código.
• Facilita el mantenimiento.
• Divide un problema en partes más pequeñas y manejables. (Divide y
vencerás)
• Mejora la legibilidad del código.
¿COMO CREO UNA FUNCIÓN?

• Definir una función con la palabra clave def.


• Nombre de la función seguido de paréntesis y dos puntos.
• Cuerpo de la función indentado.

def saludar():
print("¡Hola, mundo!")

saludar() # Llama a la función "saludar"


ARGUMENTOS

• La información se puede pasar a las funciones como argumentos.


• Los argumentos se especifican después del nombre de la función, entre
paréntesis. Puedes añadir tantos argumentos como quieras, solo tienes que
separarlos con una coma.

def saludar(nombre):
print("¡Hola, ” + nombre)

saludar(“Richard”) # Llama a la función "saludar"


¿PARÁMETROS O ARGUMENTOS?

• Los términos parámetro y argumento se pueden usar para lo mismo:


información que se pasa a una función.
• Desde la perspectiva de una función:
• Un parámetro es la variable que aparece entre paréntesis en la definición de la
función.
• Un argumento es el valor que se envía a la función cuando se llama.
NÚMERO DE ARGUMENTOS

• De forma predeterminada, se debe llamar a una función con el número


correcto de argumentos. Lo que significa que, si tu función espera 2
argumentos, tienes que llamar a la función con 2 argumentos, no más y no
menos.

def saludar(nombre, apellido):


print("¡Hola, ” + nombre + apellido)

saludar(“Richard”, “Rodriguez”) # Llama a la función "saludar"


ARGUMENTOS DEFAULT

• Las funciones pueden contener argumentos default, estos argumentos tienen


un valor predeterminado en caso de que cuando se mande a llamar la función
y no manden dicho parámetro toma el valor default
def myFunc(país = “México”)
print(país)
myFunc() # México
ARGUMENTOS ARBITRARIOS

• En Python, los "arbitrary arguments" se refieren a parámetros de funciones que


permiten a una función aceptar un número variable de argumentos sin tener
que definir una cantidad fija de parámetros. Esto se logra mediante el uso de
un asterisco (*) antes del nombre del parámetro en la definición de la función.
Hay dos tipos de parámetros "arbitrarios" en Python:
• args (Argumentos posicionales arbitrarios):
• *args permite que una función acepte un número variable de argumentos
posicionales.
• Los argumentos pasados a *args se recopilan en una tupla, lo que permite a la función
iterar sobre ellos o realizar otras operaciones.
• Puedes nombrar *args como desees, pero por convención, se utiliza "*args" para que
sea más claro su propósito.

def suma(*args):
total = 0
for numero in args:
total += numero
return total

resultado = suma(1, 2, 3, 4, 5)
print(resultado) # Salida: 15
• **kwargs (Argumentos de palabra clave arbitrarios):
• **kwargs permite que una función acepte un número variable de argumentos de
palabra clave, es decir, argumentos pasados como pares clave-valor.
• Los argumentos pasados a **kwargs se recopilan en un diccionario, lo que permite a
la función acceder a ellos mediante sus nombres de clave.
• Puedes nombrar **kwargs como desees, pero por convención, se utiliza "**kwargs"
para que sea más claro su propósito.

def imprimir_datos(**kwargs):
for clave, valor in [Link]():
print(f"{clave}: {valor}")

imprimir_datos(nombre="Juan", edad=30, ciudad="Madrid")


# Salida:
# nombre: Juan
# edad: 30
# ciudad: Madrid
• Estos parámetros "arbitrarios" son útiles cuando no sabes de antemano
cuántos argumentos se pasarán a la función o cuando se necesita flexibilidad en
la llamada de la función. Los nombres *args y **kwargs no son palabras clave
especiales, pero son una convención ampliamente aceptada en la comunidad de
Python. Puedes usar otros nombres si lo prefieres, pero es importante seguir
esta convención para facilitar la comprensión del código.
VALORES DE RETORNO

• Para dejar que una función devuelva un valor, utilice la instrucción return:

def my_function(x):
return 5 * x

print(my_function(3))
LAMBDAS


En Python, una función lambda, a menudo llamada "lambda", es una función
anónima y pequeña que se puede definir en una sola línea. Las funciones
lambda son útiles cuando necesitas una función temporal para realizar una
operación simple y no deseas definir una función completa con un nombre.

lambda argumentos: expresión


lambda argumentos: expresión

• argumentos: Los argumentos son las variables que la función lambda toma
como entrada. Puedes tener cero o más argumentos separados por comas,
pero generalmente se usan uno o dos.
• expresión: La expresión es la operación que se realiza en la función lambda. El
resultado de esta expresión es lo que devuelve la función lambda.
suma = lambda x, y: x + y
resultado = suma(3, 4)
print(resultado) # Salida: 7
FUNCIONES RETORNANDO LAMBDAS

• El poder de lambda se muestra mejor cuando los usas como una función
anónima dentro de otra función.
• Digamos que tienes una definición de función que toma un argumento, y ese
argumento se multiplicará por un número desconocido:

def myfunc(n):
return lambda a : a * n

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11))
print(mytripler(11))
RECURSIVIDAD

• La recursividad en Python (y en la programación en general) se refiere a la


técnica en la que una función se llama a sí misma para resolver un problema. En
otras palabras, una función recursiva se divide en subproblemas más pequeños
hasta que se alcanza un caso base, momento en el cual la función comienza a
regresar valores y resolver los subproblemas para obtener la solución final.
Para entender la recursividad en Python, aquí hay un ejemplo clásico de una función recursiva que
calcula el factorial de un número:

def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
• En este ejemplo, la función factorial toma un argumento n. Si n es igual a 0, la
función retorna 1 (el caso base). Si n es diferente de 0, la función se llama a sí
misma con n - 1 y multiplica el resultado por n. Esto se repite hasta que n llega
a 0 y se resuelven todas las llamadas recursivas, generando el resultado final.

• Caso base: Es la condición que detiene la recursión. En el ejemplo anterior, el


caso base es cuando n es igual a 0.
• Llamada recursiva: La función se llama a sí misma con un argumento diferente
en cada iteración, acercándose al caso base. En el ejemplo, la llamada recursiva
es factorial(n - 1).

Es esencial tener cuidado al usar recursividad para asegurarse de que se alcance


el caso base en algún momento y no se caiga en un bucle infinito.
ALGORITMOS DE PROGRAMACIÓN

Los algoritmos de programación son un conjunto de instrucciones o pasos ordenados que se utilizan para
realizar una tarea o resolver un problema específico en un programa de computadora. Los algoritmos son
esenciales en la programación y forman la base para la creación de software eficiente y funcional. Aquí hay
algunos aspectos clave sobre los algoritmos de programación:

• Secuencia de Pasos: Un algoritmo se compone de una secuencia lógica y ordenada de pasos que se deben seguir para
llevar a cabo una tarea. Estos pasos deben ser precisos y claros.
• Entrada y Salida: Un algoritmo generalmente toma ciertos datos como entrada, los procesa de acuerdo con los pasos
definidos y produce una salida o resultado.
• Resolución de Problemas: Los algoritmos se utilizan para resolver una variedad de problemas, desde tareas sencillas como
ordenar una lista de números hasta problemas más complejos, como la búsqueda de la ruta más corta en un mapa.
• Eficiencia: La eficiencia de un algoritmo se refiere a la cantidad de recursos (tiempo y memoria) que consume para llevar a
cabo una tarea. Los programadores buscan algoritmos eficientes para mejorar el rendimiento de sus programas.
• Reutilización: Los algoritmos bien diseñados son reutilizables. Puedes utilizar el mismo algoritmo en diferentes partes de un
programa o incluso en varios programas.
• Dependencia del Contexto: Los algoritmos pueden variar según el lenguaje de programación utilizado y el contexto del
problema que se está resolviendo. Algunos algoritmos son específicos de ciertos problemas o aplicaciones.
• Algoritmos vs. Implementación: Los algoritmos se diferencian de la implementación concreta en un lenguaje de
programación específico. Un algoritmo se puede implementar de diversas formas en diferentes lenguajes.
• Análisis de Algoritmos: El análisis de algoritmos implica estudiar el rendimiento y la eficiencia de un algoritmo. Esto implica
medir su tiempo de ejecución y uso de memoria, y se utiliza para comparar algoritmos y determinar cuál es más adecuado
para una tarea particular.
ALGORITMOS DE ORDENAMIENTO

• En programación, existen varios algoritmos de ordenamiento comunes que se utilizan


para ordenar listas o arreglos de datos. Los algoritmos más comunes incluyen:
• Ordenamiento de Burbuja (Bubble Sort): Este algoritmo compara elementos adyacentes y
los intercambia si están en el orden incorrecto. Repite este proceso hasta que la lista esté
completamente ordenada. Aunque es fácil de entender, no es eficiente para listas grandes.
• Ordenamiento por Inserción (Insertion Sort): El ordenamiento por inserción construye la
lista ordenada uno por uno, comparando cada elemento con los elementos ya ordenados e
insertándolo en la posición correcta. Es eficiente para listas pequeñas.
• Ordenamiento por Selección (Selection Sort): El ordenamiento por selección encuentra el
elemento mínimo de la lista y lo coloca al principio. Luego, busca el segundo elemento mínimo y
lo coloca en la segunda posición, y así sucesivamente.
• Ordenamiento Rápido (Quick Sort): El ordenamiento rápido es un algoritmo de "divide y
vencerás" que divide la lista en dos subarreglos, ordena cada subarreglo de forma recursiva y
luego combina los subarreglos en una lista ordenada. Es eficiente para listas grandes y suele ser
uno de los algoritmos más rápidos en la práctica.
• Ordenamiento de Fusión (Merge Sort): El ordenamiento de fusión también utiliza un enfoque
de "divide y conquistar". Divide la lista en dos mitades, ordena cada mitad de forma recursiva y
luego fusiona las mitades en una lista ordenada. Es eficiente y estable, lo que significa que no cambia
el orden de elementos iguales.
• Ordenamiento por Cuenta (Counting Sort): Este algoritmo es eficiente para listas con un
rango limitado de valores enteros. Cuenta la frecuencia de cada valor y luego construye una lista
ordenada a partir de estas frecuencias. Es particularmente rápido cuando se trabaja con números
enteros no negativos.
• Ordenamiento por Radix (Radix Sort): Radix Sort es un algoritmo especializado que se
utiliza para ordenar enteros. Ordena los números por sus dígitos de manera iterativa, comenzando
desde el dígito menos significativo hasta el más significativo.
• Ordenamiento por Burbuja Optimizado (Optimized Bubble Sort): Es una mejora del
ordenamiento de burbuja que incluye una bandera para verificar si se ha realizado algún
intercambio en una pasada. Si no se realiza ningún intercambio en una pasada, la lista ya está
ordenada y se sale del bucle, lo que mejora la eficiencia.
• Ordenamiento Timsort: Timsort es un algoritmo de ordenamiento híbrido utilizado en Python.
Combina las técnicas del ordenamiento rápido y el ordenamiento por inserción. Es eficiente y se
adapta bien a diversos tipos de datos y tamaños de lista.
ORDENAMIENTO DE BURBUJA
(BUBBLE SORT):

• El ordenamiento de burbuja compara elementos adyacentes y los intercambia


si están en el orden incorrecto. Este proceso se repite hasta que la lista esté
completamente ordenada.
• Este algoritmo obtiene su nombre de la forma con la que suben por la lista los
elementos durante los intercambios, como si fueran pequeñas burbujas.
ORDENAMIENTO POR BURBUJA
OPTIMIZADO (OPTIMIZED BUBBLE SORT):

• Es una mejora del ordenamiento de burbuja que incluye una bandera para
verificar si se ha realizado algún intercambio en una pasada. Si no se realiza
ningún intercambio en una pasada, la lista ya está ordenada y se sale del bucle,
lo que mejora la eficiencia.
ORDENAMIENTO POR INSERCIÓN
(INSERTION SORT):

• Es un método simple y eficiente para ordenar una lista de elementos. Funciona


construyendo una lista ordenada en una parte del arreglo y recorriendo el
resto del arreglo, uno por uno, insertando cada elemento en la posición
correcta en la lista ordenada. Es similar a cómo ordenamos cartas en la mano
en un juego de cartas.
1. Aquí está una explicación paso a paso del algoritmo de ordenamiento por
inserción:
2. División de la lista: El arreglo se divide en dos partes: una parte ordenada y una
parte desordenada. Inicialmente, la parte ordenada contiene el primer elemento
del arreglo, y el resto del arreglo se considera desordenado.
3. Selección de un elemento: El algoritmo selecciona un elemento del área
desordenada. Comúnmente, comienza con el segundo elemento (índice 1) del
arreglo.
4. Comparación e inserción: El elemento seleccionado se compara con los
elementos en la parte ordenada. Se desplaza hacia la izquierda en la parte
ordenada hasta encontrar la posición correcta en la que debe ser insertado. Se
realiza una serie de comparaciones y desplazamientos hasta que se encuentra la
posición correcta.
5. Repetición: Se repiten los pasos 2 y 3 hasta que se hayan procesado todos los
elementos en la parte desordenada. El resultado final es una lista ordenada que
contiene todos los elementos del arreglo original.
ORDENAMIENTO POR SELECCIÓN
(SELECTION SORT):

• El ordenamiento por selección encuentra el elemento mínimo de la lista y lo


coloca al principio. Luego, busca el segundo elemento mínimo y lo coloca en la
segunda posición, y así sucesivamente.
1. Inicialización: Al principio, toda la lista se considera como no ordenada. La parte ordenada está vacía.
2. Búsqueda del Elemento Mínimo: El algoritmo busca el elemento más pequeño en la parte no ordenada de la
lista. Comienza asumiendo que el primer elemento de la parte no ordenada es el mínimo.
3. Comparación: Se compara el elemento actual con el mínimo conocido. Si se encuentra un elemento más
pequeño, se actualiza la posición del mínimo conocido.
4. Intercambio: Una vez que se encuenta el elemento mínimo en la parte no ordenada, se intercambia con el
primer elemento de la parte no ordenada. Esto coloca el elemento mínimo en su posición correcta en la
parte ordenada.
5. Actualización de Frontera: La frontera entre la parte ordenada y la parte no ordenada se mueve hacia la
derecha. El elemento más a la izquierda de la parte no ordenada se convierte en parte de la parte ordenada.
6. Repetición: Se repiten los pasos 2 a 5 para el subconjunto no ordenado. En cada iteración, se encuentra el
mínimo en la parte no ordenada y se coloca en la parte ordenada. El proceso continúa hasta que toda la lista
esté ordenada.
ORDENAMIENTO DE FUSIÓN (MERGE
SORT):

• El ordenamiento de fusión también utiliza un enfoque de "divide y conquistar".


Divide la lista en dos mitades, ordena cada mitad de forma recursiva y luego
fusiona las mitades en una lista ordenada. Es eficiente y estable, lo que significa
que no cambia el orden de elementos iguales.
1. División: La lista original se divide en dos mitades aproximadamente iguales. Este proceso
de división se realiza de manera recursiva hasta que cada sublista contenga un solo
elemento, que se considera una lista ordenada.
2. Ordenación: A continuación, se ordenan las sublistas individuales. Esto se hace de manera
recursiva, dividiendo cada sublista en mitades y ordenando esas mitades. Cuando las
sublistas se reducen a un solo elemento (que ya se considera ordenado), comenzamos a
combinarlas.
3. Combinación: Las sublistas ordenadas se combinan de manera que se mantenga el orden
correcto. Se toma el primer elemento de cada sublista y se compara. El elemento más
pequeño se coloca en la lista de resultados. Este proceso de combinación se repite hasta
que todas las sublistas se hayan fusionado en una sola lista ordenada.
4. Resultado: Una vez que todas las sublistas se han combinado en una sola lista, esa lista
resultante estará completamente ordenada.
ORDENAMIENTO RÁPIDO (QUICK
SORT):

• El ordenamiento rápido es un algoritmo de "divide y vencerás" que divide la


lista en dos subarreglos, ordena cada subarreglo de forma recursiva y luego
combina los subarreglos en una lista ordenada. Es eficiente para listas grandes y
suele ser uno de los algoritmos más rápidos en la práctica.
1. Elección del Pivote: Seleccionamos un elemento de la lista como el "pivote". La elección del pivote puede
afectar el rendimiento del algoritmo. Los elementos pueden ser seleccionados al azar, como el primer o el
último elemento de la lista, o utilizando técnicas más avanzadas para mejorar el rendimiento en casos
específicos.
2. Partición: Reorganizamos la lista de manera que todos los elementos menores que el pivote estén a su
izquierda y todos los elementos mayores estén a su derecha. Esto se hace utilizando dos índices, uno que se
mueve desde el principio de la lista hacia la derecha y otro que se mueve desde el final hacia la izquierda.
Cuando ambos índices se cruzan, todos los elementos menores que el pivote están en un lado y todos los
elementos mayores están en el otro.
3. Recursión: Luego, aplicamos el algoritmo Quicksort de manera recursiva a las dos sublistas generadas en el
paso de partición. La sublista de elementos menores que el pivote se ordena y la sublista de elementos mayores
también se ordena.
4. Combinación: No es necesario combinar las sublistas en este algoritmo, ya que los elementos menores y
mayores que el pivote ya están en su lugar después del paso de partición.
5. Repeticiones: El proceso se repite en cada sublista generada en los pasos anteriores, de manera que finalmente
toda la lista esté ordenada.
ALGORITMOS DE BUSQUEDA

• Los algoritmos de búsqueda son técnicas utilizadas en informática y


matemáticas para encontrar elementos específicos en una colección de datos.
Hay varios algoritmos de búsqueda, cada uno con sus propias características y
aplicaciones.
• Los algoritmos de búsqueda más comunes que se utilizan en la programación y la informática incluyen:
• Búsqueda Lineal o Secuencial: Este es uno de los algoritmos más simples y se utiliza ampliamente
en situaciones donde la lista de elementos no está necesariamente ordenada. Es comúnmente utilizado
para buscar elementos en listas pequeñas o no ordenadas.
• Búsqueda Binaria: La búsqueda binaria se aplica cuando la lista de elementos está ordenada. Es uno
de los algoritmos de búsqueda más eficientes, ya que reduce el espacio de búsqueda a la mitad en cada
paso. Se utiliza en situaciones donde se necesita una búsqueda rápida en una lista ordenada.
• Búsqueda por Hash: La búsqueda por hash es común en estructuras de datos como tablas hash.
Proporciona un acceso rápido a los elementos cuando se conoce la clave y se usa ampliamente en
aplicaciones donde se necesita una búsqueda eficiente.
• Búsqueda en Árboles: Los algoritmos de búsqueda en árboles, como la búsqueda en árboles binarios
de búsqueda o la búsqueda en árboles AVL, se utilizan para buscar elementos en estructuras jerárquicas,
como árboles. Son comunes en aplicaciones que involucran bases de datos y estructuras de datos
jerárquicas.
• Búsqueda en Grafos: Los algoritmos de búsqueda en grafos, como la búsqueda en anchura (BFS) y la
búsqueda en profundidad (DFS), se utilizan para encontrar caminos o nodos específicos en grafos. Son
fundamentales en la teoría de grafos y se utilizan en aplicaciones que involucran redes y estructuras de
relaciones.
BÚSQUEDA LINEAL

• La búsqueda lineal, también conocida como "Sequential Search", es un


algoritmo simple para encontrar un elemento específico en una lista o arreglo.
Funciona recorriendo la lista uno por uno hasta que se encuentra el elemento
deseado o se llega al final de la lista
BÚSQUEDA BINARIA

• La búsqueda binaria, también conocida como "Binary Search" en inglés, es un


algoritmo eficiente para encontrar un elemento específico en una lista ordenada.
Funciona dividiendo repetidamente la lista en dos mitades y comparando el
elemento buscado con el elemento del medio. Si el elemento buscado es igual al
elemento del medio, se ha encontrado el objetivo. Si el elemento buscado es
menor que el elemento del medio, la búsqueda continúa en la mitad izquierda de la
lista. Si es mayor, la búsqueda continúa en la mitad derecha. Este proceso se repite
hasta encontrar el elemento deseado o hasta que las mitades se reduzcan a un solo
elemento.
• La búsqueda binaria es muy eficiente debido a que descarta la mitad de los
elementos en cada paso, lo que da como resultado un tiempo de ejecución de
O(log n), donde "n" es el número de elementos en la lista.
BÚSQUEDA POR HASH

• La "Búsqueda por Hash" es una técnica utilizada para buscar elementos en una
estructura de datos llamada tabla hash. Se basa en una función hash que
transforma una clave o valor en una ubicación (índice) en la tabla hash. Esto
permite un acceso rápido a los elementos, ya que puedes calcular
directamente dónde se encuentra un elemento deseado en función de su clave
• Tabla Hash: Una tabla hash es una estructura de datos que consta de un conjunto de "buckets"
o casillas, cada uno con una ubicación única. Cada casilla almacena uno o más elementos,
generalmente representados como pares clave-valor. La clave es lo que se utilizará para realizar
la búsqueda.
• Función Hash: La función hash es el corazón de la búsqueda por hash. Toma una clave como
entrada y calcula un índice o ubicación en la tabla hash donde se almacenará o buscará el
elemento correspondiente. La función hash debe ser determinista, lo que significa que para una
clave dada, siempre generará el mismo índice.
• Inserción: Para insertar un elemento en la tabla hash, se aplica la función hash a su clave para
determinar su ubicación en la tabla y se coloca en ese bucket. Si dos elementos tienen claves
que generan el mismo índice, se produce una colisión, y existen varias estrategias para manejar
estas colisiones, como el encadenamiento (colocar varios elementos en la misma casilla) o la
resolución de colisiones por medio de árboles, entre otras.
• Búsqueda por Hash: Para buscar un elemento en la tabla hash, aplicas la función hash a la clave
del elemento que estás buscando. Esto te lleva directamente a la ubicación donde se supone
que se encuentra el elemento. Luego, puedes recuperar el elemento en esa ubicación.
BÚSQUEDA POR ARBOLES

La búsqueda por árboles es una técnica que se utiliza para buscar elementos
en estructuras de datos basadas en árboles. Un árbol es una estructura
jerárquica que consiste en nodos conectados por ramas. Cada nodo puede
tener cero o más nodos secundarios, y un nodo sin nodos secundarios se
llama nodo hoja. Los árboles son muy utilizados en informática y se aplican
en una variedad de problemas y estructuras de datos, como árboles binarios
de búsqueda, árboles AVL, árboles B, árboles de expresión, árboles de
decisión y otros.
ÁRBOL DE BÚSQUEDA BINARIA

• La búsqueda en árboles binarios se refiere a la búsqueda de un elemento


específico en una estructura de datos llamada "árbol binario". Un árbol binario
es una estructura jerárquica compuesta por nodos, donde cada nodo puede
tener como máximo dos nodos secundarios: un hijo izquierdo y un hijo
derecho. Estos árboles se utilizan comúnmente en informática para organizar
datos y realizar búsquedas eficientes.
Árbol Binario: Comienza desde la raíz del árbol binario. La raíz es el nodo superior desde
el cual se ramifican todos los demás nodos en el árbol.
Comparación de Claves: En cada nodo visitado durante la búsqueda, se compara la clave
del nodo con la clave del elemento que estás buscando. Dependiendo de la comparación, se
decide en qué dirección continuar la búsqueda.
Recorrido del Árbol: El recorrido del árbol se realiza de acuerdo a las reglas de la
estructura del árbol binario. Si la clave buscada es menor que la clave en el nodo actual, la
búsqueda continúa en el subárbol izquierdo. Si es mayor, la búsqueda continúa en el subárbol
derecho.
Búsqueda Exitosa: La búsqueda se detiene cuando encuentras un nodo cuya clave
coincide con la clave buscada. En ese momento, has encontrado el elemento deseado en el
árbol binario.
Búsqueda No Exitosa: Si llegas a un nodo hoja o no encuentras la clave después de seguir
todas las ramas adecuadas, se considera una búsqueda no exitosa y se concluye que el
elemento no existe en el árbol binario.
POO

Programación orientada a objetos


• La POO es una forma de programar que trata de encontrar una solución a
problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya
conocidos.

La POO tiene 4 pilares base los cuales son:


• Abstracción Es cuando separamos los datos de un objeto para luego generar un molde (una
clase).
• Encapsulamiento: Lo puedes utilizar cuando deseas que ciertos métodos o propiedades sean
inviolables o inalterables.
• Herencia: Nos permite crear nuevas clases a partir de otras. Si tuviéramos una clase “Autos”
y quisiéramos crear unas clases “Auto deportivo” o “Auto clásico”, podríamos tomar varias
propiedades y métodos de la clase “Autos”. Esto nos da una jerarquía de padre e hijo.
• Polimorfismo: Proviene de Poli = muchas, morfismo = formas. Se utiliza para crear métodos
con el mismo nombre pero con diferente comportamiento.
POO EN PYTHON

• La Programación Orientada a Objetos (POO) es un paradigma de


programación que se utiliza en Python y en muchos otros lenguajes de
programación. En POO, los programas se organizan en torno a objetos, que
son instancias de clases. Las clases son plantillas o moldes que definen la
estructura y el comportamiento de los objetos.
• Clases y Objetos: Una clase es una definición de un tipo de objeto que especifica los atributos (variables) y
los métodos (funciones) que los objetos de esa clase tendrán. Un objeto es una instancia de una clase. Cada
objeto tiene sus propios valores para los atributos y puede realizar las operaciones definidas por los métodos
de la clase.
• Atributos: Los atributos son variables que están asociadas a una clase y describen las características de un
objeto de esa clase. Por ejemplo, una clase "Persona" podría tener atributos como "nombre" y "edad".
• Métodos: Los métodos son funciones que están asociadas a una clase y definen el comportamiento de los
objetos de esa clase. Por ejemplo, una clase "Coche" podría tener métodos como "arrancar" y "detener".
• Encapsulación: La encapsulación es un principio de la POO que consiste en ocultar los detalles internos de
una clase y proporcionar una interfaz clara y definida para interactuar con los objetos. En Python, esto se logra
mediante la encapsulación de atributos y métodos. Los atributos privados se nombran con un guion bajo al
principio (por ejemplo, _atributo_privado).
• Herencia: La herencia es un mecanismo que permite crear una nueva clase basada en
una clase existente. La nueva clase hereda atributos y métodos de la clase base y puede
agregar o modificar su funcionalidad. Esto promueve la reutilización de código.
• Polimorfismo: El polimorfismo permite que objetos de diferentes clases respondan de
manera similar a un mismo método o función. En Python, esto se logra mediante el uso
de interfaces o clases base comunes.
• Clase y objeto en Python: Para definir una clase en Python, puedes usar la palabra
clave class. Para crear un objeto de una clase, simplemente instancias la clase. Aquí tienes
un ejemplo básico:
TRY EXCEPT

Manejo de excepciones
• El bloque try...except es una estructura en Python que se utiliza para manejar
excepciones. Las excepciones son eventos inesperados que pueden ocurrir
durante la ejecución de un programa y que pueden interrumpir su flujo normal.
Usar try...except te permite detectar estas excepciones y tomar medidas
específicas en caso de que ocurran.
• try es el bloque donde se coloca el código que puede generar una excepción.
• except es el bloque donde se maneja la excepción en caso de que ocurra.
• ExcepcionTipo es el tipo de excepción que deseas capturar. Puede ser el
nombre de una excepción específica (por ejemplo, ZeroDivisionError o
FileNotFoundError) o simplemente Exception para capturar cualquier
excepción.
• En este ejemplo, el código dentro del bloque try solicita al usuario un número
y luego intenta dividir 10 por ese número. Si el usuario ingresa cero, se
generará una excepción ZeroDivisionError, y si ingresa algo que no sea un
número, se generará una excepción ValueError. El bloque except se encarga de
manejar cada tipo de excepción de manera apropiada.
• Es importante notar que puedes tener múltiples bloques except para manejar diferentes
tipos de excepciones o un bloque except genérico para atrapar cualquier excepción no
manejada. Además, puedes usar la palabra clave else después de los bloques except para
ejecutar código cuando no se ha generado ninguna excepción, y finally para ejecutar
código que debe ejecutarse sin importar si se generó una excepción o no.
ARCHIVOS
• Podemos trabajar con archivos para leer y escribir datos en ellos. La
manipulación de archivos es una parte fundamental de la programación, ya que
te permite almacenar y recuperar información de manera persistente
• "r": Lectura (por defecto).
• "w": Escritura (crea un nuevo archivo o sobrescribe uno existente).
• "a": Agregar (agregar contenido al final del archivo).
• "b": Modo binario (por ejemplo, "rb" para lectura binaria).
• Es importante recordar cerrar el archivo después de usarlo para liberar
recursos:
• Para leer el contenido de un archivo abierto, puedes usar varios métodos,
siendo el más común read():
• También puedes leer el archivo línea por línea usando un bucle for:
• Para escribir en un archivo, debes abrirlo en modo escritura "w" o agregar
"a". Puedes usar el método write() para escribir texto en el archivo:

• Ten en cuenta que el modo "w" sobrescribirá el contenido existente, mientras


que el modo "a" agregará contenido al final del archivo.
• Es importante manejar excepciones al trabajar con archivos, ya que pueden
ocurrir errores (por ejemplo, si el archivo no existe). Puedes usar un bloque
try...except para capturar y gestionar estas excepciones.
• Para garantizar que el archivo se cierre incluso si se produce una excepción,
puedes utilizar un bloque try...finally o un bloque with, que es la forma
recomendada de trabajar con archivos en Python:

• El uso de with asegura que el archivo se cierre automáticamente al salir


del bloque, lo que hace que el código sea más limpio y seguro.
EXPRESIONES REGULARES

regex
• Las expresiones regulares, también conocidas como regex, son una poderosa
herramienta para buscar y manipular texto en Python y otros lenguajes de programación.
En Python, puedes trabajar con expresiones regulares utilizando el módulo re. Aquí tienes
una introducción básica sobre cómo utilizar expresiones regulares en Python:
El módulo re proporciona varias funciones útiles para trabajar con expresiones regulares.
Algunas de las más utilizadas son:
• [Link](pattern, string): Busca un patrón en una cadena y devuelve un objeto Match
si encuentra una coincidencia, o None si no lo hace.
• [Link](pattern, string): Busca un patrón al principio de una cadena y devuelve un
objeto Match si encuentra una coincidencia, o None si no lo hace.
• [Link](pattern, string): Encuentra todas las coincidencias del patrón en una cadena y
devuelve una lista de cadenas.
• [Link](pattern, string): Encuentra todas las coincidencias del patrón en una cadena
y devuelve un iterador de objetos Match.
• [Link](pattern, replacement, string): Reemplaza todas las coincidencias del patrón en
una cadena con la cadena de reemplazo especificada.
OS Y SYS
• Los módulos os y sys son dos módulos esenciales en Python que te permiten trabajar con
el sistema operativo y acceder a información relacionada con el sistema, como directorios,
archivos, variables de entorno y argumentos de la línea de comandos.
OS

El módulo os (Operating System) proporciona funciones para interactuar con el


sistema operativo subyacente. Algunas de las tareas comunes que puedes realizar
con el módulo os incluyen:
• Navegar por el sistema de archivos.
• Crear, mover y eliminar directorios y archivos.
• Obtener información sobre archivos y directorios, como rutas absolutas,
tamaños y marcas de tiempo.
• Realizar operaciones relacionadas con procesos, como la creación de
subprocesos.
• Gestionar variables de entorno.
SYS

El módulo sys proporciona acceso a variables y funciones relacionadas con la


configuración del intérprete de Python y los argumentos de la línea de comandos.
Algunas de las tareas comunes que puedes realizar con el módulo sys incluyen:
• Acceder a argumentos de línea de comandos pasados al programa.
• Modificar el comportamiento de la interacción del intérprete de Python.
• Obtener información sobre la versión de Python en uso.
APIS Y JSON
• Las APIs (Application Programming Interfaces) son conjuntos de reglas y
protocolos que permiten que diferentes aplicaciones se comuniquen entre sí.
En Python, puedes interactuar con APIs para acceder a servicios web,
recuperar datos y realizar diversas operaciones. Uno de los formatos de datos
comunes para transmitir información entre aplicaciones es JSON (JavaScript
Object Notation).
• Debes importar los módulos requests y json para trabajar con APIs y JSON en
Python. El módulo requests te permite realizar solicitudes HTTP para acceder
a la API, y el módulo json te ayuda a procesar datos en formato JSON.

import requests
import json
• Utiliza el módulo requests para realizar solicitudes HTTP a una API. Puedes hacer solicitudes
GET, POST, PUT, DELETE y otras, dependiendo de la API y de lo que necesites.
• Una vez que hayas obtenido los datos de la API, generalmente estarán en
formato JSON. Puedes utilizar el módulo json para analizar los datos y trabajar
con ellos en Python.
OPENPYXL
• openpyxl es una biblioteca de Python que te permite trabajar con archivos
Excel (.xlsx). Esta biblioteca es útil para leer y escribir datos en hojas de
cálculo de Excel y realizar operaciones como la creación de nuevas hojas, la
modificación de celdas existentes, la manipulación de gráficos y más.
• pip install openpyxl
MATPLOTLIB
• matplotlib es una biblioteca de visualización de datos en Python que permite
crear gráficos y visualizaciones de alta calidad. Fue creada por John D. Hunter
en 2003 y desde entonces se ha convertido en una de las herramientas más
populares en el ámbito de la visualización de datos en Python. La biblioteca es
ampliamente utilizada en la comunidad científica, en análisis de datos, en la
academia y en la industria.
• Gráficos de Líneas (plot):
[Link](x, y): Crea un gráfico de líneas con los puntos dados por las listas x e y.

• Gráficos de Dispersión (scatter):


[Link](x, y): Crea un gráfico de dispersión con los puntos dados por las listas x e y.

• Histogramas (hist):
[Link](data, bins): Crea un histograma con los datos proporcionados y la cantidad de contenedores
(bins).

• Gráficos de Barras (bar y barh):


[Link](x, height): Crea un gráfico de barras verticales.
[Link](y, width): Crea un gráfico de barras horizontales.
• Gráficos de Pastel (pie):
[Link](sizes, labels): Crea un gráfico de pastel con tamaños y etiquetas proporcionados.

• Personalización de Gráficos:
[Link], [Link]: Agrega etiquetas a los ejes X e Y.
[Link]: Agrega un título al gráfico.
[Link]: Muestra leyendas para identificar diferentes elementos en el gráfico.
[Link]: Agrega cuadrícula al gráfico.
[Link], [Link]: Establece los límites de los ejes X e Y.

• Guardado y Muestra de Gráficos:


[Link](): Muestra el gráfico.
[Link]('nombre_del_archivo.png'): Guarda el gráfico en un archivo.
SYMPY
• SymPy es una biblioteca de Python para matemáticas simbólicas. A diferencia de las bibliotecas
numéricas tradicionales como NumPy o SciPy, que trabajan con valores numéricos, SymPy trabaja
con expresiones simbólicas y permite realizar cálculos algebraicos exactos.
• Variables Simbólicas:
Símbolo (symbols): SymPy permite definir variables simbólicas que pueden ser
utilizadas en cálculos simbólicos.
• Operaciones Básicas:
Álgebra Básica: SymPy puede realizar operaciones algebraicas como sumas,
restas, multiplicaciones y divisiones.
Resolución de Ecuaciones:
• solve: SymPy puede resolver ecuaciones algebraicas.
• Derivación e Integración:
diff y integrate: SymPy puede derivar e integrar expresiones.
• Simplificación de Expresiones:
simplify: SymPy puede simplificar expresiones algebraicas.
• Límites y Series:
limit y series: SymPy puede calcular límites y series de Taylor.
• Ecuaciones Diferenciales:
dsolve: SymPy puede resolver ecuaciones diferenciales.
• Álgebra Lineal:
Matrices y Vectores: SymPy proporciona funciones para trabajar con matrices
y vectores simbólicos.

También podría gustarte