Aprende a programar en Python: de cero al infinito - Silvia Guardati Buemo - E-Book

Aprende a programar en Python: de cero al infinito E-Book

Silvia Guardati Buemo

0,0

Beschreibung

Si tienes cero o nula experiencia en programación y quieres saber más acerca de la solución algorítmica de problemas, enfatizando en el análisis, el diseño, la implementación y la prueba de las soluciones, este libro será tu gran aliado. Gracias a la lectura de este manual serás capaz de analizar un problema y, una vez entendido, diseñar el algoritmo que representa una solución del problema (computational thinking). Además, desarrollarás la capacidad de programar, pues los problemas planteados son de una naturaleza tal que permiten que los algoritmos diseñados puedan ser implementados por medio de un lenguaje de programación, en este caso, Python. El libro es el resultado de muchos años de enseñanza de materias en las cuales el objetivo principal es despertar en los alumnos el gusto por resolver problemas por medio de los algoritmos. La idea de enseñar a programar debe ir más allá de enseñar un lenguaje de programación, debe desarrollar la capacidad de análisis, despertar el interés por diseñar soluciones eficaces y eficientes, promover la escritura de código agradable de leer y, por lo tanto, fácil de mantener y evolucionar, y debe convencer acerca de la fundamental importancia de probar todos los algoritmos, para garantizar que funcionan correctamente. El manual está pensado para un público muy variado, ya que no exige tener conocimientos previos de computación o de programación: empieza con conceptos muy simples e incorpora más elementos de forma gradual. Asimismo, se ajusta muy bien a materias de ciencias de la computación dedicadas a la enseñanza del desarrollo de algoritmos y su implementación usando lenguajes de programación. Específicamente puede ser un libro de texto de las primeras materias de cualquier plan de estudios que incluya esta área del saber. Sin duda, con interés y ganas de aprender, con este libro dominarás las bases del pensamiento algorítmico, la solución de problemas y su implementación.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 218

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



 

 

 

Aprende a programar en Python: de cero al infinito

Silvia Guardati Buemo y Osvaldo Cairó Battistutti

Derechos reservados © Alfaomega Grupo Editor, S.A. de C.V., México

Primera edición: 2022

ISBN: 978-842-673-555-3

Primera edición: MARCOMBO, S.L. 2023

© 2023 MARCOMBO, S.L.

www.marcombo.com

Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra

ISBN: 978-84-267-3555-3

Producción del ePub: booqlab

 

 

 

 

 

A nuestro hijo

Acerca de los autores

M. C. Silvia Guardati Buemo es profesora del Departamento Académico de Computación del Instituto Tecnológico Autónomo de México (ITAM), desde 1988. Sus principales áreas de enseñanza son: algoritmos, estructuras de datos e ingeniería de software. También ha participado en proyectos de diseño de procesos y control de calidad, relacionados con la industria del software.

Es autora de varios libros de texto, entre los que se destacan Estructuras de Datos (ed. McGraw Hill),Estructuras de Datos: Algoritmos en C++ (ed. Pearson),Estructuras de Datos Básicas. Programación Orientada a Objetos con Java (ed. Alfaomega) y Colecciones de Datos + Algoritmos en Python (ed. Alfaomega).

Dr. Osvaldo Cairó Battistutti fue profesor-investigador del Instituto Tecnológico Autónomo de México (ITAM) durante 34 años y es miembro del Sistema Nacional de Investigadores (SNI) de México. Es autor de varios libros de texto, algunos de los cuales se han convertido en clásicos como, por ejemplo: Metodología de la Programación, Estructuras de Datos, Piensa en C y Aprende a Programar en Java.

Sus trabajos de investigación se enfocan en el área de la Inteligencia Artificial, principalmente en los campos relativos al conocimiento, la cognición y la inteligencia. Ha participado en proyectos de investigación con el financiamiento de CONACYT y Naciones Unidas. Es miembro de la Sociedad Mexicana de Inteligencia Artificial (SMIA), árbitro de CONACYT, miembro del programa de becas Fullbright-García Robles, consultor del CONICET (Argentina), consultor de la CEPAL y de Naciones Unidas, y miembro revisor de múltiples revistas internacionales.

Años atrás recibió el Premio al Mérito Académico, distinción que se otorga en México al mejor académico en el área de ingenierías.

Agradecimientos*

