{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Genómica Computacional\n", "## Práctica 02 - Herramientas bioinformáticas (Python)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "El material de esta práctica está basado en el curso \"Aprendiendo Python\" de ATGenomics. Son una startup mexicana especializada en bioinformática, biología computacional e investigación biomédica y clínica. Imparten varios talleres sobre llamado de variantes, metabarcoding, etc. Pueden encontrar más sobre ellos en `http://atgenomics.com/` y sus redes sociales. \n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ¿Qué es Python?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python es un lenguaje de programación **multipropósito, interpretado, interactivo, orientado a objetos y de alto nivel.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Python es fácil de usar" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Es un lenguaje multiplataforma\n", "* Es un lenguaje *open-source*\n", "* Tiene una comunidad muy grande\n", "* Tiene capacidades de desarrollo *back-end* y *front-end*\n", "* Posee infiidad de paquetes (pip y conda)\n", "* Pocas y simples líneas de código\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Pero \"difícil\" de aprender\n", "\n", "![title](imgs/cat.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ¿Cómo puedo aprender a programar?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![title](imgs/learning.jpeg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ¿Cómo usar Python?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* A través del intérprete\n", "\n", " * Sesión interactiva de `python`, también llamada *python shell* (>>>)\n", " * Utilizando el interprete en terminal *(scripting mode):* `python hello.py`\n", " \n", "* Utilizando \"*Interactive Python*\"\n", "\n", " * Una sesión interactiva *IPython* en terminal (In[1]:)\n", " * Una sesión en IPython notebook, conocida como `jupyter notebook`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(\"Hello world!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# El ecosistema de Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Gestor de paquetes local `pip`\n", "* Otros gestores como: Conda (MiniConda o Anaconda) -> gestionar paquetes que no son de Python\n", "\n", "![title](imgs/ecosistemas.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Aprendiendo Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El día de hoy aprenderemos los siguientes conceptos:\n", "\n", "\n", "* Objeto\n", "* Variable\n", "* Operador\n", "* Función\n", "* Método\n", "* Condicionales" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En Python, **todo es un objeto**. Así como en el español cada cosa/chunche/objeto es un sustantivo, designan todos los cosos que nos rodean, en Python todo es un objeto, un sustantivo. \n", "\n", "**Cada objeto tiene atributos y clases**. Los diferentes modelos de carro pertenecen a la clase \"automovil\", y tienen diferentes atributos como el color, el tamaño, el número de puertas, potencia del motor, etc. De la misma manera las personas pertenecen a la clase \"humanos\" con diferentes atributos.\n", "\n", "En Python, las **variables** hacen referencia a objetos y cualquier variable puede referencias cualquier objeto." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cada variable, tiene un nombre y un valor." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "nombre_de_la_variable = valor_de_la_variable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esto se llama, **declar variables**.\n", "\n", "![SegmentLocal](imgs/mind.gif \"segment\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos utilizar varios estilos para nombrar una variable." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "edad = 1\n", "Edad = 2\n", "eDad = 3\n", "EDAD = 4\n", "e_d_a_d = 5\n", "_edad = 6\n", "edad_ = 7\n", "_EDAD_ = 8\n", "__edad__ = 9\n", "MiEdad = 10\n", "MIEDAD = 11\n", "miEdad = 12\n", "mi_edad = 13\n", "Mi_Edad = 14" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nombre = \"Marisol\" " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(nombre)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(edad, Edad, eDad, EDAD, e_d_a_d, _edad, edad_)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(_EDAD_, __edad__, MiEdad, MIEDAD, miEdad, mi_edad, Mi_Edad)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Estos formatos están prohibidos:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "3edad = 12\n", "e-d-a-d = 13\n", "mi.edad = 14" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sol = \"Marisol\"\n", "nombre = sol\n", "print(nombre)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "name02 = \"sol\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algunas consideraciones que tener en mente para nombrar variables:\n", "\n", "* El nombre de la variable debe ser descriptivo de la información contenida por la variable. \n", "* Define el nombre de las variables para ser leído. Una prioridad en la escritura de código es qué tan fácil se puede entender. \n", "* Adopta [convenciones estándar](https://www.python.org/dev/peps/pep-0008/#id42) para nombrar tus variables en lugar de usar diferestes estrategias para cada variable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay algunas palabras que están reservadas y no se deben de utilizar para nombrar variables\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Podemos agregar comentarios a nuestro código\n", "# Debe de haber un espacio antes y después de la asignación con =\n", "# varESPACIO=ESPACIOvalue" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\"\"\"\n", "O bien podemos agregar múltiples líneas, \n", "también llamadas docstring.\n", "\n", "Pues bien, yo necesito decirte que te quiero\n", "Decirte que te adoro con todo el corazón\n", "Que es mucho lo que sufro, que es mucho lo que lloro\n", "Que ya no puedo tanto y al grito en que te imploro\n", "Te imploro y te hablo en nombre de mi última ilusión\n", "\"\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tipos de datos básicos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Números enteros (*integer*)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 24" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 28304993837383839393" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Números decimales (*float*)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b = 3.14" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Operadores aritméticos" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador Suma\n", "\n", "a = 3\n", "b = 2\n", "c = a + b" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(5 + 6)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador Resta\n", "\n", "a = 4\n", "b = 7\n", "c = a - b" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador Negación\n", "\n", "a = 5\n", "b = -a\n", "c = b - 4" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(b)\n", "print(c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador Multiplicación\n", "\n", "a = 2\n", "b = 6\n", "c = a * b" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador Exponente\n", "\n", "a = 2\n", "b = 4\n", "c = a ** b " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador división\n", "\n", "a = 3.5\n", "b = 4\n", "c = 2\n", "d = a / c\n", "e = b / c" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(d)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(e)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador división entera\n", "\n", "f = a // c\n", "g = b // c" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(f)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(g)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "Tip: \n", " \n", "Se puede convertir un float a int con la función `int()` y de int a float con `float()`. Cuando se mezclan tipos de números, Python convierte todos los operandos al tipo más complejo de entre los tipos de los operandos.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Operador Módulo\n", "\n", "a = 7 % 2\n", "b = 8 % 3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 5.6\n", "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(int(a))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Orden de precedencia**\n", "\n", "El orden de precedencia de ejecución de los operadores aritméticos es:\n", "\n", "* Exponente: `**`\n", "* Negación: `-`\n", "* Multiplicación, División, División entera, Módulo: `*`, `/`, `//`, `%`\n", "* Suma, Resta: `+`, `-`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Funciones y métodos integradas (_built-in_) que utilizaremos\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Nos indica el tipo de un objeto\n", "type()\n", "\n", "# Obtiene el número de elementos de un objeto\n", "len()\n", "\n", "# Método que nos muestra la ayuda de funciones, métodos, módulos\n", "help()\n", "\n", "# Regresa una versión en cadena (string) de un objeto\n", "str()\n", "\n", "# Regresa una versión en número (int) de un objeto\n", "int()\n", "\n", "# Regresa una secuencia inmutable de números entre un rango de números enteros.\n", "range()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "number = \"10\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(number)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "Tip: Para diferenciar entre método y funcion, generalmente la mayoría sigue la siguiente sintaxis: `function()` y `something.method()`.\n", "\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los métodos son mejores cuando se aplican a ciertor objetos. Las funciones son mejores cuando se aplican a múltiples objetos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Existen más funciones _built-in_ disponibles en: https://docs.python.org/3/library/functions.html\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cadena de texto (*strings*)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las cadenas no son más que texto encerrado entre comillas simples (`‘cadena’`) o dobles (`“cadena”`). Dentro de las comillas se pueden añadir caracteres especiales escapándolos con `\\`, como `\\n`, el carácter de nueva línea, o `\\t`, el de tabulación." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = \"uno\"\n", "b = \"dos\"\n", "c = \"tres\"\n", "d = a + b + c" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(a)\n", "print(b)\n", "print(c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(d)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(a + \" \" + b + \" \" + c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(a + \"\\t\" + b + \"\\t\" + c)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "number = \"3.14\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(number)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(number)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "float(number)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "type(float(number))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Slicing (:)**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "texto = \"Tres tristes tigres tragaban trigo en un trigal\"" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tres tristes tigres tragaban trigo en un trigal\n" ] } ], "source": [ "print(texto)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Tre'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "texto[0:3]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'es tristes tigres tragaban trigo en un trigal'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "texto[2:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**index**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'s'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "texto[8]" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "texto[inicio:final] # ítems desde el principio hasta el final\n", "texto[inicio:] # ítems desde el inicio hasta el final\n", "texto[:final] # ítems desde el inicio hasta el final\n", "texto[:] # Una copia de todos los elementos de la cadena de texto\n", "\n", "texto[-1] # último elemento de la cadena de textolast item in the array\n", "texto[-2:] # Los últimos dos elementos de la cadena de texto\n", "texto[:-2] # Todo excepto los últimos dos elementos" ] }, { "cell_type": "raw", "metadata": {}, "source": [ " +---+---+---+---+---+---+---+---+---+---+\n", " | G | e | n | o | m | i | c | a | F | C | \n", " +---+---+---+---+---+---+---+---+---+---+\n", "Slice position 0 1 2 3 4 5 6 7 8 9 \n", "Negative Slice -10 -9 -8 -7 -6 -5 -4 -3 -2 -1\n", "Index position 0 1 2 3 4 5 6 7 8 9" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "palabra = \"GenomicaFC\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'GenomicaF'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "palabra[0:9]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "palabra[::-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Booleanos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una variable de tipo booleano sólo puede tener dos valores: `True` (cierto) y `False` (falso). Estos\n", "valores son especialmente importantes para las expresiones condicionales y los bucles, como veremos más adelante." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Operadores lógicos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "r = True\n", "s = False\n", "\n", "test_and = r and s\n", "test_or = r or s\n", "test_not = not r" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(test_and)\n", "print(test_or)\n", "print(test_not)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Operadores relacionales" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# == Igual que\n", "r = 4 == 5\n", "print(r)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# != Distinto que\n", "r = 5 != 3\n", "print(r)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# < Menor que\n", "r = 3 < 6\n", "print(r)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nombre = \"Marisol\" == \"Sol\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(nombre)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# > Mayor que\n", "r = 6 > 9\n", "print(r)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# <= Menor o igual que\n", "r = 9 <= 2\n", "print(r)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# >= Mayor o igual que\n", "r = 5 >= 5\n", "print(r)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Control de flujo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.\n", "Las estructuras que se ejecutan de acuerdo a condiciones se les denomina **condicionales**. En Python definen mediante el uso de tres palabras claves reservadas: `if` (si), `elif` (sino, si) y `else`. (sino)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "Advertencia: En Python no existen inicios o finales explícitos para sus comandos u ordenes, tampoco se utilizan llaves con las que delimitar donde empieza o termina el código que forma parte de un comando u orden. Los únicos delimitadores existentes son dos puntos ( : ) y la **indentación (“sangrado”)** del código. Se recomienda usar un sólo formato, ya sea tabuladores o espacios, siempre en la misma proporcion en todo el documentos.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**if**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 12\n", "if (a < 20) == True:\n", " print('a es menor que 20')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 12\n", "if a < 20:\n", " print('a es menor que 20')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 12\n", "if a > 20:\n", " print('a es menor que 20')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**if..else**" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cruzar la calle\n" ] } ], "source": [ "# Si el semáforo esta en verde, cruzar la calle. Sino, esperate. \n", "\n", "semaforo = True\n", "verde = True\n", "\n", "if semaforo == verde: \n", " print(\"Cruzar la calle\")\n", "else: \n", " print(\"Espera\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Espera\n" ] } ], "source": [ "semaforo = True\n", "verde = False\n", "\n", "if semaforo == verde: \n", " print(\"Cruzar la calle\")\n", "else: \n", " print(\"Espera\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**if..elif..else**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Si gasto hasta $100, pago con dinero en efectivo\n", "# Si gasto más de $100 pero menos de $300, pago con tarjeta de débito\n", "# Si no, pago con tarjeta de crédito.\n", "\n", "compra = 325\n", "\n", "if compra <= 100: \n", " print(\"Pago en efectivo\")\n", "elif compra > 100 and compra < 300: \n", " print(\"Pago con tarjeta de débito\")\n", "else: \n", " print(\"Pago con tarjeta de crédito\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Python permite dos operadores relacionales directos sin utilizar operador lógico.\n", "compra = 301\n", "if compra <= 100: \n", " print(\"Pago en efectivo\")\n", "elif 300 > compra > 100: \n", " print(\"Pago con tarjeta de débito\")\n", "else: \n", " print(\"Pago con tarjeta de crédito\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }