Introducción

Python es un lenguaje de programación interpretado de alto nivel, creado por Guido van Rossum en 1991 y basado en la simplicidad y legibilidad del código. Permite programar en distintos paradigmas (imperativo, orientado a objetos y funcional) y cuenta con una amplia comunidad y miles de librerías, lo que lo hace muy utilizado en áreas como el desarrollo web, la ciencia de datos, la inteligencia artificial y la automatización.

Características de Python

Códigos en Python:

Python Version

##importamos paquetes
import sys
import platform

##solo python version
platform.python_version()
## '3.13.2'
#Información completa

print("Versión de Python:", sys.version)
## Versión de Python: 3.13.2 (tags/v3.13.2:4f8bb39, Feb  4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)]
print("Info del sistema:", platform.uname())
## Info del sistema: uname_result(system='Windows', node='Cynthia🍓', release='11', version='10.0.26100', machine='AMD64')

Directorio de Trabajo

##Importar paquete
import os
# Observar el directorio actual
os.getcwd()
## 'C:\\Users\\USUARIO\\Documents\\JHOVANA\\clase de progrmación'
# Cambiar el directorio
os.chdir("C:/Users/USUARIO/Documents/JHOVANA/clase de progrmación")

os.getcwd()
## 'C:\\Users\\USUARIO\\Documents\\JHOVANA\\clase de progrmación'

Operaciones Básicas

# Suma
15+7
## 22
# Resta
85-0.9
## 84.1
# Multiplicación
9*9
## 81
# División
17/6
## 2.8333333333333335
# Paréntesis modifica el orden
9*2/(4-2)
## 9.0
# Potenciación
2**3
## 8
# Resto y división entera
56%4
## 0
12//4
## 3

Funciones matemáticas

#importamos paquete
import math
# Raíz cuadrada
math.sqrt(50)
## 7.0710678118654755
# Valor absoluto
abs(-128)
## 128
# Funciones trigonométricas
math.sin(math.pi/3)
## 0.8660254037844386
math.cos(math.pi)
## -1.0
# Logaritmos
math.log(20)       # log natural
## 2.995732273553991
math.log10(1000)   # log base 10
## 3.0
math.log(32, 2)    # log base 2
## 5.0
# Exponencial
math.exp(2)
## 7.38905609893065
# Redondeo
round(math.pi, 3)
## 3.142

Notación ciéntifica

# Número grande
123456789012345
## 123456789012345
# Número muy pequeño
0.0000000001234
## 1.234e-10
# Forzar notación científica
"{:e}".format(987654)
## '9.876540e+05'
# Suprimir notación científica
"{:,}".format(123456789012345)
## '123,456,789,012,345'

###en python ya no necesitas "restaurar" la notación ciéntifica, esto debido a que no cambia "globlalmente" cómo en pyhton, sino al número que deseas aplicar la notación ciéntifica

sistema de ayuda

help(math.sqrt)
## Help on built-in function sqrt in module math:
## 
## sqrt(x, /)
##     Return the square root of x.
help(round)
## Help on built-in function round in module builtins:
## 
## round(number, ndigits=None)
##     Round a number to a given precision in decimal digits.
## 
##     The return value is an integer if ndigits is omitted or None.  Otherwise
##     the return value has the same type as the number.  ndigits may be negative.
help(abs)
## Help on built-in function abs in module builtins:
## 
## abs(x, /)
##     Return the absolute value of the argument.

Aplicaciones numéricas, Aritmética y Asignación

Asignación

x = 77
print(x)
## 77
y = 88
y
## 88
a, b = 33, 44
a, b
## (33, 44)
(z := 111)
## 111

###Palabras reservadas

import keyword
print(keyword.kwlist)
## ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

Gestión del workspace

# Listar todas las variables definidas (similar a ls())
print(dir())
## ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'keyword', 'math', 'os', 'platform', 'r', 'sys', 'x', 'y', 'z']
# Información sobre un objeto (similar a str(x))
x = 123
print(type(x))   # tipo de dato
## <class 'int'>
print(x)         # valor
## 123
# Eliminar un objeto específico (similar a rm(y))
y = 456
print(y)
## 456
del y
# print(y)  # Esto daría error porque ya no existe