Agradecemos el apoyo recibido para la realización de este libro al Dr. Alejandro Hernández, vicerrector del ITAM, al Dr. Ante Salcedo, director de la División Académica de Ingeniería del ITAM, y al Dr. Fernando Esponda, jefe del Departamento Académico de Computación del ITAM. Contamos con su entusiasmo y su confianza en la consecución de este proyecto desde el primer momento.

Nos gustaría, además, agradecer a nuestros alumnos. Son ellos los que mantienen viva nuestra pasión por la enseñanza, los que nos permiten experimentar, una y otra vez, el placer de entrar al salón de clases para contribuir en el descubrimiento de sus habilidades y su desarrollo como individuos y, con un poco de suerte, en la construcción de un mundo mejor.

También agradecemos al DG Lisandro Lazzaroni por el diseño de la portada de este libro; por ponerle sal, pimienta y algo más al mundo de los algoritmos.

 

 

 

 

 

*Apoyo financiero otorgado por la Asociación Mexicana de Cultura, A. C.

Contenido

Acerca de los autores

Agradecimientos

Prefacio

Capítulo 1

Algoritmos, diagramas de flujo y programas

1.1 Algoritmos

1.2 Diagramas de flujo

1.2.1 Símbolos del diagrama de flujo

1.2.2 Reglas para la construcción del diagrama de flujo

1.3 Tipos de datos

1.3.1 Identificadores

1.3.2 Variables

1.3.3 Constantes

1.4 Operadores

1.4.1 Operadores aritméticos

1.4.2 Operadores relacionales

1.4.3 Operadores lógicos

1.4.4 Operadores simplificados de asignación

1.4.5 Operadores de identidad y de membresía

1.4.6 Prioridad de los operadores

1.5 Programas

1.5.1 Los entornos de desarrollo en Python

1.5.2 Spyder

1.5.3 Documentación de los programas

1.5.4 Formato de impresión

1.5.5 Secuencias de escape de Python

1.6 Tipado dinámico de variables

1.7 Lectura de datos

1.8 ZEN de Python

Capítulo 2

Los primeros programas y algo más

2.1 Introducción

2.2 Solución de problemas

2.3 Cadenas de caracteres (str)

2.3.1 Operaciones con cadenas

2.3.2 Problemas utilizando cadenas

2.3.3 Funciones ord() y chr()

2.4 Tipo complejos (complex)

2.4.1 Operaciones con números complejos

2.4.2 Problema utilizando números complejos

2.5 Tuplas (tuple)

2.5.1 Funciones y operaciones con tuplas

2.5.2 Problemas utilizando tuplas

Capítulo 3

Estructuras selectivas

3.1 Introducción

3.2 Sangrías en Python

3.3 La estructura selectiva simple if

3.4 La estructura selectiva doble if else

3.5 Selecciones con más de dos opciones

3.6 Estructuras selectivas en cascada

3.7 Estructuras selectivas: otras formas de uso

3.8 Excepciones

3.9 Problemas de práctica

Capítulo 4

Estructuras repetitivas

4.1 Introducción

4.2 La estructura repetitiva for

4.2.1 Función range() en ciclos for

4.2.2 Otras secuencias usadas en el for r

4.3 La estructura repetitiva while

4.4 Estructuras repetitivas anidadas

4.5 Instrucciones continue y break

4.6 Problemas de práctica

Capítulo 5

Funciones, módulos y archivos

5.1 Funciones

5.1.1 Parámetros

5.1.2 Alcance de las variables

5.1.3 Documentación de funciones

5.1.4 Lista arbitraria de parámetros

5.1.5 Solo parámetros posicionales y solo parámetros por nombre

5.1.6 Lanzar excepciones desde una función

5.1.7 Tuplas como resultado de funciones

5.2 Módulos

5.3 Algunos comentarios finales sobre funciones y módulos

5.4 Archivos

5.4.1 La instrucción with

5.5 Problemas de práctica

 

Índice temático

Prefacio

Este libro es el resultado de muchos años de enseñanza de materias cuyo objetivo principal es despertar en los alumnos el gusto por resolver problemas usando algoritmos. La idea de enseñar a programar debe ir más allá de enseñar un lenguaje de programación; debe desarrollar la capacidad de análisis, despertar el interés por diseñar soluciones eficaces y eficientes, promover la escritura de código agradable de leer y, por lo tanto, fácil de mantener y evolucionar. Además, debe demostrar y convencer acerca de la fundamental importancia de probar todos los algoritmos, para asegurarse de que estos funcionan correctamente.

La solución de problemas mediante algoritmos y su programación no debe verse solo como una habilidad técnica que se adquiere con estudio y práctica por aquellos que quieren dedicarse profesionalmente al desarrollo de software, sino también como una materia intelectualmente interesante y estimulante. Fomenta la disciplina y la capacidad para analizar y resolver problemas de nuestra vida cotidiana, aunque estos no se puedan implementar por medio de un programa. También permite desarrollar nuestro ingenio, ya que en muchos problemas hay más de una manera de llegar a una buena solución. En el salón de clase, todos los semestres, algún alumno nos sorprende y nos maravilla con una solución novedosa que combina los conocimientos adquiridos con su ingenio.

El objetivo principal de este libro es introducir al lector en la solución algorítmica de problemas, enfatizando el análisis, el diseño, la implementación y la prueba de las soluciones. Se trata de ir desarrollando la capacidad de analizar un problema y, una vez entendido, diseñar el algoritmo que representa la mejor solución para este problema. Como, además, se busca desarrollar la capacidad de programar, los problemas planteados son de una naturaleza tal que permiten que los algoritmos diseñados puedan ser implementados por medio de un lenguaje de programación. En el caso de este libro se usará Python.

Este libro es el primero de una serie de libros en los que se usa Python como lenguaje de programación. El enfoque del libro es ir introduciendo aquellos elementos del lenguaje que se requieren para implementar los conceptos relacionados con la solución de problemas según el tema de estudio en cada capítulo. Apoyándonos en conceptos de la ingeniería de software, podemos decir que este libro sigue un enfoque iterativo-incremental. Es decir, el proceso de aprendizaje se divide en partes —las iteraciones— y, en cada iteración, se presentan algunos conceptos —los incrementos—, los cuales se usan en la solución de problemas. Posteriormente, pasamos a la siguiente iteración. En la nueva iteración se agregan otros conceptos. Estos, junto con los anteriores, se usan en la solución de problemas para, después, pasar a otra iteración que traerá nuevos incrementos. Como en cada iteración se incorporan nuevos conceptos a los ya estudiados, se dice que es incremental. De esta manera, los conceptos se siguen utilizando en la solución de los problemas desde los primeros temas estudiados hasta los más recientes, alcanzando así un mayor dominio de estos. A su vez, a medida que contamos con más elementos, el nivel de complejidad de los problemas va aumentando.

El libro está pensado para un público muy variado, ya que no exige tener conocimientos previos de computación o de programación, porque empieza con conceptos muy simples e incorpora más elementos de forma gradual. Todo aquel que tenga el interés y las ganas de aprender podrá utilizar este libro para llegar a dominar las bases del pensamiento algorítmico, la solución de problemas y su implementación.

El libro también se ajusta muy bien a materias de ciencias de la computación dedicadas a la enseñanza del desarrollo de algoritmos y su implementación usando lenguajes de programación. Específicamente, puede ser un libro de texto para las primeras materias de cualquier plan de estudios que incluya esta área del saber.

El libro está organizado en cinco capítulos. Los cuatro primeros están dedicados a los conceptos básicos de la solución algorítmica de problemas. Cada uno de los temas tratados se complementa con ejemplos y ejercicios. También, se desarrollaron varios vídeos en los cuales se ofrece la solución de algunos de los problemas, lo que permite al alumno seguir el razonamiento que se aplicó y, de esta manera, ir desarrollando su propio pensamiento algorítmico. El último capítulo está dedicado, principalmente, a dos temas: la solución de problemas por medio de su división en subproblemas y el manejo de datos desde archivos. Ambos temas son de mucha utilidad cuando los problemas tratados son de cierta complejidad. Se procura presentar todos los conceptos de manera general, sin restringirse al lenguaje Python. Sin embargo, en el momento en que se implementa, necesitamos ajustarnos a la sintaxis del lenguaje elegido.

Un aspecto importante de este libro es el énfasis en las pruebas. El concepto de prueba hace referencia a diversas técnicas desarrolladas para asegurarse de que todo producto relacionado con el software esté libre de errores. Cuando se habla de un producto de software implica no solo el programa, sino también el diseño y toda la documentación que se genera. En el campo de la ingeniería de software está comprobado que cuanto antes se detecte un error, más barato será corregirlo. Por lo tanto, es de suma importancia validar y verificar en cada una de las etapas —análisis, diseño e implementación— cada uno de los productos generados.

