Programación para todos:Python parte 2
cervantes·@cervantes·
0.000 HBDProgramación para todos:Python parte 2
<html> https://steemitimages.com/DQmedHKM3Mb38SRKRA1cpzUeTcDDUPreUX1oESVuqUAGTjn/12121212121.jpg <div class=text-justify> <center><h2></h2></center> <p>En la anterior entrega aprendimos la sintaxis de los elementos más básicos en el lenguaje <strong>Python</strong>. Sabemos ya cómo declarar variables y manipularlas mediante operaciones. Aprendimos a definir y utilizar una función, y además, estudiamos la funciòn <strong>print</strong>, fundamental para crear nuestros primeros programas.</p> <p>Este artìculo corresponde a la séptima entrega de una serie, si deseas aprender desde cero y con detalle el mundo de la informática y la programación acude a los siguientes enlaces en orden:</p> <ol> <li><a href=https://steemit.com/cervantes/@cervantes/programacion-para-todos-la-informatica-y-su-rol-en-la-humanidad>Informática</a></li> <li><a href=https://steemit.com/spanish/@cervantes/programacion-para-todos-computadoras>Computadoras</a></li> <li><a href=https://steemit.com/cervantes/@cervantes/programacion-para-todos-programas>Programas</a></li> <li><a href=https://steemit.com/programacion/@cervantes/programacion-para-todos-algoritmos>Algoritmos</a></li> <li><a href=https://steemit.com/programacion/@cervantes/programacion-para-todos-pseudocodigo>Pseudocódigo</a></li> <li><a href=https://steemit.com/programacion/@cervantes/programacion-para-todos-python>Python</a></li> </ol> <center><h2>Continuemos</h2></center> <br> <p>En esta ocasión, al igual que en el artìculo anterior utilizaremos un interpretador interactivo online, pero no el mismo. Ahora, utilizaremos un interpretador que nos permitirá utilizar varios archivos, escribir nuestro código, y ejecutarlo posteriormente. Es decir, simularemos un entorno de desarrollo que nos permitirá crear programas ejecutables. Lo podemos encontrar en <a href=https://repl.it/repls/VictoriousBoringAstronomy>Este sitio</a> </p> <p>Deberías llegar al siguiente lugar:</p> <center> <div> https://steemitimages.com/DQmSU2u62HLiTG7iJSNu9XhzHDUQx1Vssi9wqXasPoLAjUQ/entorno.png </div> <br> <strong>Imagen propia</strong> </center> <br> <p>Primero, para familiarizarnos con el entorno escribamos un simple código:</p> <pre><code> print(“¡Funciona!”) </code></pre> <br> <p>Presionen la combinación de teclas <i>ctrl+enter</i> y el programa se ejecutará, deberían obtener el siguiente resultado:</p> <center> <div> https://steemitimages.com/DQmTmPKPxynnXLpWMzafg8wUsW3xpBpEyUHW7pn6eUyC3ey/funciona.jpg </div> <br> <strong>Imagen propia</strong> </center> <br> <h3>¡Manos a la obra!</h3> <br> <p>Crearemos un programa llamado <i>“Súper gestor de tareas 2000”</i>, el cual, tiene la capacidad de crear una lista de tareas pendientes, y modificarlas según nuestra necesidad. Para comenzar definamos las variables fundamentales para el funcionamiento de este programa</p> <pre><code> toDo=["Lavar", "Barrer"] #Arreglo de tareas, llamado toDo por el inglés "Por hacer" option='' #Opción elegida por el usuario </code></pre> <br> <p> Declaramos la variable <i>option</i> como un string (cadena de texto) vacío, dado que tomará posteriormente distintos valores . Está se encargará de recibir información ingresada por el usuario, ya la comprenderemos más adelante. El arreglo de tareas ya contiene valores iniciales. El símbolo <i>#</i> se utiliza en Python para escribir comentarios, es decir texto que no será ejecutado por el programa, y que es de gran utilidad para escribir información relevante. </p> <p>Escribamos un pequeño mensaje descriptivo y de bienvenida:</p> <br> <pre><code> print("¡Bienvenido a su súper gestor de tareas 2000!") print("") </code></pre> <br> <p>Escribimos <i>print("")</i> para dar un espacio en blanco, y hacer del programa más agradable visualmente. <h4>Interfaz de usuario</h4> <br> <p>Queremos que el usuario que utilice el programa interactúe con él, a través de un menú, que contiene las opciones para ejecutar las diversas funcionalidades del programa. Este menú es llamado <strong>interfaz de usuario</strong>, que es el medio por el que el usuario se comunica con el programa.</p> <p>Para crear esta interfaz utilizaremos repetidas veces la función <i>print()</i>, con la cual "dibujaremos" el menú:</p> <pre><code> print("Que desea?") print("1.-Ver tareas pendientes") print("2.-Marcar tareas como completadas") print("3.-Agregar tareas pendientes") print("4.-Salir") print("") option=input("Ingrese su opción:") #La función input recibe la información ingresada por el usuario. print("") </code></pre> <br> <p>Tal como podemos ver en el comentario del código anterior, la variable <i>option</i> que declaramos en un inicio tomará el valor ingresado por el usuario a través de la función <i>input()</i>. Cuando utilizamos esta función, la consola esperará hasta que el usuario ingrese un valor, posteriormente este valor es almacenado en la variable <i>option</i>.</p> <p>¡Ya tenemos nuestra interfaz!, hasta el momento nuestro código se encuentra de la siguiente forma :</p> <center> <div> https://steemitimages.com/DQmQLBWjTUgJgc1mVNdDQtSZdES2RTWFYs3aYTYKWz4udKM/c%C3%B3digopaso1.jpg </div> <br> <strong>Imagen Propia</strong> </center> <br> <p>Cuando ejecutamos el programa, obtenemos lo siguiente en la terminal:</p> <center> <div> https://steemitimages.com/DQmYTKCUfuW5FYBbDQiT7Y3j4Et1BtKmEKTA6NDo3QDKW3o/consolapaso1.jpg </div> <br> <strong>Imagen Propia</strong> </center> <br> <p>Podemos ver que ingresamos un valor, pero el programa no hace nada con el. Para solucionar este problema tenemos que utilizar una <strong> estructura selectiva</strong>, que estudiamos anteriormente en el artículo de <a href=https://steemit.com/programacion/@cervantes/programacion-para-todos-pseudocodigo >Pseudocódigos</a>.</p> <p>Queremos que el programa ejecute distintas instrucciones dependiendo del valor ingresado por el usuario. Si el usuario ingresa la opción "<i>1</i>", queremos mostrar las tareas por hacer, es decir los elementos de la lista <i>toDo</i> . Es decir, queremos la siguiente estructura:</p> <pre><code> si(option==1) entonces mostrar elementos toDo </code></pre> <br> <p>En Python, la forma de escribir esta estructura sería la siguiente:</p> <pre><code> if (option=="1"): #Mostramos los elementos del arreglo "toDo" for i in toDo: print(i) </code></pre> <br> <p>Estamos diciendo lo siguiente: Si <i>option=1</i> , para la variable <i>i</i> en <i>toDo</i> muestra el elemento i-ésimo de la lista. En otras palabras, <i>for i in toDo</i> significa: "para cada elemento de la lista <i>toDo</i>, muestra el elemento en pantalla"</p> <p>Lo anteriormente descrito corresponde a una estructura iterativa, bucle para, o comúnmente conocido como ciclo <i>for</i>.</p> <p>Pero queremos que lo que se muestra en pantalla sea lo más agradable posible para el usuario, de modo que añadiremos lo siguiente:</p> <pre><code> if (option=="1"): #Mostramos los elementos del arreglo "toDo" print("Tareas pendientes:") print("") for i in toDo: print(i) </code></pre> <br> <p>Ahora, añadiremos las instrucciones para las otras opciones del programa, comenzaremos por la opción 2. Queremos marcar tareas como completadas, es decir, eliminar elementos del arreglo <i>toDo</i> que ya hayan sido completados. Lo haremos del siguiente modo: </p> <pre><code> elif (option=="2"): #Eliminamos los elementos del arreglo ingresados por el usuario mark='' while (mark != "volver"): mark=input("¿Que tarea completó? (escriba 'volver' para volver)") if(mark != "volver"): toDo.remove(mark) </code></pre> <br> <p>¿Por que <i>elif</i>?, es un pseudónimo de <i>else if</i>, es decir "de lo contrario si". Si la condición anterior en <i>if</i> no se cumple, pero si se cumple la mencionada en <i>elif</i>, entonces se ejecutan las instrucciones listadas posteriormente.</p> <p> La variable <i>mark</i> almacenará la información ingresada por el usuario, en este caso la tarea completada, es decir el elemento de la lista que eliminaremos. Para que el usuario pueda ingresar indefinidamente elementos, haremos que necesite ingresar la palabra "volver" para terminar. Esto lo hacemos con una estructura iterativa <strong>mientras</strong>. Mientras <i>mark</i> sea distinto de <i>"volver"</i>, se ejecutarán las instrucciones en una cantidad de ciclos indeterminada. Cuando el usuario ingrese el valor "volver", se romperá el ciclo <i>while</i>, y el programa continuará con las siguientes instrucciones.</p> <p>Si <i>mark</i> es distinto de volver, entonces se eliminará el elemento del arreglo ingresado por el usuario.</p> <p>Para la opción "3" el método es equivalente, con la diferencia de que en vez de eliminar elementos, los añadiremos:</p> <pre><code> elif (option=="3"): #Añadimos al arreglo los elementos ingresados por el usuario app='' while (app != "volver"): app=input("¿Que tarea desea agregar? (escriba 'volver' para volver)") if (app != "volver"): toDo.append(app) </code></pre> <br> <p>¡Hemos hecho un gran avance!, nuestro código se ve de la siguiente manera:</p> <center> <div> https://steemitimages.com/DQmVbozeFV5BWaWdWYpMyn7u3Vz6DXh9vouvxfmK9fE4Uts/codigopaso2.jpg </div> <br> <strong>Imagen Propia</strong> </center> <br> <p>Y cuando ejecutamos el programa:</p> <center> <div> https://steemitimages.com/DQmbyRSh5dWhA6X3tGuMTuKYdvNXKeKLSoyCBy286xuQqtY/consolaparte2.jpg </div> <br> <strong>Imagen Propia</strong> </center> <br> <p>¡Funciona!, pero tenemos un pequeño problema: cuando elegimos una opción, se ejecutan satisfactoriamente sus instrucciones, pero el programa se cierra; nos gustaría que volviese al menú principal, y el programa se ejecutase hasta que elijamos la opción 4 "salir". Pero, ¡claro!, si vemos más atrás, nos encontramos con un problema conocido: cuando eliminamos o agregamos elementos a lista, ejecutamos una lista de instrucciones en una cantidad de ciclos indefinidos hasta que ingresamos un valor en particular, ¡podemos hacer lo mismo!, con la diferencia de que en esta ocasión sería para el código casi completo. </p> <p>Por lo tanto, todo debe estar dentro de un ciclo <i>while</i>: </p> <center> <div> https://steemitimages.com/DQmPVHLaHanV4mXUs92aPaiDppUEE1DWRj15DnCGeH6j53p/codigoparte3.jpg </div> <br> <strong>Imagen Propia</strong> </center> <br> <p><strong>Importante:</strong>Todas las instrucciones dentro del nuevo ciclo while se deben correr un espacio a la derecha, tal como podemos ver en la imagen. Para ello selecciona cada línea en su inicio, y presiona la tecla <i>tab</i>.</p> <p>Cuando ejecutamos el programa obtenemos:</p> <center> <div> https://steemitimages.com/DQmS3HKP5KiLrLU97WUzixBmWTMpX55y3pwZNK3Bgfejdn3/consolafinal.jpg </div> <br> <strong>Imagen Propia</strong> </center> <br> <p>Y si vemos las nuevas tareas pendientes, es decir el estado de la lista <i>toDo</i>:</p> <center> <div> https://steemitimages.com/DQmcbrVvQnXaLeJssyrEYFKQZqNngDmLgRLQK5SyK9TrdC2/tareaspendientesfinal.jpg </div> <br> <strong>Imagen Propia</strong> </center> <center> <h2>¡Misión cumplida!</h2> </center> <br> <p>Terminamos nuestro <i>¡Súper gestor de tareas 2000!</i> <p> En el proceso aprendimos la sintaxis de las estructuras de control fundamentales en python, y ¡logramos escribir nuestro primer programa ejecutable!.</p> <p>Pero faltan cosas por resolver: ¿qué pasa cuando cierro el programa?,¿las tareas por hacer se borran y la lista <i>toDo</i> vuelve a ser la misma de antes?, pues sí, pero en la próxima entrega aprenderemos cómo escribir y leer archivos externos, los que utilizaremos para almacenar los valores de la lista, y poder utilizar estos valores en una próxima ejecución del programa</p> <p>Hasta el momento sólo hemos utilizado interpretadores interactivos online, el próximo miércoles aprenderemos a instalar Python en nuestro sistema y escribiremos este mismo programa localmente, ¡creando un archivo ejecutable!, es decir, podremos crear el programa y ejecutarlo en nuestro propio computador, tal y como instalamos otros programas, a diario.</p> <center><p>¡Nos vemos el próximo miércoles!, un afectuoso saludo</p> <p><strong>Equipo de desarrollo Cervantes</strong></p> <p>Por @vhinojosa</p> </center> </div> <div class="pull-right"> https://steemitimages.com/DQmamgqsMfzeXgsop5Sz8HHmP2sjHQnnSpzJ7nD8zuPmuu5/computadora.jpg </div> <div class="pull-left"><div class="text-justify"> Un <strong>Witness</strong> es quien mantiene los servidores /nodos para que Steemit no se caiga y siempre puedas postear, comentar, votar y recibir pagos y recompensas. @Cervantes está optando a ser representante de la Comunidad Hispana como Testigo/Witness del Steemit.</div> <center> <h1> Ven y apoya a @Cervantes como Witness en https://steemit.com/~witnesses</h1> </center> </html>
👍 lenin-mccarthy, elfictron, matiasmenarguez, pacokam8, felixrodriguez, karirivas, vaneaventuras, foodtaster, sexygirl123, edinsoo, realtulior, rezawijaya36, robertrz, owner99, porlacarretera, infamousit, naideth, vicrivasr, osamarodriguez, gabrielperez0411, samdman, soledadjc, roybrown, danielghufran, karupanocitizen, thalyasabril, silher, norvicgarcia, soydiegorojas, erreute, andreacrangel, steemhispano, losmosqueteros, caacupe, steemit007, mariags97, laqsking, oliens, sophiegeek, sayutiyuti, poetarojo, drugpolicy, revolucion, bloque, iglesia, marihuana, rusia2018, acuariuslp, victorp14, jorgegp, joanmunroe, alexisvalera, josemape, jhonnydiaz, whyse, jamescstle, corker, kareylin, wilmarnm, luisal314, wealth4good, steemtruth, kromtar, javierleiva, jleiva, rakugoka, zoelviana, sam1996, gabrielarondon, juleskajimenez, mariaes, nessacd, jel11, ecoman1, transilvaniaman, nedred, freakvoter2, spicyshai, lord-faustus, benleemusic, olayar, amadeus, sv67216721, conbame, babyehm, openaccount, enforcer, jeadeg, germanaure, emilioauredurban, nick2018, nenio, chuobejarano, febri, parcferme, davidsc, kihase, gatosaurio, fummy, jokers, contigo-no-bicho, andrescaslu, edularity, awchel, doomsdaychassis, profitgenerator, anomadsoul, freddbrito, andyluy, onart, xny, aboesan, budismo, jcalero, axorve, chiarambottino, bitcoinroute, mellissamartz, zaxan, cu3rvo17, gooze, yisusmc, miguelsanchezz, loreennaa, hectorvarelarey, teamsteem, mickeyvera, cristinarmz23, marianaceleste, amanardis, maastro, jose27117, feuerbolt, healthyfit, beautylife, sony-albornoz, ulisessabeque, thewriters, rafarosado, astrea, felixcohelo, soykatherine, ylich, afroadrianv, mariale07, germano, maracay, stimu, elarca, gunboat, laura97, marcelo28, xymaros, magnat, ricardoangulove, videojuegos, reasons-why, michaelrrg, bravofenix, chicosonico, redapple26, steemitdigest, kpine, steemsecretfiles, ninaflowers, yaniria1, pepiflowers, olivercuico, edibastard, freakvoter, elguayanes, karenulloa93, kennyvaldez, mariajmr, herverisson, mrwalt, alexkorol, berkah, mrs.agsexplorer, pnc, bitcoiner, greenstar, theshadowek, frida.urbana, terandg, themonkeyzuelans, jeysal, heroiyke, azaeln7, gcervera, johnson13, bonanza888, antimonio, malonmar, joseangelvs, briggitkatan, jrafaelrivero, fnux, zurimabarcelo, yoneidernovoa, ronaldjfs, genehdez, vm1996, volobina, ezzovanady, rmagwinonckapav, frl21, williamsq, liscano, muro-luis08, schizoarts, yessenia, alexteran, vhinojosa, josemanuelparri, phosgenex, jhelbich, janisjoplin22, riv-maro, edco41, cervantes, gargon, lafona-miner, pgarcgo, jgcastrillo19, dulcinea, wartrapa, titin, teo, albagargon, mdcomes, noticias, aidarojaswriter, reimerlin, jkj, spanishchef, neymarjr, ibiza, aneblueberry, magoia, ivan-perez-anies, teacher, heiditravels, luisucv34, carlos-cabeza, kilianmiguel, fidel-castro, mpandrew, francis228, soymanu, freecreative, introspectiva, kranga, eilin, dinocreative, wackou, tincho, joserafael, credlonu, cosmicboy123, soyciencia, reset221, jesusemigdio,