# Eliminar todo (similar a rm(list=ls()))
for name in list(globals().keys()):
    if not name.startswith("__"):  # no borrar cosas internas de Python
        del globals()[name]

print(dir())  # ahora solo quedan los objetos internos
## ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'name']

Vectores y Escalares

Escalar

edad = 30

##Vector

# Creación de lista de enteros
vector = [2, 4, 6, 8, 10]
vector
## [2, 4, 6, 8, 10]
# Lista de caracteres
frutas = ["manzana", "pera", "uva"]
frutas
## ['manzana', 'pera', 'uva']
# Lista a partir de cálculos
import math
vector3 = [20+5, math.sqrt(49), abs(-90), 144/12]
vector3
## [25, 7.0, 90, 12.0]
# Combinar listas
v1 = [3, 6, 9]
v2 = [12, 15, 18]
v3 = v1 + v2
v3
## [3, 6, 9, 12, 15, 18]
vector4 = [123, "Python", 7.89]
vector4
## [123, 'Python', 7.89]

Secuencias

list(range(1, 11))       # 1 al 10
## [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(15, 9, -1))   # descendente
## [15, 14, 13, 12, 11, 10]
list(range(-5, 6))       # negativos a positivos
## [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Función de repetición

[42]*5
## [42, 42, 42, 42, 42]
["A", "B"]*3
## ['A', 'B', 'A', 'B', 'A', 'B']

Indexación

vector5 = [10, 20, 30, 40, 50, 60]

vector5[0]      # primer elemento
## 10
vector5[2]      # tercer elemento
## 30
vector5[1:5]    # del 2 al 5
## [20, 30, 40, 50]
[vector5[i] for i in [0, 3, 5]]  # 1ro, 4to y 6to
## [10, 40, 60]
vector5[::-1]   # inverso
## [60, 50, 40, 30, 20, 10]

Matrices y Arreglos

##Importamos paquete
import numpy as np
matriz = np.arange(10, 26).reshape(4,4)
matriz
## array([[10, 11, 12, 13],
##        [14, 15, 16, 17],
##        [18, 19, 20, 21],
##        [22, 23, 24, 25]])
##Entonces:
matriz.shape
## (4, 4)
matriz.shape[0]
## 4
matriz.shape[1]
## 4
matriz2 = np.arange(50, 70).reshape(4,5)
matriz2
## array([[50, 51, 52, 53, 54],
##        [55, 56, 57, 58, 59],
##        [60, 61, 62, 63, 64],
##        [65, 66, 67, 68, 69]])
matriz2[0,2]   # elemento (1,3)
## np.int64(52)
matriz2[3,4]   # elemento (4,5)
## np.int64(69)

Broadcasting (operaciones)

matriz2 + 10
## array([[60, 61, 62, 63, 64],
##        [65, 66, 67, 68, 69],
##        [70, 71, 72, 73, 74],
##        [75, 76, 77, 78, 79]])
matriz2**2
## array([[2500, 2601, 2704, 2809, 2916],
##        [3025, 3136, 3249, 3364, 3481],
##        [3600, 3721, 3844, 3969, 4096],
##        [4225, 4356, 4489, 4624, 4761]])
# Multiplicación matricial
matriz1 = np.arange(1,13).reshape(4,3)
matriz2 = np.arange(13,25).reshape(3,4)
matriz1 @ matriz2
## array([[110, 116, 122, 128],
##        [263, 278, 293, 308],
##        [416, 440, 464, 488],
##        [569, 602, 635, 668]])

Dataframes

##Aññadimos en la consola el paquete pandas para poder usarlo reticulate::py_install("pandas")
##Importamos los paquetes a usar
import pandas as pd
import numpy as np
##Entonces:
df = pd.DataFrame(np.arange(1,17).reshape(4,4))
df
##     0   1   2   3
## 0   1   2   3   4
## 1   5   6   7   8
## 2   9  10  11  12
## 3  13  14  15  16
##Importamos de nuevo
import pandas as pd
##Entonces
df = pd.DataFrame({"nombre":["Jhovana","Cynthia","Flor"], "edad":[20,22,23]})
df
##     nombre  edad
## 0  Jhovana    20
## 1  Cynthia    22
## 2     Flor    23