💻
Quimioinformática
GitHub
  • 📖Quimioinformática aplicada al diseño de fármacos
  • 🔎1. Búsqueda de información química
    • 📑1.1 SciFinder-n
    • 📑1.2 Web of Science
    • 📑1.3 Scopus
    • 📑1.4 CAS Source Index (CASSI)
    • 📑1.5 Herramientas de visualización bibliométrica
  • 🐍2. Introducción a Python, Google Colab y Linux
    • 💻2.1 Fundamentos de programación
    • 🧹2.2 Manejo y limpieza de datos
    • 🐧2.3 Linux
      • 🪟2.3.1 Subsistema de Windows para Linux (WSL)
        • 👩‍💻2.3.1.1 Creación de usuarios
        • 🧑‍💻2.3.1.2 Selección de usuario de inicio por defecto
        • 🐍2.3.1.3 Instalación de Python, pip3 y VSCode desde WSL
        • 🔰2.3.1.4 Instalación de Anaconda desde WSL
        • ⚗️2.3.1.5 RDKit e instalación de ambientes
      • 👩‍✈️2.3.2 Comandos Linux
        • 📂2.3.2.1 Comandos de navegación
        • 💽2.3.2.2 Exploración y manipulación de archivos
    • 📚Recursos y ejercicios
  • 🧑‍🔬3. Representación molecular
    • 💻3.1 SMILES
    • 💻3.2 SMARTS
    • 💻3.3 InChI Keys
    • 📚Recursos y ejercicios
  • 🔎4. Bases de datos moleculares
    • 💊4.1 PubChem
      • 4.1.1 API
    • 💊4.2 ChEMBL
      • 4.2.1 API
    • 💊4.3 DrugBank
    • 💊4.4 ZINC
    • 💊4.5 ChemSpider
    • 📚Recursos y ejercicios
  • 🗃️5. Construcción y curado de bases de datos moleculares
    • 🧱5.1 Construcción de bases de datos
    • 🧹5.2 Curado de bases de datos
    • 📚Recursos y ejercicios
  • 📊6. Análisis y visualización de información química
    • ✍️6.1 Descriptores moleculares
      • 📈6.1.2 Principios para el Análisis de Bases de Datos Moleculares
      • 🔎6.1.3 Caso de estudio
    • ⚛️6.2 Espacio químico
      • 🎨6.2.1 Multiverso químico y "Chemical art gallery"
    • 📊Recursos y ejercicios
  • 🪞7. Similitud química
    • 🔢7.1 Representación molecular
    • 💱7.2 Función de similitud
    • 📉7.3 Estudios cuantitativos de relación estructura-actividad (QSAR)
    • 🏞️7.4 Panorama y acantilados de actividad
    • 📚Recursos y ejercicios
  • ⚗️8. Enumeración de bibliotecas químicas
    • 👩‍🔬8.1 Reacciones químicas
    • 👨‍🔬8.2 Reglas de transformación
    • 📚Recursos y ejercicios
  • 🔐9. Acoplamiento molecular
    • 9.1 LeDock
    • 9.2 AutoDock Vina
      • 📖9.2.1 Tutorial de acoplamiento
Powered by GitBook
On this page
  • Tipos de datos
  • Variables
  • Operadores
  • Control de flujo y ciclos
  • Funciones
  • Librerías
  • Para saber más:
  1. 2. Introducción a Python, Google Colab y Linux

2.1 Fundamentos de programación

Conceptos básicos para comenzar a escribir código en Python.

Para que los códigos desarrollados en este manual sean comprendidos, es necesario que el usuario se familiarice con conceptos y términos básicos de la programación con Python, expuestos a continuación.

Tipos de datos

Números

  • Integers: los números enteros no tienen decimales, pero sí pueden contener signo y estar expresados en alguna base distinta de la usual (base 10).

Números enteros.
2 
1
3
500
0
  • Floating point: los números en punto flotante tienen parte decimal.

Números decimales o fraccionarios.
4.5
0.9999999999999999
3.1515641846168486416849          
  • Boolean: funcionan como valores lógicos y sólo pueden tomar el valor de verdadero o falso.

Valores lógicos.
True
False

Cadenas de texto

Un valor de texto es un string.

Para escribir una cadena de texto en Python basta con rodear los caracteres con comillas simples o doble.

Cadenas de texto.
# Creando una cadena de texto
"Cadena de texto"
"Moléculas"
"Átomo"
"Elemento"

Listas