Todos los programas presentados como ejemplos o como solución a los problemas pueden consultarse en el repositorio de GitHub. En todos los programas se incluyeron comentarios que describen el problema que se resuelve. Sin embargo, en el libro, y por razones de espacio, se suprimieron muchos de ellos. Es importante destacar que, en el libro, la falta del comentario no afecta porque el programa aparece junto al enunciado del problema.

Entre en www.marcombo.info para tener acceso gratis al GitHub del libro.

Código: PYTHON22

CAPÍTULO 1

ALGORITMOS, DIAGRAMAS DE FLUJO Y PROGRAMAS

1.1 ALGORITMOS

Un algoritmo es un conjunto de pasos, instrucciones, procedimientos o reglas bien definidos, ordenados y finitos que permiten alcanzar un resultado o resolver un problema. Los primeros algoritmos datan del siglo noveno en Asia Central, en una región conocida como Corasmia o Jorasmia (Khwarazm en inglés), que se encuentra a lo largo de las fronteras de Turkmenistán y Uzbekistán.

Muhammad ibn Musa al-Khwarizmi, astrónomo, geógrafo y matemático, conocido particularmente por sus contribuciones al estudio del álgebra, fue el que le dio al latín la palabra «algoritmi». Al-Khwarizmi escribió un libro en árabe sobre los números arábigos-hindús, titulado en latín Algoritmi de numero Indorum. La palabra «algorithm», derivada del latín, pasó al inglés y se difundió rápidamente.

Figura 1.1. Estampilla (sello postal) emitido en la Unión Soviética en 1983, para conmemorar los 1200 años del nacimiento de Muhammad ibn Musa al-Khwarizmi.

En la vida cotidiana aplicamos algoritmos de forma prácticamente continua. En la mayoría de los casos lo hacemos de manera automática, sin darnos cuenta de ello, porque es una actividad que hemos realizado decenas, cientos o miles de veces. Por ejemplo, cuando nos bañamos, desayunamos o, simplemente, tomamos un vaso de agua, estamos aplicando un algoritmo: un conjunto de pasos que nos permiten alcanzar un resultado específico. Por ejemplo, para tomar un vaso de agua debemos: primero buscar un vaso, luego abrir el grifo, llenar el vaso y, por último, beber el agua. Los pasos importan, y el orden en el cual se ejecutan también importa.

Otros algoritmos que se pueden identificar muy fácilmente son los manuales de usuario para el automóvil o los electrodomésticos, las recetas de cocina, y los pasos que se siguen para calcular el promedio de una serie de números, la nómina de una empresa o para aplicar el método de Gauss para calcular un sistema de ecuaciones lineales.

Un algoritmo es un conjunto de pasos, instrucciones, procedimientos o reglas bien definidos, ordenados y finitos que permiten alcanzar un resultado o resolver un problema.

Algunos algoritmos pueden ser muy simples y otros muy complejos. Es obvio que existe una gran diferencia entre los pasos necesarios para preparar el desayuno, ordenar una serie de números y enviar una sonda espacial a Marte. Para algunos requerimos conocimientos simples y para otros conocimientos extensos y profundos sobre uno o varios dominios del conocimiento.

Un algoritmo también se puede definir como un proceso específico que toma algún valor o conjunto de valores como entrada (datos) y produce un valor o un conjunto de valores como salida (resultados). Es importante señalar que el término «proceso», en el área de la ingeniería de software, es mucho más complejo, ya que implica, entre otros elementos, la entrada, la salida y las actividades que forman el algoritmo. Sin embargo, se suelen usar como sinónimos.

Figura 1.2. Esquema de un algoritmo.

Se muestra un ejemplo a continuación:

Entrada: una secuencia de n números (temp1, temp2, temp3, …, tempn) que representan las temperaturas registradas durante el mes anterior.

Salida: el promedio mensual de temperatura (un número).

Algoritmo: secuencia de pasos necesarios para calcular el promedio: sumar los n números y luego dividir la suma obtenida entre n.

Figura 1.3. Ejemplo: cálculo del promedio de n temperaturas.

