{"id":1808,"date":"2021-09-05T20:48:59","date_gmt":"2021-09-06T02:48:59","guid":{"rendered":"https:\/\/www.jacobsoft.com.mx\/?p=1808"},"modified":"2025-02-20T13:37:47","modified_gmt":"2025-02-20T19:37:47","slug":"tutorial-basico-de-python","status":"publish","type":"post","link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/tutorial-basico-de-python\/","title":{"rendered":"Tutorial B\u00e1sico de Python"},"content":{"rendered":"\n<p>Este es un tutorial b\u00e1sico de Python, un lenguaje interpretado orientado a objetos, que comparte algunas caracter\u00edsticas de los lenguajes de programaci\u00f3n Java y Schema.  El objetivo es entender las bases del lenguaje, su construcci\u00f3n sint\u00e1ctica utilizando algunos ejemplos peque\u00f1os.<\/p>\n\n\n\n<script async=\"\" src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2380084220870127\" crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2380084220870127\" data-ad-slot=\"2437322509\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n de Python y Anaconda<\/h2>\n\n\n\n<p>Para instalar Python, podemos hacerlo de manera individual o a trav\u00e9s del entorno de desarrollo para Data Science <strong><a href=\"https:\/\/www.anaconda.com\/products\/individual\" target=\"_blank\" rel=\"noreferrer noopener\">Anaconda<\/a><\/strong>, el cual incluye Python 3.8 y que permite crear diferentes entornos virtuales cada uno con sus versiones propias para Python y sus dependencias, as\u00ed como librer\u00edas. Lo que permite evitar conflictos entre la versi\u00f3n de Python del sistema operativo y versiones requeridas para diversos proyectos.<\/p>\n\n\n\n<p>Al ingresar al sitio con la siguiente liga: <a href=\"https:\/\/www.anaconda.com\/products\/individual\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.anaconda.com\/products\/individual<\/a> podemos descargar Anaconda para la plataforma que utilizamos: Windows, Mac o Linux.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"587\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-1024x587.png\" alt=\"tutorial b\u00e1sico de python\" class=\"wp-image-1810\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-1024x587.png 1024w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-300x172.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-768x441.png 768w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-330x190.png 330w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-18x10.png 18w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-105x60.png 105w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda.png 1269w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption><sub>P\u00e1gina de descarga de Anaconda<\/sub><\/figcaption><\/figure><\/div>\n\n\n\n<p>Una vez descargado el instalador, \u00fanicamente lo ejecutamos y la instalaci\u00f3n se inicia sin ning\u00fan problema hasta concluir el proceso. Si requerimos alg\u00fan tipo de informaci\u00f3n adicional en relaci\u00f3n a los requerimientos m\u00ednimos del sistema o sobre el proceso, la documentaci\u00f3n de la instalaci\u00f3n se encuentra en la siguiente liga: <a href=\"https:\/\/docs.anaconda.com\/anaconda\/install\/\" target=\"_blank\" rel=\"noreferrer noopener\">Documentaci\u00f3n Instalaci\u00f3n Anaconda<\/a>.<\/p>\n\n\n\n<p>Una vez instalado, podemos usar el interprete de comando de anaconda para probar los ejemplos y la ejecuci\u00f3n del c\u00f3digo. Para abrir el interprete de comandos, en la barra de b\u00fasqueda escribimos Anaconda y en las opciones que aparecen seleccionamos: &#8220;Anaconda Prompt (Ananconda3).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot.png\"><img loading=\"lazy\" decoding=\"async\" width=\"784\" height=\"680\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot.png\" alt=\"Anaconda Prompt\" class=\"wp-image-1814\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot.png 784w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot-300x260.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot-768x666.png 768w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot-14x12.png 14w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Busqueda-Promot-69x60.png 69w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Al seleccionarlo nos abre la ventana del interprete de comandos de Anaconda<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt.png\"><img loading=\"lazy\" decoding=\"async\" width=\"981\" height=\"517\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt.png\" alt=\"Interprete de comandos de Anaconda\" class=\"wp-image-1815\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt.png 981w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt-300x158.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt-768x405.png 768w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt-18x9.png 18w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/Anaconda-Prompt-114x60.png 114w\" sizes=\"auto, (max-width: 981px) 100vw, 981px\" \/><\/a><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Invocando el interprete de comandos de Python<\/h2>\n\n\n\n<p>Para invocar al interprete de comandos de python en la ventana del Prompt de Anaconda, \u00fanicamente ejecutamos <strong>python<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python.png\"><img loading=\"lazy\" decoding=\"async\" width=\"981\" height=\"516\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python.png\" alt=\"\" class=\"wp-image-1818\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python.png 981w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python-300x158.png 300w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python-768x404.png 768w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python-18x9.png 18w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/interprete-python-114x60.png 114w\" sizes=\"auto, (max-width: 981px) 100vw, 981px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Python se puede ejecutar interactivamente desde el interprete de comandos o tambi\u00e9n se puede invocar desde la l\u00ednea de comandos para ejecutar un script. Primero veremos algunos ejemplos desde el interprete.<\/p>\n\n\n\n<p>Al ejecutar el comando python en la l\u00ednea de comandos, estamos invocando al interprete y este responde mostrando la versi\u00f3n de python, la fecha y hora de liberaci\u00f3n de la versi\u00f3n, as\u00ed como informaci\u00f3n adicional y del equipo en el que estamos, finalizando con los s\u00edmbolos <strong>&gt;&gt;&gt;<\/strong> donde podemos ejecutar ahora c\u00f3digo de python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Operadores<\/h2>\n\n\n\n<p>El interprete de python se puede utilizar para evaluar expresiones, por ejemplo, expresiones aritm\u00e9ticas simples. Si escribimos alguna expresi\u00f3n en el prompt <strong>&gt;&gt;&gt;<\/strong> ser\u00e1 evaluado y el resultado se mostrar\u00e1 en la siguiente l\u00ednea:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; 1 + 1\n2\n&gt;&gt;&gt; 2 * 3\n6<\/code><\/pre>\n\n\n\n<p>Los operadores booleanos en python permiten evaluar los valores primitivos <strong>True <\/strong>y <strong>False<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; 1 == 0\nFalse\n&gt;&gt;&gt; not (1 == 0)\nTrue\n&gt;&gt;&gt; (2 == 2) and (2 == 3)\nFalse\n&gt;&gt;&gt; (2 == 2) or (2 == 3)\nTrue<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Strings<\/h2>\n\n\n\n<p>Python maneja un tipo string similar a como se utiliza en Java en donde el poerador <strong>+<\/strong> es utilizado para concatenar valores de tipo string<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; 'inteligencia' + \"artificial\"\n'inteligenciaartificial'<\/code><\/pre>\n\n\n\n<p>El objeto string contiene m\u00e9todos que permiten manipular las cadenas de caracteres<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; 'artificial'.upper()\n'ARTIFICIAL'\n&gt;&gt;&gt; 'Ayuda'.lower()\n'ayuda'\n&gt;&gt;&gt; len('Ayuda')\n5<\/code><\/pre>\n\n\n\n<p>Para encerrar cadenas podemos utilizar comillas simples <strong>&#8216; &#8216;<\/strong> o comillas dobles <strong>&#8221; &#8220;<\/strong>, lo que permite anidar cadenas. Tambi\u00e9n es posible almacenar expresiones en cadenas o strings<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; s = 'hello world'\n&gt;&gt;&gt; print(s)\nhello world\n&gt;&gt;&gt; s.upper()\n'HELLO WORLD'\n&gt;&gt;&gt; len(s.upper())\n11\n&gt;&gt;&gt; num = 8.0\n&gt;&gt;&gt; num += 2.5\n&gt;&gt;&gt; print(num)\n10.5<\/code><\/pre>\n\n\n\n<p>En Python no se necesita declarar variables antes de asignarles un valor. En el ejemplo anterior vemos el uso de las variables <strong>s<\/strong> y <strong>num<\/strong>, las cuales no se declararon previamente.<\/p>\n\n\n\n<p>Para saber que otros m\u00e9todos ofrece python para el manejo de strings y en general para cualquier tipo de dato utilizamos los comandos <strong>dir <\/strong>y <strong>help<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; s = 'abc'\n\n&gt;&gt;&gt; dir(s)\n['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']\n\n&gt;&gt;&gt; help(s.find)\nHelp on built-in function find:\n\nfind(...) method of builtins.str instance\n    S.find(sub[, start[, end]]) -&gt; int\n\n    Return the lowest index in S where substring sub is found,\n    such that sub is contained within S[start:end].  Optional\n    arguments start and end are interpreted as in slice notation.\n\n    Return -1 on failure.\n\n\n&gt;&gt;&gt; s.find('b')\n1<\/code><\/pre>\n\n\n\n<p>En el c\u00f3digo anterior, con el comando <strong>dir <\/strong>obtenemos la lista de m\u00e9todos disponibles para la variable <strong>s<\/strong>, la cual es un string. Con el comando <strong>help <\/strong>obtenemos la ayuda para el m\u00e9todo find (buscar). Dado que la variable <strong>s<\/strong> contienen la cadena &#8216;abc&#8217;, al ejecutar <strong>s<\/strong>.find(&#8216;b&#8217;) obtenemos que el caracter b se encuentra en la posici\u00f3n 1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura de datos<\/h2>\n\n\n\n<p>Python contiene algunas estructuras de datos ya predefinidas en el lenguaje <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">List<\/h3>\n\n\n\n<p>Las listas tipo List contienen una secuencia de elementos mutables (que pueden ser modificados):<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; fruits = ['apple', 'orange', 'pear', 'banana']\n&gt;&gt;&gt; fruits[0]\n'apple'<\/code><\/pre>\n\n\n\n<p>Podemos utilizar el operador <strong>+<\/strong> para realizar una concatenaci\u00f3n de listas<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; otherFruits = ['kiwi', 'strawberry']\n&gt;&gt;&gt; fruits + otherFruits\n&gt;&gt;&gt; ['apple', 'orange', 'pear', 'banana', 'kiwi', 'strawberry']<\/code><\/pre>\n\n\n\n<p>A diferencia de otros lenguajes, Python permite la indexaci\u00f3n negativa para seleccionar desde el final de la lista. Para el ejemplo anterior <strong>fruits[-1]<\/strong> accede o hace referencia al \u00faltimo elemento de la lista, en este caso &#8216;banana&#8217;<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; fruits[-2]\n'pear'\n&gt;&gt;&gt; fruits.pop()\n'banana'\n&gt;&gt;&gt; fruits\n['apple', 'orange', 'pear']\n&gt;&gt;&gt; fruits.append('grapefruit')\n&gt;&gt;&gt; fruits\n['apple', 'orange', 'pear', 'grapefruit']\n&gt;&gt;&gt; fruits[-1] = 'pineapple'\n&gt;&gt;&gt; fruits\n['apple', 'orange', 'pear', 'pineapple']<\/code><\/pre>\n\n\n\n<p>En este ejemplo, el \u00edndice -2 hace referencia al pen\u00faltimo elemento de la lista, es decir, con -1 se accede al \u00faltimo y -2 al que sigue despu\u00e9s del \u00faltimo y as\u00ed sucesivamente. El m\u00e9todo pop() devuelve al \u00faltimo elemento de la lista.<\/p>\n\n\n\n<p>Tambi\u00e9n podemos indexar m\u00faltiples elementos adyacentes utilizando el operador <strong>slice<\/strong> ( <strong>:<\/strong> ) , por ejemplo, fruits[1:3], retorna una lista de elementos en la posici\u00f3n 1 y 2. En general fruits[start:stop] devuelve los elementos que van desde start hasta stop-1 (stop menos uno).<\/p>\n\n\n\n<p>Tambi\u00e9n podemos utilizar fruits[start:] que retorna todos los elementos desde la posici\u00f3n de start hasta el final de la lista. Con la opci\u00f3n fruits[:end] obtenemos todos los elementos antes de la posici\u00f3n de end<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; fruits[0:2]\n['apple', 'orange']\n&gt;&gt;&gt; fruits[:3]\n['apple', 'orange', 'pear']\n&gt;&gt;&gt; fruits[2:]\n['pear', 'pineapple']\n&gt;&gt;&gt; len(fruits)\n4<\/code><\/pre>\n\n\n\n<p>Los elementos almacenados dentro de una lista, pueden ser de cualquier tipo de dato soportado por Python, por lo que tambi\u00e9n podemos tener listas de listas<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; lstOfLsts = [['a', 'b', 'c'], [1, 2, 3], ['one', 'two', 'three']]\n&gt;&gt;&gt; lstOfLsts[1][2]\n3\n&gt;&gt;&gt; lstOfLsts[0].pop()\n'c'\n&gt;&gt;&gt; lstOfLsts\n[['a', 'b'], [1, 2, 3], ['one', 'two', 'three']]<\/code><\/pre>\n\n\n\n<p>Para saber que otros m\u00e9todos podemos utilizar con listas, obtenemos la lista de m\u00e9todos con <strong>dir <\/strong>y para saber como utilizar alg\u00fan m\u00e9todo con el comando <strong>help<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; dir(list)\n['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',\n'__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__',\n'__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__',\n'__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',\n'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',\n'__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__',\n'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse',\n'sort']<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; help(list.reverse)\n          Help on built-in function reverse:\n\n          reverse(...)\n          L.reverse() -- reverse \\*IN PLACE\\*<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; lst = ['a', 'b', 'c']\n&gt;&gt;&gt; lst.reverse()\n&gt;&gt;&gt; ['c', 'b', 'a']`<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Tuplas<\/h3>\n\n\n\n<p>Las tuplas son una estructura de datos similares a las listas pero en donde los elementos son inmutables, es decir, que no se pueden cambiar los elementos una vez creada la tupla y en lugar de usar corchetes, utilizamos par\u00e9ntesis para definirlas.<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; pair = (3, 5)\n&gt;&gt;&gt; pair[0]\n3\n&gt;&gt;&gt; x, y = pair\n&gt;&gt;&gt; x\n3\n&gt;&gt;&gt; y\n5\n&gt;&gt;&gt; pair[1] = 6\nTypeError: object does not support item assignment<\/code><\/pre>\n\n\n\n<p>Al querer modificar una tupla se lanza una excepci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sets<\/h3>\n\n\n\n<p>Los Sets o conjuntos son una estructura de datos que funcionan como una lista no ordenada sin duplicados. Para crear un set a partir de una lista utilizamos la instrucci\u00f3n set.<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; shapes = ['circle', 'square', 'triangle', 'circle']\n&gt;&gt;&gt; setOfShapes = set(shapes)<\/code><\/pre>\n\n\n\n<p>Otra forma de crear un set es utilizando llaves o corchetes curvos:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; setOfShapes = {\u2018circle\u2019, \u2018square\u2019, \u2018triangle\u2019, \u2018circle\u2019}<\/code><\/pre>\n\n\n\n<p>En el siguiente ejemplo se muestra como agregar elementos a un Set, probar si alg\u00fan elemento se encuentra en el Set y realizar las operaciones comunes como la diferencia, la intersecci\u00f3n y la uni\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; setOfShapes\nset(['circle', 'square', 'triangle'])\n&gt;&gt;&gt; setOfShapes.add('polygon')\n&gt;&gt;&gt; setOfShapes\nset(['circle', 'square', 'triangle', 'polygon'])\n&gt;&gt;&gt; 'circle' in setOfShapes\nTrue\n&gt;&gt;&gt; 'rhombus' in setOfShapes\nFalse\n&gt;&gt;&gt; favoriteShapes = ['circle', 'triangle', 'hexagon']\n&gt;&gt;&gt; setOfFavoriteShapes = set(favoriteShapes)\n&gt;&gt;&gt; setOfShapes - setOfFavoriteShapes\nset(['square', 'polygon'])\n&gt;&gt;&gt; setOfShapes &amp; setOfFavoriteShapes\nset(['circle', 'triangle'])\n&gt;&gt;&gt; setOfShapes | setOfFavoriteShapes\nset(['circle', 'square', 'triangle', 'polygon', 'hexagon'])<\/code><\/pre>\n\n\n\n<p>El orden en el que se imprimen los Set puede variar de acuerdo al equipo en el que se ejecuta dado que el Set es una colecci\u00f3n no ordenada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Diccionarios<\/h3>\n\n\n\n<p>El \u00faltimo tipo de estructura de dato construido en Python es el <strong>Diccionario<\/strong>, el cual almacena un <strong>mapeo <\/strong>entre un tipo de objeto (la llave o key) y otro (el valor). La llave debe ser de un tipo inmutable (string, number o tuple) y el valor puede ser cualquier tipo de dato python.<\/p>\n\n\n\n<p>El diccionario es una tabla hash para la cual no existe un orden fijo de las llaves, por lo tanto, la impresi\u00f3n del objeto no siempre devuelve el mismo orden. Se pueden tambi\u00e9n crear diccionarios de diccionarios.<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; studentIds = {'knuth': 42.0, 'turing': 56.0, 'nash': 92.0}\n&gt;&gt;&gt; studentIds['turing']\n56.0\n&gt;&gt;&gt; studentIds['nash'] = 'ninety-two'\n&gt;&gt;&gt; studentIds\n{'knuth': 42.0, 'turing': 56.0, 'nash': 'ninety-two'}\n&gt;&gt;&gt; del studentIds['knuth']\n&gt;&gt;&gt; studentIds\n{'turing': 56.0, 'nash': 'ninety-two'}\n&gt;&gt;&gt; studentIds['knuth'] = [42.0, 'forty-two']\n&gt;&gt;&gt; studentIds\n{'knuth': [42.0, 'forty-two'], 'turing': 56.0, 'nash': 'ninety-two'}\n&gt;&gt;&gt; studentIds.keys()\n['knuth', 'turing', 'nash']\n&gt;&gt;&gt; studentIds.values()\n[[42.0, 'forty-two'], 56.0, 'ninety-two']\n&gt;&gt;&gt; studentIds.items()\n[('knuth', [42.0, 'forty-two']), ('turing',56.0), ('nash', 'ninety-two')]\n&gt;&gt;&gt; len(studentIds)\n3<\/code><\/pre>\n\n\n\n<p>Se pueden utilizar los comandos dir y help para obtener informaci\u00f3n sobre los m\u00e9todos incorporados para los diccionarios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Scripts de Python<\/h2>\n\n\n\n<p>Una vez que ya hemos visto el uso del interprete de comandos python, ahora trabajaremos con los scripts. para salir del interprete de comandos con python ejecutamos <strong>quit()<\/strong><\/p>\n\n\n\n<p>Para el primer ejemplo, creamos un archivo con el nombre<strong> foreach.py<\/strong> y escribimos el siguiente c\u00f3digo donde utilizamos el ciclo <strong>for<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code># Esto es un comentario\nfruits = ['apples', 'oranges', 'pears', 'bananas']\nfor fruit in fruits:\n    print(fruit + ' en venta')\n\nfruitPrices = {'apples': 2.00, 'oranges': 1.50, 'pears': 1.75}\nfor fruit, price in fruitPrices.items():\n    if price &lt; 2.00:\n        print('%s precio %f por kilo' % (fruit, price))\n    else:\n        print(fruit + ' es demasiado cara!')<\/code><\/pre>\n\n\n\n<p>Guardamos el archivo en la carpeta donde nos encontramos en la ventana de la l\u00ednea de comandos y ejecutamos el script con la isntrucci\u00f3n: python foreach.py<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>(base) C:\\Users\\PC&gt;python foreach.py\napples en venta\noranges en venta\npears en venta\nbananas en venta\napples es demasiado cara!\noranges precio 1.500000 por kilo\npears precio 1.750000 por kilo<\/code><\/pre>\n\n\n\n<p>La impresi\u00f3n de las sentencias anteriores puede cambiar de orden dado que estamos recorriendo las llaves de un diccionario, el cual mantiene un almacenamiento no ordenada, tipo hash. Otro punto importante es que en python no se utilizan las llaves o par\u00e9ntesis curvos para delimitar un bloque de c\u00f3digo, como el bloque que pertenece al ciclo for, por lo que Python utiliza la <strong>indentaci\u00f3n<\/strong>, todo lo que se encuentra un tabulador adelante de la columna donde inicia el for, pertenece al ciclo for. En ese sentido, la siguiente l\u00ednea donde se crea el diccionario de precios, ya no est\u00e1 indentada.<\/p>\n\n\n\n<p>El siguiente script muestra el uso de <strong>for<\/strong> con <strong>if<\/strong> en la construcci\u00f3n de listas<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>nums = [1, 2, 3, 4, 5, 6]\nplusOneNums = [x + 1 for x in nums]\noddNums = [x for x in nums if x % 2 == 1]\nprint(oddNums)\noddNumsPlusOne = [x + 1 for x in nums if x % 2 == 1]\nprint(oddNumsPlusOne)<\/code><\/pre>\n\n\n\n<p>La salida al ejecutar el c\u00f3digo dentro de un archivo llamado listas.py es la siguiente<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>(base) C:\\Users\\PC&gt;python listas.py\n[1, 3, 5]\n[2, 4, 6]<\/code><\/pre>\n\n\n\n<p>La recomendaci\u00f3n es utilizar un <strong>editor de c\u00f3digo<\/strong> como Spyder (Se encuentra dentro de Anaconda) o VS Code, entre otros, para escribir los scripts y de esa forma poder establecer correctamente los espacios, tabuladores para crear la <strong>indentaci\u00f3n <\/strong>adecuada para Python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones<\/h2>\n\n\n\n<p>para definir funciones utilizamos la palabra def nombre_de_la_funci\u00f3n(argumentos):  delimitando con los dos puntos. Todo lo que va dentro de la funci\u00f3n se delimita con el tabulador o la identaci\u00f3n a la derecha.<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>fruitPrices = {'apples': 2.00, 'oranges': 1.50, 'pears': 1.75}\n\ndef buyFruit(fruit, numPounds):\n    if fruit not in fruitPrices:\n        print(\"Lo siento, no tenemos %s\" % (fruit))\n    else:\n        cost = fruitPrices[fruit] * numPounds\n        print(\"Estos son %f por favor\" % (cost))\n\n# Main Function\nif __name__ == '__main__':\n    buyFruit('apples', 2.4)\n    buyFruit('coconuts', 2)<\/code><\/pre>\n\n\n\n<p>En lugar de tener una funci\u00f3n <strong>main <\/strong>como en otros lenguajes, la expresi\u00f3n booleana if __name__ == &#8216;__main__&#8217; se utiliza para delimitar expresiones que se ejecutan cuando se invoca el archivo como script en la l\u00ednea de comandos. El c\u00f3digo despu\u00e9s de esta expresi\u00f3n es el equivalente a lo que se colocar\u00eda dentro de la funci\u00f3n main en otros lenguajes.<\/p>\n\n\n\n<p>El c\u00f3digo anterior lo guardamos como frutas.py y lo invocamos:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>(base) C:\\Users\\PC&gt;python frutas.py\nEstos son 4.800000 por favor\nLo siento, no tenemos coconuts<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Clases<\/h2>\n\n\n\n<p>El siguiente ejemplo define la clase FruitShop<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>class FruitShop:\n\n    def __init__(self, name, fruitPrices):\n        \"\"\"\n            name: Name of the fruit shop\n\n            fruitPrices: Dictionary with keys as fruit\n            strings and prices for values e.g.\n            {'apples': 2.00, 'oranges': 1.50, 'pears': 1.75}\n        \"\"\"\n        self.fruitPrices = fruitPrices\n        self.name = name\n        print('Welcome to %s fruit shop' % (name))\n\n    def getCostPerPound(self, fruit):\n        \"\"\"\n            fruit: Fruit string\n        Returns cost of 'fruit', assuming 'fruit'\n        is in our inventory or None otherwise\n        \"\"\"\n        if fruit not in self.fruitPrices:\n            return None\n        return self.fruitPrices[fruit]\n\n    def getPriceOfOrder(self, orderList):\n        \"\"\"\n            orderList: List of (fruit, numPounds) tuples\n\n        Returns cost of orderList, only including the values of\n        fruits that this fruit shop has.\n        \"\"\"\n        totalCost = 0.0\n        for fruit, numPounds in orderList:\n            costPerPound = self.getCostPerPound(fruit)\n            if costPerPound != None:\n                totalCost += numPounds * costPerPound\n        return totalCost\n\n    def getName(self):\n        return self.name<\/code><\/pre>\n\n\n\n<p>La clase <strong>FruitShop <\/strong>tiene dos atributos: el nombre de la tienda (name) y el precio de algunas frutas (fruitPrices) y define algunas funciones o m\u00e9todos para trabajar con esos datos. La principal ventaja de las clases es que encapsulan los datos para evitar su uso inapropiado. La abstracci\u00f3n que provee el uso de la clase a trav\u00e9s de los objetos facilita la creaci\u00f3n de c\u00f3digo de prop\u00f3sito general.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Creaci\u00f3n de objetos de la clase<\/h3>\n\n\n\n<p>Si guardamos el c\u00f3digo anterior en un archivo llamado <strong>shop.py<\/strong>. En un nuevo archivo dentro de la misma carpeta importamos el archivo utilizando <strong>import shop<\/strong> sin agregar la extensi\u00f3n, creamos un objeto de la clase FruitShop con: shop.FruitShop(nombre, precios) <\/p>\n\n\n\n<p>Nota: (No se usa new como en otros lenguajes)<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>import shop\n\nshopName = 'the Berkeley Bowl'\nfruitPrices = {'apples': 1.00, 'oranges': 1.50, 'pears': 1.75}\nberkeleyShop = shop.FruitShop(shopName, fruitPrices)\napplePrice = berkeleyShop.getCostPerPound('apples')\nprint(applePrice)\nprint('Apples cost $%.2f at %s.' % (applePrice, shopName))\n\notherName = 'the Stanford Mall'\notherFruitPrices = {'kiwis': 6.00, 'apples': 4.50, 'peaches': 8.75}\notherFruitShop = shop.FruitShop(otherName, otherFruitPrices)\notherPrice = otherFruitShop.getCostPerPound('apples')\nprint(otherPrice)\nprint('Apples cost $%.2f at %s.' % (otherPrice, otherName))\nprint(\"My, that's expensive!\")<\/code><\/pre>\n\n\n\n<p>Guardamos este archivo con el nombre <strong>shopTest.py<\/strong> y lo ejecutamos de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>(base) C:\\Users\\PC&gt;python shopTest.py\nWelcome to the Berkeley Bowl fruit shop\n1.0\nApples cost $1.00 at the Berkeley Bowl.\nWelcome to the Stanford Mall fruit shop\n4.5\nApples cost $4.50 at the Stanford Mall.\nMy, that's expensive!<\/code><\/pre>\n\n\n\n<p>La sentencia <strong>import shop<\/strong> le indica a python que cargue todas las funciones y clases del archivo <strong>shop.py<\/strong>. La l\u00ednea <strong><em>berkeleyShop = shop.FruitShop(shopName, fruitPrices)<\/em><\/strong> crea una instancia invocando el constructor de la clase <strong>FruitShop <\/strong>el cual se defini\u00f3 en la funci\u00f3n <strong>__init__<\/strong>. Esta funci\u00f3n constructor declara 3 argumentos <strong>(self, name, fruitPrices)<\/strong>, pero al invocarla s\u00f3lo se env\u00edan 2. Todos los m\u00e9todos en una clase tienen el argumento <strong>self <\/strong>como primer argumento. El valor de esta variable se especifica de manera autom\u00e1tica como el mismo objeto. Cuando se invoca un m\u00e9todo, s\u00f3lo se env\u00edan los argumentos restantes. El argumento self contiene todos los datos de la clase, en este caso name y fruitPrices para la instancia en cuesti\u00f3n (Es el equivalente de this en java).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Variables est\u00e1ticas y de instancia<\/h3>\n\n\n\n<p>Para describir el uso de las variables est\u00e1ticas y de instancia, creamos el archivo <strong>person_class.py<\/strong> con lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>class Person:\n    population = 0\n\n    def __init__(self, myAge):\n        self.age = myAge\n        Person.population += 1\n\n    def get_population(self):\n        return Person.population\n\n    def get_age(self):\n        return self.age<\/code><\/pre>\n\n\n\n<p>Al compilar y ejecutar el script con el int\u00e9rprete de comandos Python:<\/p>\n\n\n\n<pre class=\"wp-block-aphph-prism-block lang:python language-python\"><code>&gt;&gt;&gt; import person_class\n&gt;&gt;&gt; p1 = person_class.Person(12)\n&gt;&gt;&gt; p1.get_population()\n1\n&gt;&gt;&gt; p2 = person_class.Person(63)\n&gt;&gt;&gt; p1.get_population()\n2\n&gt;&gt;&gt; p2.get_population()\n2\n&gt;&gt;&gt; p1.get_age()\n12\n&gt;&gt;&gt; p2.get_age()\n63<\/code><\/pre>\n\n\n\n<p>La variable <strong>age<\/strong> es una variable de instancia y <strong>population <\/strong>es una variable est\u00e1tica. El valor de la variable <strong>population<\/strong> se comparte con todas las instancias de la clase <strong>Person <\/strong>donde cada instancia tiene su propia variable <strong>age<\/strong>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<script async=\"\" src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2380084220870127\" crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2380084220870127\" data-ad-slot=\"2437322509\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este es un tutorial b\u00e1sico de python, un lenguaje interpretado orientado a objetos, que comparte algunas caracter\u00edsticas de los lenguajes Java y Schema<\/p>\n","protected":false},"author":2,"featured_media":1809,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[25,3,163],"tags":[56,165,50,164,61,166],"class_list":["post-1808","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algoritmos","category-programacion-orientada-a-objetos","category-python","tag-data-science","tag-instalacion-de-python-y-anaconda","tag-machine-learning","tag-programacion","tag-python","tag-tutorial-basico-de-python"],"aioseo_notices":[],"author_meta":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/author\/jacob-avila\/"},"featured_img":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/450_1000-300x186.jpg","featured_image_src":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/450_1000.jpg","featured_image_src_square":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2021\/09\/450_1000.jpg","author_info":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/author\/jacob-avila\/"},"coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/algoritmos\/\" class=\"advgb-post-tax-term\">Algoritmos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/programacion-orientada-a-objetos\/\" class=\"advgb-post-tax-term\">Programaci\u00f3n Orientada a Objetos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">Python<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Algoritmos<\/span>","<span class=\"advgb-post-tax-term\">Programaci\u00f3n Orientada a Objetos<\/span>","<span class=\"advgb-post-tax-term\">Python<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">Data Science<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">instalaci\u00f3n de python y anaconda<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">machine learning<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">Programaci\u00f3n<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">Python<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/python\/\" class=\"advgb-post-tax-term\">tutorial b\u00e1sico de python<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Data Science<\/span>","<span class=\"advgb-post-tax-term\">instalaci\u00f3n de python y anaconda<\/span>","<span class=\"advgb-post-tax-term\">machine learning<\/span>","<span class=\"advgb-post-tax-term\">Programaci\u00f3n<\/span>","<span class=\"advgb-post-tax-term\">Python<\/span>","<span class=\"advgb-post-tax-term\">tutorial b\u00e1sico de python<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Publicado 5 a\u00f1os hace","modified":"Actualizado 1 a\u00f1o hace"},"absolute_dates":{"created":"Publicado el septiembre 5, 2021","modified":"Actualizado el febrero 20, 2025"},"absolute_dates_time":{"created":"Publicado el septiembre 5, 2021 8:48 pm","modified":"Actualizado el febrero 20, 2025 1:37 pm"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/1808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/comments?post=1808"}],"version-history":[{"count":14,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/1808\/revisions"}],"predecessor-version":[{"id":1830,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/1808\/revisions\/1830"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/media\/1809"}],"wp:attachment":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/media?parent=1808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/categories?post=1808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/tags?post=1808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}