Las listas son tipos de datos que permiten almacenar múltiples elementos en una sola variable. Los elementos están ordenados y se pueden cambiar después de la creación de la lista. Es decir, las listas son mutables.

Listas.
# Creación de una lista:
empty_list = []    # creación de una lista sin valores 
languages = ['Python', 'Ruby', 'Javascript']      # ejemplos de lenguajes de programación.
Numeros_enteros_lista = [0, 1, 1, 2, 3, 5, 8, 13]   # lista de números enteros

Cada elemento tiene un índice, el primer elemento tiene índice [0], el segundo elemento tiene índice [1], y así sucesivamente.

Funcionamiento de índices en listas.

>>> shopping = [Agua, Huevos, Aceite]
>>> shopping[0]
	Agua	
>>> shopping[1]
	Huevos	
>>> shopping[2]
	Aceite	
>>> shopping[-1] # acceso con índice negativo
	Aceite	

Tuplas

El concepto de tupla es muy similar al de lista. Aunque hay algunas diferencias menores, lo fundamental es que, mientras una lista es mutable y se puede modificar, una tupla no admite cambios y por lo tanto, es inmutable.

Tuplas.
# Creación de una tupla
empty_tuple = ()

elementos = ("Hidrógeno", "Litio", "Aluminio")
elementos
('Hidrógeno', 'Litio', 'Aluminio')

Diccionarios

Se puede trasladar el concepto de diccionario de la vida real al de diccionario en Python. Al fin y al cabo un diccionario es un objeto que contiene palabras, y cada palabra tiene asociado un significado. Haciendo el paralelismo, diríamos que en Python un diccionario es también un objeto indexado por claves (las palabras) que tienen asociados unos valores (los significados).

Diccionarios.
# Creación de un diccionario:
dic_empty = {} # Creación de un diccionario vacío

elementos_1 = { "Hidrógeno": 1, 
                 "Carbono":  12,
                 "Azufre":   32,
                 }    # Creación de un diccionario con elementos            

Variables

Una variable es un nombre que se le asigna a un valor determinado. Dicha variable puede contener cualquier tipo de valor, como números y cadenas de texto.

Nombramiento de variables.
# Asignar variables 
x = 5    # en este caso a la variable "x" se le asigna un valor de 5.
variable_1 = "moléculas"    # en este caso a la "variable_1" se le asigna una cadena de texto como valor. 
elementos_123 = ["Hidrógeno", "Litio"]   # Lista
elementos_abc = ("Hidrógeno", "Litio")     # Tupla     

Las convenciones de nomenclatura de variables en Python son las siguientes:

  • No puede comenzar con un número.

  • Debe ser una sola palabra.

  • Debe constar únicamente de letras y símbolos.

  • Las variables en Python que comienzan con _ (guión bajo) se consideran "inútiles".

  • No pueden ser una palabra reservada del lenguaje "keywords".

La Figura 1 resume palabras reservadas de Python.

La Tabla 1 lista ejemplos de variables con nombres inválidos.

Tabla 1. Ejemplos de nombramiento de variables

Válido
Inválido
Razón

a

3

Empieza por un dígito

a3

3a

Empieza por un dígito

a_b_c___95

another-name

Contiene un carácter no permitido

_abc

with

Es una palabra reservada del lenguaje

_3a

3_a

Empieza por un dígito

Nota: Se recomienda utilizar nombres que describan el contenido de la variable, evitando nombres demasiado largos.

Operadores

Existen varios operadores que pueden ser utilizados de manera inmediata en Python. La Tabla 2 lista el uso de operadores aritméticos comunes.

Tabla 2. Operadores aritméticos

Operador
Descripción
Uso

+

Realiza adición entre los operandos

12 +3 = 15

-

Realiza sustracción entre los operandos

12 -3 = 9

*

Realiza multiplicación entre los operandos

12 * 3= 36

/

Realiza división entre los operandos

12/3 = 4

%

Realiza división entre los operandos

16 % 3 = 1

**

Realiza la potencia de los operandos

12** 3 = 1728

//

Realiza la división con resultado de número entero

18 // 5 = 3

Operadores.
# Uso de operadores:
 
>>> 2 + 8 + 4
    14
>>> 4 ** 4
    256
>>> 7 / 3
    2.3333333333333335
>>> 7 // 3
    2

La Tabla 3 lista los operadores de comparación y la tabla Tabla 4 los operadores lógicos. En la Figura 7 se encuentran los operadores de pertenencia y en la Figura 8 los de identidad.

Tabla 3. Operadores de comparación

Operador
Descriptor
Ejemplo

==

¿son iguales a y b?

5 == 3

False

!=

¿son distintos a y b?

5 != 3

True

<

¿es a menor que b?

5 < 3

False

>

¿es a mayor que b?

5 > 3

True

<=

¿es a menor o igual que b?

5 <= 5

True

>=

¿es a mayor o igual que b?

5 >= 3

True

Operadores de comparación.
>>> 6.6 == 5.5
    False
>>> 5 > 3
    True

Tabla 4. Operadores lógicos

Operador
Descripción
Ejemplo

or

OR. Solo se evalúa el segundo operando si el primero es falso

a or b

Si a es falso devuelve b

Si no devuelve a

and

AND. Solo se evalúa el segundo operando si el primero es verdadero

a and b

Si a es falso devuelve a

Si no devuelve b

not

Tiene menos prioridad que otros operadores

not a

Si a es falso devuelve True

Si no devuelve False

Cuando realizamos operaciones con valores lógicos es importante tomar en cuenta las tablas de verdad.

Operadores con valores lógicos.
>>> x = True
>>> y = False
>>> x or y
    True 
>>> x and y
    False
>>> not x
    False

Tabla 5. Operadores de pertenencia

Operador
Descripción

in

Devuelve True si el valor se encuentra en una secuencia; false en caso contrario.

not in

Devuelve True si el valor no se encuentra en una secuencia, False en caso contrario.

Operadores de pertenencia.
>>> Metales = ["Oro", "Plata"]
>>> "Niquel" in Metales
    False

Tabla 6. Operadores de identidad

Operador
Descripción

is

Devuelve True si ambos operandos hacen referencia al mismo objeto; false en caso contrario.

is not

Devuleve True si ambos operandos no hacen referencia al mismo objeto; False en caso contrario.

Operadores de identidad.
>>> x = 4 
>>> y = 2
>>> list = [1, 6]
>>> x is list
    False
>>> x is 4
    True

Control de flujo y ciclos

Todo programa informático está formado por instrucciones que se ejecutan en forma secuencial de «arriba» a «abajo». Este orden constituye el llamado flujo del programa. Es posible modificar este flujo secuencial para que tome bifurcaciones o repita ciertas instrucciones. Las sentencias que nos permiten hacer estas modificaciones se engloban en el control de flujo.

Enunciado If

En su escritura debemos añadir una expresión de comparación terminando con dos puntos al final de la línea.

Enunciado "If".
>>> temperatura = 36
>>> if temperatura > 35:   # dos puntos finales al final de la línea de código
       print("Temperatura elevada")  
        
Temperatura elevada

En el caso anterior se puede ver claramente que la condición se cumple y por tanto se ejecuta la instrucción que tenemos dentro del cuerpo de la condición. Pero podría no ser así. Para controlar ese caso existe la sentencia else. Veamos el siguiente ejemplo:

Enunciado Else

Enunciado Else.
>>> temperatura = 34
>>> if temperatura > 35:   # dos puntos finales al final de la línea de código
       print("Temperatura elevada")
    else:
       print("Temperatura normal")
       
Temperatura normal

Se pueden tener ciclos anidados:

CIclos anidados.
# Control de temperatura 
>>> T_1 = 28
>>> if T_1 < 20:
       if   T_1 < 10:
              print("Nivel azul")
       else: 
              print("Nivel verde")
>>> else:
         if T_1 < 30:
              print("Nivel naranja")
         else:
              print("Nivel rojo")

 Nivel naranja

Python ofrece una mejora en la escritura de condiciones anidadas cuando aparecen consecutivamente un else y un if. Podemos sustituirlos por la sentencia elif.

A continuación se muestra el ejemplo anterior, pero con el uso del enunciado elif.

Ciclo anidado con elif.
# Control de temperatura 
>>> T_1 = 28
>>> if T_1 < 20:
       if   T_1 < 10:
              print("Nivel azul")
       else: 
              print("Nivel verde")
>>> elif T_1 < 30:
         print("Nivel naranja")
    else:
         print("Nivel rojo")

 Nivel naranja

Enunciado While

El primer mecanismo que existe en Python para repetir instrucciones es usar la sentencia while. La semántica tras esta sentencia es: «Mientras se cumpla la condición, haz algo».

Enunciado While.
>>> cuenta = 0
>>> while cuenta < 5:
    cuenta += 1
    print(cuenta)
1
2
3
4
5  # Se detiene en '5' porque es hasta ese valor que
   # se cumple la instrucción indicada. 