Los algoritmos se pueden clasificar como correctos e incorrectos. Un algoritmo es correcto si para cada instancia de entrada que recibe, termina con la salida correcta. Por otra parte, un algoritmo es incorrecto si no termina para algunas instancias de entrada o si devuelve una respuesta incorrecta.

Un algoritmo es correcto si para cada instancia de entrada que recibe, termina con la salida correcta.

Un algoritmo es incorrecto si no termina para algunas instancias de entrada o si devuelve una respuesta incorrecta.

En general, todo algoritmo debe reunir estas tres características:

•Precisión: los pasos deben ser muy claros, no debe existir ningún margen de ambigüedad.

•Determinismo: para cada conjunto de datos de entrada siempre debe arrojar los mismos resultados.

•Finitud: debe tener longitud finita.

Ejemplo 1.1: Cochinita pibil

La cochinita pibil es una comida típica de Yucatán, México, que se preparaba originalmente durante el festejo del día de los muertos (Xanal Pixan, «comida de las almas» en lenguaje maya) en la península yucateca. En época prehispánica, este platillo se preparaba con carne de faisán, jabalí o venado y se cocinaba en un horno pib (horno de tierra). En la actualidad, la carne de los animales de caza fue sustituida por carne de cerdo.

Ingredientes para 10 personas (es la entrada del algoritmo):

• 2 hojas de plátano (banana) pasadas por el fuego para ablandarlas.

• 1.5 kg de pierna de cerdo (se puede reemplazar por bondiola o cabeza de lomo de cerdo).

• 0.5 kg de lomo de cerdo con costilla.

• 200 g de achiote (nombre botánico: Bixa Orellana, urucú en Argentina, rocú, onoto o bija en la América tropical).

• 1 taza de jugo de naranja agria (toronja) o media de vinagre blanco de manzana y media de jugo de naranja dulce.

• ¼ de cucharadita de comino en polvo.

• 1 cucharadita de orégano seco.

• 1 cucharadita de pimienta blanca en polvo.

• ½ cucharadita de pimienta negra en polvo.

• ½ cucharadita de canela en polvo.

• 3 dientes de ajo molidos o exprimidos.

• ½ cucharadita de chile piquín.

• Sal al gusto.

• 125 g de manteca de cerdo.

Figura 1.4. Tacos de cochinita pibil.Crédito: https://blog.seccionamarilla.com.mx/cochinita-pibil-cerdo-pelon-yaxunah-yucatan/

Salsa para acompañarla:

• 8 rabanitos finamente picados.

• 1 cebolla morada, finamente rebanada.

• 4 chiles habaneros picados finamente.

• ¼ de taza de cilantro picado muy fino.

• 1 taza de jugo de naranja agria (toronja).

• Sal al gusto.

Preparación (es el algoritmo):

Coloca la carne sobre una fuente. Disuelve el achiote en el jugo de naranja agria, agrega las especias, remueve bien y baña la carne con la mezcla. Deja marinar durante 8 horas, o de un día para otro, en la nevera. Coloca adecuadamente las hojas de plátano sobre la encimera y agrega sobre ella la carne marinada. Añade a la carne la manteca derretida. Envuelve bien la carne con las hojas. Posteriormente, tápalas con papel de aluminio y cocina en un horno a 175 grados durante una hora y media aproximadamente. Lo ideal es que la carne se pueda deshacer con las manos después de la cocción. Si tiene horno a leña, puede cocinar la carne, envuelta como se describió anteriormente, durante 10-12 horas a fuego lento (de 75 a 90 grados).

Para la salsa hay que mezclar todos los ingredientes y dejar reposar al menos tres horas; aunque si se deja reposar toda una noche o un día completo es mejor.

Presentación (el plato preparado es la salida del algoritmo):

Sirve la cochinita pibil, y acompáñala con la salsa y tortillas de maíz, preferentemente recién hechas. Se puede maridar con un vino blanco afrutado, perfumado y con la acidez suficiente que dan los climas fríos.

1.2 DIAGRAMAS DE FLUJO

El diagrama de flujo es la representación gráfica de un algoritmo. Se compone principalmente de óvalos, rectángulos y rombos para definir conceptos, procesos y toma de decisiones, junto con flechas conectoras que establecen el flujo de los datos y la secuencia de las operaciones.

Un diagrama de flujo es la representación gráfica de un algoritmo.

En la Figura 1.5 presentamos un ejemplo de un diagrama de flujo. En este diagrama se leen dos números enteros, se calcula su promedio y se imprime el resultado.