Python ofrece la posibilidad de romper o finalizar un bucle antes de que se cumpla con el enunciado break.

Ciclo while con ruptura usando enunciado break.
>>> cuenta = 0
>>> while cuenta < 5:
    cuenta += 1
    if cuenta == 3:
        break
>>> print("El ciclo se acabó en el valor:", cuenta)     

EL ciclo se acabó en el valor: 3

Enunciado For

Python permite recorrer aquellos tipos de datos que sean iterables. Ejemplos de tipos y estructuras de datos que permiten ser iteradas (recorridas) son: cadenas de texto, listas o diccionarios.

La sentencia for permite realizar esta acción:

Enunciado For.
>>> palabra = "elemento"
for letra in palabra:
    print(letra)

e
l
e
m
e
n
t
o

En cada iteración, cada uno de los elementos de la variable que especifiquemos se va recorriendo. En este caso concreto "letra" va tomando cada una de las letras que existen en la variable "palabra", porque una cadena de texto está formada por elementos que son caracteres.

Como ocurría en el caso de los ciclos while, el enunciado break también se puede usar para detener las iteraciones durante un ciclo for.

Rompimiento de un ciclo for usando el enunciado break.
>>> palabra = "elemento"
for letra in palabra:
    if letra == "m":
        break 
    print(letra)

e
l
e   # el ciclo se detiene antes de llegar a la letra 'm'

Funciones

El concepto de función es básico en prácticamente cualquier lenguaje de programación. Se trata de una estructura que nos permite agrupar código y tiene dos objetivos:

  1. No repetir fragmentos de código durante nuestro programa.

  2. Reutilizar el código para distintas situaciones.

Una función viene definida por su nombre, sus parámetros y su valor de retorno (Figura 2).

Para definir una función utilizamos la palabra reservada def seguida del nombre de la función. A continuación, aparecerán 0 o más parámetros separados por comas (entre paréntesis), finalizando la línea con dos puntos. En la siguiente línea empezaría el cuerpo de la función que puede contener una o más sentencias, incluyendo una sentencia de retorno con el resultado mediante el enunciado return.

Funciones.
>>> def saludar():
    print("¡Buen día!")
>>> saludar()
¡Buen día!

Las funciones pueden retornar (o «devolver») un valor.

Uso del return en funciones.
>>> def uno():
        return 1
>>> uno()
1

Los parámetros permiten variar los datos que consume una función para obtener distintos resultados. Vamos a empezar a crear funciones que reciben parámetros. En este caso escribiremos una función que recibe un valor numérico y devuelve su raíz cuadrada.

Uso de parámetros al implementar funciones.
>>> def raizcuadrada(valor)
        return valor ** (1/2)
        
>>> raizcuadrada(4) #Llamando a la función con el parámetro "4"
2

Librerías

Las librerías son un conjunto de funcionalidades que permiten al usuario llevar a cabo acciones específicas que no están en Python en primera instancia. Para poder hacer uso de las librerías necesitamos importarlas. Existe una gran variedad de librerías, cada una centrada en un campo de aplicación en específico (Figura 3).

Para saber más sobre los usos de una librería podemos leer en su documentación. A continuación, un ejemplo de cómo instalar librerías y su respectivo uso dentro del código. Se muestra cómo instalar e importar la librería Matplotlib que se utiliza principalmente para la visualización de datos, entre otras aplicaciones:

Instalación de librerías.
!pip install matplotlib     # esta instrucción instala la paquetería 
import matplotlib.pyplot as plt    # con esta instrucción se importa la función de 
                                   # graficar añadida en la libería de Matplotlib

Para saber más:

Previous2. Introducción a Python, Google Colab y LinuxNext2.2 Manejo y limpieza de datos

Last updated 11 months ago

Python, Beginner´s Guide, Non Programmers. Fecha de acceso: Diciembre de 2023.

PY4E - Python for Everybody. , , Fecha de acceso: Diciembre de 2023.

Matemáticas básicas para problemas químicos a través de Python, Sim-FQ. Fecha de acceso: Mayo de 2024.

🐍
💻
https://wiki.python.org/moin/BeginnersGuide/NonProgrammers
https://www.py4e.com/book
https://www.py4e.com/lessons
https://online.umich.edu/series/python-for-everybody/
https://www.sim-fq.com/python-en-qu%C3%ADmica
Figura 1. Palabras reservadas de Python.
Figura 2. Sintaxis para la escritura de funciones en Python.
Figura 3. Ejemplos de librerías en Python.