Figura 1.5. Ejemplo de diagrama de flujo.

La idea de los diagramas de flujo fue presentada inicialmente en 1921 por Frank Gilbreth, en la Sociedad Americana de Ingenieros Mecánicos (ASME). Pero fue en la década de los 40 cuando el matemático Herman Goldstine (1913-2004), de la Universidad de Michigan en EE. UU., junto con el laureado matemático John Von Neumann —que en ese entonces se encontraba trabajando en el Proyecto Manhattan para la construcción de la primera bomba atómica—, comenzaron a utilizarlos para el desarrollo de programas informáticos. En la Figura 1.6 podemos apreciar una imagen en la que aparecen juntos Julian Bigelow, Herman Goldstine, Robert Oppenheimer y John Von Neumann.

Cuando se elabora un diagrama de flujo parece que la tarea primordial es resolver un problema modelándolo gráficamente. Sin embargo, subyace otra labor, esencial y casi mágica: la transferencia de conocimiento tácito (está en nuestra mente y refiere al conocimiento que usamos para solucionar el problema) a conocimiento explícito. Los modelos mentales que nos formamos para resolver un problema se convierten en conceptos en el diagrama de flujo. Cuando el conocimiento se hace explícito a través del diagrama, se hace más visible y accesible tanto para el desarrollador como para otras personas.

Este proceso es sustancial porque trasciende lo que estamos acostumbrados a realizar. Nos permite movernos desde lo invisible (el conocimiento tácito) a lo visible (el conocimiento explícito).

Figura 1.6. Julian Bigelow, Herman Goldstine, Robert Oppenheimer y John Von Neumann, en el Instituto de Estudios Avanzados de Princeton (EE. UU.).Crédito: https://commons.wikimedia.org/w/index.php?curid=19030040.

Una vez que tenemos el algoritmo o el diagrama de flujo, el paso siguiente es escribir el programa. Más adelante se explorará más en detalle lo que este concepto significa, pero por ahora basta con saber que un programa es la traducción del algoritmo en un conjunto de instrucciones mediante un lenguaje de programación.

1.2.1 SÍMBOLOS DEL DIAGRAMA DE FLUJO

Cuando uno comienza a resolver problemas y a modelarlos gráficamente mediante diagramas de flujo, observa fácilmente que estos adquieren formas diferentes. Estas diferencias se producen básicamente porque los problemas son de distinta naturaleza y para solucionarlos se realizan acciones o etapas en el proceso que implican el uso de símbolos diferentes.

Aunque existen decenas de símbolos, con fines didácticos utilizaremos solamente los más importantes, junto con las líneas y flechas, que se usan para indicar el flujo (la secuencia lógica de pasos) en el diagrama. En la siguiente tabla se presentan los símbolos.

Tabla 1.1. Símbolos utilizados en el diagrama de flujo.

Símbolo

Función del símbolo

Inicio / fin. Se utiliza para indicar el inicio y el fin del diagrama de flujo. Contiene alguna de estas palabras.

Lectura. Se usa para leer los datos de entrada.

Proceso. En su interior se representan las asignaciones, las operaciones aritméticas, los cambios de valor de las celdas de memoria, etc.

Escritura. Se utiliza para mostrar la impresión de resultados.

Decisión. En su interior se almacena una condición y, al evaluarse, dependiendo de si el resultado es verdadero o falso, se sigue por uno de los caminos. Este símbolo se usa en las estructuras selectivas if e if-else, así como en las estructuras repetitivas for y while.

Conector en página. Se utiliza para indicar una conexión dentro de la misma página de desarrollo.

Conector entre páginas. Se usa para indicar una conexión entre distintas páginas de desarrollo.

Módulo o subproblema. Se utiliza para indicar un subproblema que hay que resolver antes de continuar con el flujo normal del diagrama.

Flujo. Expresan la dirección del flujo en el diagrama. Solo pueden indicar direcciones hacia arriba, abajo, derecha e izquierda.

1.2.2 REGLAS PARA LA CONSTRUCCIÓN DEL DIAGRAMA DE FLUJO

El diagrama de flujo es la representación gráfica del conjunto de pasos, instrucciones o reglas bien definidas que permiten alcanzar un resultado o resolver un problema. Por otra parte, para que esta representación gráfica sea considerada válida —y, por lo tanto, no exista ningún grado de ambigüedad o distorsión con el algoritmo—, los símbolos y conectores se deben colocar de la forma correcta. A continuación, se presentan las reglas que deben aplicarse para el desarrollo de los diagramas de flujo.

1. Todo diagrama de flujo debe tener un inicio y un final.

2.Las líneas que se utilizan para representar el flujo en el diagrama deben ser verticales u horizontales. No se pueden utilizar líneas oblicuas, cruzadas o curvas.

3. El diagrama de flujo se construye de arriba hacia abajo y de izquierda a derecha. Además, a un símbolo no puede llegar más de un conector.

4. Si el diagrama de flujo requiere más de una hoja para su construcción, es necesario utilizar los conectores adecuados y, además, enumerar las hojas correspondientes.

5. La notación que se utiliza en el diagrama de flujo debe ser independiente del lenguaje de programación.

6. El diagrama de flujo debe poder ser comprendido por cualquier individuo con conocimientos del tema, independientemente del idioma que hable y del lenguaje de programación que utilice para su implementación.

1.3 TIPOS DE DATOS

Los tipos de datos que se pueden utilizar o procesar en un lenguaje de programación se clasifican en simples y estructurados.

Los simples tienen la particularidad de que utilizan una sola casilla o celda de memoria y, por lo tanto, solo se puede hacer referencia a un valor a la vez. Dentro de los datos de tipo simple encontramos los números, tanto enteros como reales, y el tipo booleano. En la Figura 1.7 a) podemos observar un dato simple, un número entero, identificado con el nombre de edad, que ocupa una sola casilla de memoria y hace referencia a un único valor, en este caso 10.

Los datos estructurados, por otra parte, se caracterizan por el hecho de que con un nombre se hace referencia a un grupo de celdas o casillas de memoria y, por lo tanto, pueden almacenar más de un valor. Dentro de este tipo de datos encontramos los números complejos, las cadenas de caracteres, las listas, los conjuntos, etc. En la Figura 1.7 b) podemos observar un dato estructurado que es una cadena de caracteres, identificado con el nombre de nombre_mascota, que hace referencia a un grupo de caracteres, en este caso charrúa.

Por ahora, solo se usarán datos estructurados tipo cadenas de caracteres, llamados str en Python. Los caracteres que forman la cadena deben encerrarse entre comillas dobles (") o comillas simples ('). Si la cadena contiene más de una línea, entonces se encierra entre tres comillas dobles (""") o comillas simples ('"). Más adelante se retoma el tema de las cadenas de caracteres.

Figura 1.7. Datos simples y estructurados: a) dato simple y b) dato estructurado.

Otra manera de clasificar los datos en Python es en inmutables y mutables. La primera categoría hace referencia a aquellos que no pueden cambiar o modificar su valor una vez asignado, mientras que los datos mutables sí pueden variar.

Dentro del grupo de los inmutables están los números (enteros, reales y complejos), las cadenas de caracteres y los booleanos, entre otros. Como se mencionó más arriba, un valor inmutable no puede actualizarse una vez definido. Observe el ejemplo de la Figura 1.7 b). La variable nombre_mascota tiene el valor “charrúa”, que se quiere cambiar por “Charrúa” por tratarse de un nombre propio. Sin embargo, esto no es posible; es decir, no hay manera de modificar el primer carácter de la cadena.

Figura 1.8. Datos inmutables – cadena de caracteres.

Otro aspecto importante de los inmutables es que pueden ser usados como claves, ya que tienen un valor único que los identifica y que no cambia. Este valor único se obtiene a partir de un concepto que se conoce como tabla hash o tabla de dispersión, por lo que también se dice que estos datos son hashable. Por la importancia de este tema, será tratado con mayor profundidad en libros subsecuentes.

Por otra parte, dentro del tipo mutable se encuentran las listas y los diccionarios, entre otros. De manera simple, se define una lista como un dato estructurado formado por cero, uno o más valores. Sin embargo, es relevante destacar que, por la importancia del tema, en el siguiente libro se tratan estos tipos de datos y algunos otros. En la Figura 1.9 a) se presenta un ejemplo de lista con los días laborables, en la cual se omitió el valor “miércoles”. Por medio de métodos que se estudiarán más adelante, es posible modificar la lista de tal manera que ahora incluya el valor faltante, b).

Figura 1.9. Datos mutables – lista.

En la Tabla 1.2