Libro FP 1
Libro FP 1
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE COMPUTACIÓN
CÁTEDRA DE COMPUTACIÓN I
Fundamentos de Programación
Con aplicaciones en la Ingeniería
2023
FUNDAMENTOS DE PROGRAMACIÓN
Con aplicaciones en la Ingeniería
Libro de estudio de la asignatura Computación I.
Fundamentos de Programación con Aplicaciones a la Ingeniería © 2023 by Alejandro
Bolívar is licensed under CC BY-NC 4.0
Se permite la copia, uso y distribución de este ejemplar, bajo los términos
de la licencia Creative Commons Atribución 4.0.
Tabla de contenido
Tabla de contenido ......................................................................................................... 2
1 Unidad I. Fases en la resolución de problemas .............................................................. 6
Análisis del Problema .............................................................................................. 7
Diseño del algoritmo ................................................................................................ 9
Codificación de un programa ................................................................................... 9
Compilación y ejecución de un programa ............................................................. 10
Verificación y depuración de un programa ............................................................ 10
Documentación y mantenimiento .......................................................................... 11
Unidad II. Conceptos básicos de programación ........................................................... 13
La computadora ..................................................................................................... 13
¿Cómo maneja la información un computador? .................................................... 13
Unidades de medida de la información almacenada. ............................................. 15
Partes del computador ............................................................................................ 16
Algoritmo. .............................................................................................................. 20
Representación gráfica de los algoritmos .............................................................. 25
Programas y Programación .................................................................................... 28
Unidad III. El lenguaje de Programación ..................................................................... 32
Lenguaje de Programación Python ........................................................................ 32
Características de Python ....................................................................................... 33
Ventajas ................................................................................................................. 33
Desventajas ............................................................................................................ 34
Instalación de Python ............................................................................................. 34
Depuración ............................................................................................................. 35
Tipos de Datos ....................................................................................................... 36
Elementos Básicos del Lenguaje ........................................................................... 44
Operadores ............................................................................................................. 49
Funciones predefinidas ....................................................................................... 63
Módulos Estándar ............................................................................................... 65
Entornos de desarrollo ........................................................................................ 69
Manejo de datos ................................................................................................. 76
Glosario .............................................................................................................. 80
Ejercicios Resueltos de Estructura Secuencial ................................................... 83
Unidad IV. Estructuras de Control ............................................................................... 98
Control de flujo de datos ........................................................................................ 98
Sangría ................................................................................................................... 98
Estructuras Selectivas ............................................................................................ 99
Ejercicios Resueltos con estructuras condicionales ............................................. 103
Estructuras Repetitivas ........................................................................................ 107
Herramientas de programación ............................................................................ 115
Secuencias y Series .............................................................................................. 118
Composición y descomposición de un número. .................................................. 125
Glosario ................................................................................................................ 129
Resumen ........................................................................................................... 129
Recomendaciones para la escritura de código limpio. ..................................... 130
Referencias ................................................................................................................. 135
3
Introducción
Este texto representa una guía detallada y accesible para desarrollar habilidades en
una de las disciplinas más relevantes e influyentes de nuestro tiempo. Espero que este libro
proporcione la base necesaria para avanzar en su formación como programador, así como
también permitirle desarrollar soluciones tecnológicas innovadoras e impactantes.
7
La información de que el triángulo es isósceles es irrelevante para la solución del
problema, ya que, si se conoce la longitud de la base y altura de un triángulo, no importa su
forma, ya que la fórmula de cálculo requiere solamente estas longitudes.
Ejemplo: Dado las longitudes de los catetos de un triángulo rectángulo, determine la
longitud de la hipotenusa.
1. ¿Qué información útil se suministra dentro del enunciado?
a. La longitud del primer cateto
b. La longitud del segundo cateto
c. El hecho de que el triángulo es rectángulo
2. ¿Qué resultados exige el enunciado?
a. La longitud de la hipotenusa
En este caso la información de que el triángulo es rectángulo es relevante, porque en
el proceso de síntesis de la solución se usa el teorema de Pitágoras para encontrar el resultado.
Sin esa información del enunciado, no existe una solución única al problema.
Antes del Diseño del Algoritmo primero es necesario realizar una pequeña síntesis
del análisis a fin de establecer las fórmulas matemáticas, los procesos básicos de
programación o la secuencia que deberá usarse dentro del diseño del algoritmo. Como es un
paso intermedio entre el análisis y el diseño de la solución, está pequeña síntesis se colocará
dentro del análisis del problema añadiendo como tercera pregunta ¿Cómo logro obtener los
resultados a partir de la información útil suministrada en el enunciado?
Para los ejemplos dados, el análisis completo sería:
Ejemplo: Dadas las longitudes de la base y la altura de un triángulo isósceles,
determine el área que encierra el triángulo.
1. ¿Qué información útil se suministra dentro del enunciado?
a. La longitud de la Base
b. La longitud de la altura
c. El hecho que el triángulo es isósceles IRRELEVANTE
2. ¿Qué resultados exige el enunciado?
a. El área encerrada por el triángulo
3. ¿Cómo logro obtener los resultados a partir de la información útil suministrada en el
enunciado?
a. Usando la fórmula area = base * altura / 2 por lo tanto la información de la
forma del triángulo es irrelevante.
Ejemplo: Dadas las longitudes de los catetos de un triángulo rectángulo, determine
la longitud de la hipotenusa.
1. ¿Qué información útil se suministra dentro del enunciado?
a. La longitud del primer cateto
8
b. La longitud del segundo cateto
c. El hecho de que el triángulo es rectángulo
2. ¿Qué resultados exige el enunciado?
a. La longitud de la hipotenusa
3. ¿Cómo logro obtener los resultados a partir de la información útil suministrada en el
enunciado?
a. Con el teorema de Pitágoras, donde hip2 = cat12 + cat22. El teorema de
Pitágoras sólo se aplica si el triángulo es rectángulo, por lo tanto, la
información de la forma es RELEVANTE.
Codificación de un programa
9
La codificación de un programa se realiza sustituyendo, las palabras y expresiones
del algoritmo o cualquier otra representación, por la sintaxis correspondiente en el lenguaje
de programación. En el caso de programas sencillos se puede omitir el diseño del algoritmo
para agilizar la codificación.
El programa también incluye una documentación que puede ser interna y externa. La
documentación interna es la que se incluye dentro del código del programa fuente mediante
comentarios significativos que ayudan a la comprensión del código, para ello se utiliza un
carácter determinado que indique el inicio de los comentarios. El programa no los necesita y
la computadora los ignora. Estas líneas de comentarios sólo sirven para hacer los programas
más fáciles de comprender. El objetivo del programador debe ser escribir códigos sencillos
y limpios. En cuanto a la documentación externa es la que se puede acceder externamente al
código donde se especifica principalmente el objetivo del programa y los datos que maneja,
adicionalmente del manual de usuario y de sistema.
10
de entrada que comprueben los límites del programa y valores de entrada que comprueben
aspectos especiales del programa.
La depuración es el proceso de encontrar los errores del programa y corregir o
eliminar dichos errores. Cuando se ejecuta un programa, se pueden producir tres tipos de
errores:
1. Errores de compilación. Se producen normalmente por un uso incorrecto de las
reglas del lenguaje de programación y suelen ser errores de sintaxis. Si existe un error de
sintaxis, la computadora no puede comprender la instrucción, no se obtendrá el programa
objeto y el compilador imprimirá una lista de todos los errores encontrados durante la
compilación.
2. Errores de ejecución. Estos errores se producen por instrucciones que la
computadora puede comprender, pero no ejecutar. Ejemplos típicos son: división por cero y
raíces cuadradas de números negativos. En estos casos se detiene la ejecución del programa
y se imprime un mensaje de error.
3. Errores lógicos. Se producen en la lógica del programa y la fuente del error suele
ser el diseño del algoritmo. Estos errores son los más difíciles de detectar, ya que el programa
puede funcionar y no producir errores de compilación ni de ejecución, y sólo puede advertirse
el error por la obtención de resultados incorrectos. En este caso se debe volver a la fase de
diseño del algoritmo, modificar el algoritmo, cambiar el programa fuente y compilar y
ejecutar una vez más.
Documentación y mantenimiento
La documentación de un problema consta de las descripciones de los pasos a dar en
el proceso de resolución de dicho problema. La importancia de la documentación debe ser
destacada por su decisiva influencia en el producto final. Los programas pobremente
documentados son difíciles de leer, más difíciles de depurar y casi imposibles de mantener y
modificar.
La documentación de un programa puede ser interna y externa. La documentación
interna es la contenida en líneas de comentarios. La documentación externa incluye análisis,
diagramas de flujo y/o pseudocódigos, manuales de usuario con instrucciones para ejecutar
el programa y para interpretar los resultados.
La documentación es vital cuando se desea corregir posibles errores futuros o bien
cambiar el programa. Tales cambios se denominan mantenimiento del programa. Después
de cada cambio la documentación debe ser actualizada para facilitar cambios posteriores. Es
práctica frecuente numerar las sucesivas versiones de los programas 1.0, 1.1, 2.0, 2.1, etc. (Si
los cambios introducidos son importantes, se varía el primer dígito [1.0, 2.0, ...]; en caso de
pequeños cambios sólo se varía el segundo dígito [2.0, 2.1…].)
11
Unidad 2
Conceptos básicos de
programación.
En esta unidad se presenta una introducción a los conceptos básicos
del área de la computación como el computador y sus partes, algoritmo y sus
diferentes representaciones, y finalmente los paradigmas de programación.
Unidad II. Conceptos básicos de programación
La computadora
Una computadora es un dispositivo electrónico, utilizado para procesar información
y obtener resultados, capaz de ejecutar cálculos y tomar decisiones a una velocidad de
millones de veces más rápida en comparación a un ser humano. La computadora está
conformada por dos partes: hardware y software. El hardware es la parte tangible mientras
que el software es el conjunto de programas que indican a la computadora las tareas que debe
realizar. Las computadoras procesan datos bajo el control de un conjunto de instrucciones
denominadas programas de computadora. Estos programas controlan y dirigen a la
computadora para que realice un conjunto de acciones (instrucciones) especificadas por
personas especializadas, llamadas programadores de computadoras [1].
13
dígitos para formar números, los diseñadores iniciales de las computadoras decidieron formar
números binarios como resultado de la combinación de dígitos binarios.
A diferencia de la forma como el ser humano crea
sus palabras y números, la computadora se diseñó para
trabajar con palabras de igual cantidad de dígitos binarios.
Esta cantidad fue definida por Werner Buchholz en 1957
como números binarios de 8 dígitos y lo bautizó con el
nombre de BYTE. La relación entre la computadora y el ser
humano fue definida dentro de lo que se conoce como
Tabla ASCII (American Standard Code for Information
Interchange) que fue publicada como estándar por primera
vez en 1967 y fue actualizado por última vez en 1986 (ver
Tabla 2-1). En la actualidad define códigos para 33
caracteres no imprimibles, de los cuales la mayoría son
caracteres de control obsoletos que tienen efecto sobre
cómo se procesa el texto, más otros 95 caracteres imprimibles que les siguen en la
numeración (empezando por el carácter espacio).
Tabla 2-1 ASCII de caracteres imprimibles.
Dec Hex Car Dec Hex Car Dec Hex Car Dec Hex Car Dec Hex Car Dec Hex Car
32 20 espacio 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p
33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r
35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s
36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o
Observe en la Tabla 2-1 la relación que existe entre los Byte y las letras del alfabeto.
Desde el punto de vista del sistema numérico binario, la letra A mayúscula es menor que la
letra B mayúscula y así sucesivamente; es decir que estas relaciones le permitirán a la
computadora ordenar alfabéticamente una serie de nombres, ya que los conjuntos de Byte
que las componen poseen la misma relación que el alfabeto.
A medida que la tecnología informática se difundió a lo largo del mundo, se
desarrollaron diferentes estándares y las empresas desarrollaron muchas variaciones del
código ASCII para facilitar la escritura de lenguas diferentes al inglés que usaran alfabetos
latinos. Se pueden encontrar algunas de esas variaciones clasificadas como "ASCII
Extendido". Estos nuevos símbolos corresponden a los bytes cuyo valor decimal está en el
rango de 128 a 255. Dentro de estos nuevos símbolos está la eñe mayúscula y minúscula, las
vocales acentuadas, símbolos gramaticales y símbolos de otras lenguas diferentes al
castellano.
14
La Real Academia Española (RAE) define la palabra Byte, como la unidad de
información compuesta generalmente de ocho bits
15
1 Tb = 1.024 Gb; 1 GB = 1.024 Mb = 1.048.576 kb = 1.073.741.824 b
16
proyectar o dar al ser humano cierta información. Ejemplos de unidades de salida:
Monitor, Impresora, Altavoces, Auriculares, entre otros.
c. Unidades de comunicación: Son los dispositivos que se encargan de comunicarse
con otras máquinas o computadoras, ya sea para trabajar en conjunto, o para enviar y
recibir información. Ejemplos de unidades de comunicación: Fax-Modem, Tarjetas
de Red, Wireless y Bluetooth, Controladores USB e Infrarrojos, entre otros.
d. Unidades de almacenamiento: Son los dispositivos que almacenan información por
bastante tiempo. La memoria RAM no puede ser considerada un periférico de
almacenamiento, ya que su memoria es volátil y temporal. Ejemplos de unidades de
almacenamiento: Disco Duro, Grabador o lector de CD, DVD, HD-DVD y Blu-ray,
Memoria Flash, Memoria portátil, entre otros.
Software
Se denomina software (palabra de origen ánglico), programática, equipamiento
lógico o soporte lógico a todos los componentes intangibles de una computadora, es decir,
al conjunto de programas y procedimientos necesarios para hacer posible la realización de
una tarea específica, en contraposición a los componentes físicos del sistema (hardware).
El software es quién al ejecutar una tarea da un ambiente de inteligencia similar a la
del ser humano (y a veces hasta sorprendente) por parte de la computadora, a la que se le
conoce como inteligencia aparente. Según su función, el software se clasifica en tres grandes
grupos:
a) Software de sistema: El software del sistema coordina las diferentes partes de un
sistema de computadora y conecta e interactúa entre el software de aplicación y el
hardware de la computadora. Otro tipo de software del sistema que gestiona, controla
las actividades de la computadora y realiza tareas de proceso comunes, se denomina
utility o utilidades (en algunas partes de Latinoamérica, utilerías). El software del
sistema que gestiona y controla las actividades de la computadora se denomina
sistema operativo. Otro software del sistema son los programas traductores o de
traducción de lenguajes de computadora que convierten los lenguajes de
programación, entendibles por los programadores, en lenguaje máquina que
entienden las computadoras.
El software del sistema es el conjunto de programas indispensables para que la
máquina funcione; se denominan también programas del sistema. Estos programas son,
básicamente, el sistema operativo, los editores de texto, los compiladores/intérpretes
(lenguajes de programación) y los programas de utilidad [1].
b) Software de programación: proporciona herramientas para ayudar al programador
a escribir programas informáticos y a usar diferentes lenguajes de programación de
forma práctica. Incluye entre otros: Editores de Texto, compiladores, intérpretes,
enlazadores, depuradores.
c) Software de aplicación: permite a los seres humanos llevar a cabo una o varias tareas
más específicas, en cualquier campo de actividad susceptible de ser automatizado o
asistido, con especial énfasis en los negocios.
17
Por otro lado, el software puede existir dentro de una computadora en tres formas
diferentes:
a) Código fuente: escrito por programadores. Contiene el conjunto de instrucciones
destinadas a la computadora. El conjunto de instrucciones no está escrito en un
lenguaje que la computadora pueda entender directamente, ya que está escrito en
lenguaje del ser humano.
b) Código objeto: resultado del uso de un compilador sobre el código fuente. Consiste
en una traducción de este último hacía el lenguaje nativo de la computadora (byte).
El código objeto no es directamente inteligible por el ser humano, pero tampoco es
puede ser ejecutado por la computadora ya que le falta añadir fragmentos de código
objeto para ser directamente funcional en la computadora donde quiere colocarse a
trabajar.
c) Código ejecutable: resultado de enlazar uno o varios fragmentos de código objeto.
Constituye un archivo binario con un formato tal que el sistema operativo es capaz
de cargarlo en la memoria de una computadora, y proceder a su ejecución.
2.4.3.2 Compiladores
Un compilador es un programa que traduce los programas fuente escritos en lenguaje
de alto nivel a lenguaje máquina. La traducción del programa completo se realiza en una sola
operación denominada compilación del programa; es decir, se traducen todas las
instrucciones del programa en un solo bloque. El programa compilado y depurado
18
(eliminados los errores del código fuente) se denomina programa ejecutable porque ya se
puede ejecutar directamente y cuantas veces se desee; sólo deberá volver a compilarse de
nuevo en el caso de que se modifique alguna instrucción del programa. De este modo el
programa ejecutable no necesita del compilador para su ejecución. Los traductores de
lenguajes típicos más utilizados son: C, C++, Java, C#, Pascal, FORTRAN y COBOL
(Figura 2-2).
Programa y dato
Los términos programa y dato se han utilizado sin que se definieran previamente, ya
que son ambos son términos conocidos dentro de otros contextos. Antes de seguir avanzando
en nuevos temas, es necesario dar una definición formal de estos términos dentro del contexto
de estudio: La Computación.
Un Programa es una secuencia de pasos, órdenes o instrucciones que al ejecutarse
logran cumplir una tarea específica. Un Dato es la información del ser humano representada
simbólicamente a través de letras y dígitos en la computadora. De esta manera, la
Programación de Computadoras es el proceso de crear programas que permitan
automatizar los procesos de cálculo manual, así como también la automatización de procesos
que incluyan la obtención de información para su posterior procesamiento.
La asignatura Computación I comprende la enseñanza de las técnicas básicas de
programación para la resolución de problemas matemáticos o no, que generen en los
estudiantes las habilidades de razonamiento para la automatización de los procesos de cálculo
en asignaturas de ingeniería.
Resumen
Una computadora es una máquina para procesar información y obtener resultados en
función de unos datos de entrada.
Hardware: parte física de una computadora (dispositivos electrónicos).
Software: parte lógica de una computadora (programas).
Las computadoras se componen de:
• Dispositivos de Entrada/Salida (E/S).
• Unidad Central de Proceso (Unidad de Control y Unidad Lógica y Aritmética).
• Memoria central.
• Dispositivos de almacenamiento masivo de información (memoria auxiliar o
externa).
19
El software del sistema comprende, entre otros, el sistema operativo Windows,
Linux, en computadoras personales y los lenguajes de programación. Los lenguajes de
programación de alto nivel están diseñados para hacer más fácil la escritura de programas
que los lenguajes de bajo nivel. Existen numerosos lenguajes de programación cada uno de
los cuales tiene sus propias características y funcionalidades, y normalmente son más fáciles
de transportar a máquinas diferentes que los escritos en lenguajes de bajo nivel. Los
programas escritos en lenguaje de alto nivel deben ser traducidos por un compilador antes de
que se puedan ejecutar en una máquina específica. En la mayoría de los lenguajes de
programación se requiere un compilador para cada máquina en la que se desea ejecutar
programas escritos en un lenguaje específico.
Los lenguajes de programación se clasifican en:
• Alto nivel: Pascal, FORTRAN, Visual Basic, C, Ada, Modula-2, C++, Java, Delphi,
C#, etc.
• Bajo nivel: Ensamblador.
• Máquina: Código máquina.
• Diseño de Web: SMGL, HTML, XML, PHP.
Los programas traductores de lenguajes son:
• Compiladores.
• Intérpretes.
Un método general para la resolución de un problema con computadora tiene las
siguientes fases:
1. Análisis del programa.
2. Diseño del algoritmo.
3. Codificación.
4. Compilación y ejecución.
5. Verificación.
6. Documentación y mantenimiento.
El sistema más idóneo para resolver un problema es descomponerlo en módulos más
sencillos y luego, mediante diseños descendentes y refinamiento sucesivo, llegar a módulos
fácilmente codificables. Estos módulos se deben codificar con las estructuras de control de
programación estructurada.
1. Secuenciales: las instrucciones se ejecutan sucesivamente una después de otra.
2. Repetitivas: una serie de instrucciones se repiten una y otra vez hasta que se cumple
una cierta condición.
3. Selectivas: permite elegir entre dos alternativas (dos conjuntos de instrucciones)
dependiendo de una condición determinada)
Algoritmo.
20
Concepto y propiedades
El objetivo fundamental de este texto es enseñar a resolver problemas mediante una
computadora. El programador de computadora es una persona que resuelve problemas, por
lo que para llegar a ser un programador eficaz se necesita aprender a resolver problemas de
un modo riguroso y sistemático.
Un algoritmo es un método para resolver un problema. Aunque la popularización del
término ha llegado con el advenimiento de la era informática, algoritmo proviene, de
Mohammed Al-Khôwârizmi, matemático persa que vivió durante el siglo IX y alcanzó gran
reputación por el enunciado de las reglas paso a paso para sumar, restar, multiplicar y dividir
números decimales; la traducción al latín del apellido en la palabra algorismus derivó
posteriormente en algoritmo. Euclides, el gran matemático griego (del siglo IV a. C.), quien
inventó un método para encontrar el máximo común divisor de dos números, se considera
junto con Al-Khôwârizmi el otro gran padre de la algoritmia (ciencia que trata de los
algoritmos).
El profesor NiklausWirth, inventor de Pascal, Modula-2 y Oberon, tituló uno de sus
más famosos libros, Algoritmos + Estructuras de datos = Programas, significándonos que
solo se puede llegar a realizar un buen programa con el diseño de un algoritmo y una correcta
estructura de datos. Esta ecuación será una de las hipótesis fundamentales consideradas para
el inicio del aprendizaje de la programación.
La resolución de un problema exige el diseño de un algoritmo que resuelva el
problema propuesto.
Los pasos para la resolución de un problema son:
1. Diseño del algoritmo, que describe la secuencia ordenada de pasos, sin
ambigüedades, que conducen a la solución de un problema dado. (Análisis del
problema y desarrollo del algoritmo.)
2. Expresar el algoritmo como un programa en un lenguaje de programación adecuado.
(Fase de codificación.)
3. Ejecución y validación del programa por la computadora.
Resolución de un problema.
21
En la ciencia de la computación y en la programación, los algoritmos son más
importantes que los lenguajes de programación o las computadoras. Un lenguaje de
programación es tan solo un medio para expresar un algoritmo y una computadora es solo un
procesador para ejecutarlo. Tanto el lenguaje de programación como la computadora son los
medios para obtener un fin: conseguir que el algoritmo se ejecute y se efectúe el proceso
correspondiente.
Componentes de un algoritmo
Conceptualmente, un algoritmo tiene tres componentes:
1. la entrada: son los datos sobre los que el algoritmo opera;
2. el proceso: son los pasos que hay que seguir, utilizando la entrada;
3. la salida: es el resultado que entrega el algoritmo.
Retroalimentación
Nota: En programación. el proceso es una secuencia de sentencias, que debe ser realizada en orden.
El proceso también puede tener ciclos (grupos de sentencias que son ejecutadas varias veces)
y condicionales (grupos de sentencias que sólo son ejecutadas bajo ciertas condiciones).
22
Para ello se debe realizar la serie de pasos necesarios y sus derivaciones para poder
llegar al resultado esperado del problema. Los pasos para definir y concretar un algoritmo
son los siguientes:
• Primer paso: Análisis previo del problema o necesidad. Lo primero que se tiene que
hacer, antes de comenzar con el desarrollo de cualquier algoritmo es llevar a cabo un
análisis pormenorizado de la situación o problema.
• Segundo paso: Definir los requerimientos. En este paso se debe definir exactamente
el problema que se tiene que solucionar y desglosarlo, incluyendo todas las
derivaciones que puedan surgir.
• Tercer paso: La identificación de los módulos. En este paso, identificar claramente
los módulos es tan importante como la identificación de los requerimientos. Esto es
así debido a que identificar correctamente los módulos nos va servir para simplificar
considerablemente la puesta en marcha de los pasos del algoritmo correcto para
nuestro problema, y que se identificó en el paso anterior.
• Cuarto paso: La creación del algoritmo. En este punto debe asegurarse que el
algoritmo cumpla con todos los requerimientos adecuados para llevar a cabo la
función encomendad. Esto es similar tanto para los algoritmos no computacionales
como para los algoritmos computacionales. En el caso de tratarse de un algoritmo
computacional, además deberá cumplir con ciertas características para poder luego
implementarse en cualquier lenguaje de programación.
• Quinto paso: La implementación del algoritmo. En el caso de los algoritmos
computacionales, la implementación de los mismos se realiza traduciendo el mismo
a un lenguaje de programación con el propósito de que cualquier computadora pueda
interpretar sus instrucciones y enviar a su hardware la información necesaria para
completar los pasos correspondientes y así obtener el resultado esperado.
• Sexto paso: Creación de las herramientas para llevar a cabo el algoritmo. En este
último, y cumplidos correctamente los pasos anteriores, se procede a crear las
herramientas necesarias para ejecutar el algoritmo desarrollado. En el caso de un
algoritmo computacional, se puede desarrollar mediante cualquier lenguaje de
programación una aplicación para poder llevarlo a cabo, la cual contará con una serie
de instrucciones ordenadas con el fin de representar el algoritmo diseñado y poder
ofrecer una solución a los requerimientos identificados. En los casos en que se trate
de un algoritmo no computacional, se puede desarrollar lo necesario teniendo en
cuenta los pasos que debe seguir el algoritmo, como por ejemplo una línea de
producción.
(Extraído de: https://www.tecnologia-informatica.com/algoritmo-definicion/)
Un ejemplo de Algoritmo de la vida diaria podría ser:
Preparación de una masa para pan:
1. cuente con manteca, harina, agua, levadura, y sal
2. mezcle los ingredientes
3. amase hasta formar un bolo
4. espere hasta leudar
23
5. caliente el horno
6. lleve el bolo al horno
7. retire del horno luego de X minutos
Observación: En este algoritmo no quedan claras muchas instrucciones, como por
ejemplo la cantidad de los ingredientes, temperatura del horno, tiempo de cocción, etc. Es
decir, se requiere mayor precisión. También se puede decir que el lenguaje no es muy claro
y no podrá ser interpretado por una persona que hable otro idioma, por ejemplo. Entonces es
necesario definir ciertos acuerdos tanto en la forma de expresar un algoritmo sintaxis y en las
palabras (o símbolos) que se utilizan para expresarlo.
Ejemplo: calcular la media de dos números
Algoritmo
1. Ingrese dos números, llamados a y b
2. Calcule la media de acuerdo a la fórmula (a+b)/2 y deje el resultado en m
3. Mostrar el valor de m
Observación: este algoritmo es más preciso y puede llevarse a un “programa” que
obtenga la solución.
Para expresar un algoritmo se utilizan variadas técnicas como: textual mediante
pseudocódigo, o gráfica mediante “diagramas de flujo”, u otras técnicas como UML
(lenguaje de modelamiento Unificado). A continuación, se le presentan varios ejemplos
adicionales de algoritmo:
Ejemplo 2-1
Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de
datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido;
en caso contrario, lo rechazará. Redactar el algoritmo correspondiente.
Los pasos del algoritmo son:
1. Inicio.
2. Leer el pedido.
3. Examinar la ficha del cliente.
4. Si el cliente es solvente, aceptar pedido;
5. en caso contrario, rechazar pedido.
6. Fin.
Ejemplo 2-2
Se desea diseñar un algoritmo para saber si un número es primo o no.
Un número es primo si solo puede dividirse entre sí mismo y entre la unidad (es
decir, no tiene más divisores que él mismo y la unidad). Por ejemplo, 9, 8, 6, 4, 12, 16,
20, etc., no son primos, ya que son divisibles entre números distintos a ellos mismos y a
la unidad. Así, 9 es divisible entre 3, 8 lo es entre 2, etc. El algoritmo de resolución del
problema pasa por dividir sucesivamente el número entre 2, 3, 4..., etcétera.
1. Inicio.
24
2. Poner X igual a 2 (X ← 2, X variable que representa a los divisores del número que
se busca N).
3. Dividir N entre X (N/X).
4. Si el resultado de N/X es entero, entonces N no es número primo y se bifurca al
punto 7; en caso contrario continuar el proceso.
5. Suma 1 a X (X ← X + 1).
6. Si X es igual a N, entonces N es primo; en caso contrario bifurcar al punto 3.
7. Fin.
Por ejemplo, si N es 131, los pasos anteriores serían:
1. Inicio.
2. X = 2.
3. 131/X. Como el resultado no es entero, se continúa el proceso.
4. X ← 2 + 1, luego X = 3.
5. Como X no es 131, se continúa el proceso.
6. 131/X resultado no es entero.
7. X ← 3 + 1, X = 4.
8. Como X no es 131 se continúa el proceso.
9. 131/X ..., etc.
10. Fin.
Ejemplo 2-3
Realizar la suma de todos los números pares entre 2 y 1000.
El problema consiste en sumar 2 + 4 + 6 + 8 ... + 1 000. Se utilizará las palabras
SUMA y NÚMERO para representar las sumas sucesivas (2 + 4), (2 + 4 + 6), (2 + 4 + 6
+ 8), etc. La solución se puede escribir con el siguiente algoritmo:
1. Inicio.
2. Establecer SUMA a 0.
3. Establecer NÚMERO a 2.
4. Sumar NÚMERO a SUMA. El resultado será el nuevo valor de la
5. suma (SUMA).
6. Incrementar NÚMERO en 2 unidades.
7. Si NÚMERO <= 1000 bifurcar al paso 4; en caso contrario, escribir el último
valor de SUMA y terminar el proceso.
8. Fin.
25
la descripción pueda servir fácilmente para su transformación en un programa, es decir, su
codificación.
Los métodos usuales para representar un algoritmo son:
1. diagrama de flujo,
2. lenguaje de especificación de algoritmos: pseudocódigo,
3. lenguaje español, inglés...
4. fórmulas.
Los métodos anteriores no suelen ser fáciles de transformar en programas. Una
descripción en español narrativo no es satisfactoria, ya que es demasiado prolija y
generalmente ambigua. Una fórmula, sin embargo, es un buen sistema de representación. Por
ejemplo, las fórmulas para la solución de una ecuación cuadrática (de segundo grado: ax2 +
bx + c = 0) son un medio sucinto de expresar el procedimiento algorítmico que se debe
ejecutar para obtener las raíces de dicha ecuación.
1. Elevar al cuadrado b.
2. Tomar a; multiplicar por c; multiplicar por 4.
3. Restar el resultado obtenido de 2 del resultado de 1, etcétera.
Sin embargo, no es frecuente que un algoritmo pueda ser expresado por medio de una
simple fórmula.
Pseudocódigo
El pseudocódigo es una forma de escribir algoritmos de manera informal y sin utilizar
un lenguaje de programación específico. El objetivo es describir la secuencia de pasos
necesarios para resolver un problema de manera clara y concisa, utilizando una serie de
convenciones y símbolos que permiten representar estructuras comunes como bucles,
condicionales, asignaciones de variables, entre otras operaciones.
El pseudocódigo original utiliza para representar las acciones sucesivas palabras
reservadas en inglés, similares a sus homónimas en los lenguajes de programación, como
start, end, stop, if-then-else, while-end, repeat-until, etc. seguidos de expresiones
matemáticas y/o lógicas que definen la acción a ejecutar. La escritura de pseudocódigo exige
normalmente la indentación (sangría en el margen izquierdo) de diferentes líneas. El objetivo
es que otras personas puedan entender el algoritmo sin necesidad de conocer un lenguaje de
programación específico. La ventaja del pseudocódigo es que, en su uso, en la planificación
de un programa, el programador se puede concentrar en la lógica y en las estructuras de
control y no preocuparse de las reglas de un lenguaje específico.
Por fortuna, aunque el pseudocódigo nació como un sustituto del lenguaje de
programación y, por consiguiente, sus palabras reservadas se conservaron o fueron muy
similares a las del idioma inglés, el uso del pseudocódigo se ha extendido en la comunidad
hispana con términos en español como: inicio, fin, parada, leer, escribir, si-
entonces-si_no, mientras, fin_mientras, repetir, hasta_ que, etc. Sin duda, el uso
de la terminología del pseudocódigo en español ha facilitado y facilitará considerablemente
el aprendizaje y uso diario de la programación.
26
Diagramas de Flujo
Un diagrama de flujo (flowchart) es una de
las técnicas de representación de algoritmos más
antigua y a la vez más utilizada, aunque su empleo
ha disminuido considerablemente, sobre todo,
desde la aparición de lenguajes de programación
estructurados. Un diagrama de flujo es un diagrama
que utiliza los símbolos estándar mostrados en la
Tabla 2-3 y que tiene los pasos de algoritmo escritos
en esas cajas unidas por flechas, denominadas líneas de flujo, que indican la secuencia en
que se debe ejecutar.
Los símbolos estándar normalizados por ANSI (American National Standard
Institute) son muy variados. En la Tabla 2-3 se representa una plantilla de dibujo típica donde
se contemplan los símbolos principales utilizados en el diagrama.
Tabla 2-3. Símbolos de diagrama de flujo.
27
Conector dentro de la página.
Programas y Programación
La Programación es un proceso de resolución de problemas. Las técnicas más
comunes incluyen análisis del problema, definición de los requerimientos del problema y
diseño, que, en la práctica es la realización de un algoritmo, que es un método para resolver
dicho problema.
Las computadoras procesan datos con el control de un conjunto de instrucciones
denominadas programa de computadora. Los programas señalan a la computadora las tareas
o acciones a realizar en función de un conjunto de instrucciones (acciones) especificadas por
el constructor del programa llamado programador.
Un programa de computadora o programa es una secuencia de sentencias diseñadas
para ejecutar una tarea. La Programación es un proceso de planeación y creación de un
programa. Desde un punto de vista práctico, un programa se escribe primero con un algoritmo
en pseudocódigo o en otra herramienta de programación y luego se traduce a un lenguaje de
programación tal como Python, C, C++ o Java.
Paradigmas de Programación
Uno de los elementos básicos a la hora de realizar un programa es la modelización
del problema que pretende resolver. Es preciso localizar las variables y los aspectos
relevantes, así como comprender los pasos necesarios para obtener el resultado a partir de los
datos iniciales, etc. Es decir, abstraer el problema, reduciendo sus detalles de forma que se
pueda trabajar con pocos elementos cada vez.
La algoritmia plantea la forma óptima de resolver problemas concretos, tales como la
ordenación de una lista de elementos, la búsqueda de un elemento en un conjunto, la
manipulación de conjuntos de datos, etc. Sin embargo, no proporcionan un marco general,
un enfoque, que nos permita plantear y formular las soluciones a un problema de forma
coherente.
Los paradigmas de programación llenan ese hueco, proporcionando guías tanto sobre
cómo realizar la abstracción de los datos como sobre el control de la ejecución. Es decir, los
paradigmas de programación son herramientas conceptuales para
analizar, representar y abordar los problemas, presentando sistematizaciones
alternativas o complementarias para pasar del espacio de los problemas al de las
implementaciones de una solución.
Es muy recomendable y productivo comprender el enfoque de distintos paradigmas,
puesto que presentan estrategias alternativas, incrementando nuestras herramientas
disponibles y reflexionar sobre muchas de las tareas que se realizan al crear un programa.
Además, a menudo ocurre que unos problemas se formulan de forma muy clara si se los
28
analiza según una perspectiva determinada, mientras que producen una gran complejidad
vistos de otra manera.
2.7.1.1 Algunos paradigmas habituales
Algunas de las formas de pensar los problemas que ha llegado a sistematizarse como
paradigmas de programación son:
1. La programación modular: Los programas se forman por partes separadas llamadas
módulos. Estos funcionan de forma independiente entre sí, se relacionan a través de
interfaces bien definidas.
2. La programación procedural: Un programa se compone de procedimientos
(subrutinas, métodos o funciones) que son fragmentos de código que pueden llamarse
desde cualquier punto de la ejecución de un programa, incluidos otros procedimientos
o él mismo. (ej. ALGOL)
3. La programación estructurada: Se puede expresar cualquier programa utilizando
únicamente tres estructuras de control: secuencial, condicional e iterativa. Los
programas se componen de partes menores con un único punto de entrada, y se trata
de aislarlos para evitar la complejidad que introducen los efectos colaterales. (ej.
Pascal, C, Ada)
4. La programación imperativa: Un programa se puede definir en términos de estado,
y de instrucciones secuenciales que modifican dicho estado. (ej. C, BASIC)
5. La programación declarativa: Es posible expresar un programa a través de
condiciones, proposiciones o restricciones, a partir de los que se obtiene la solución
mediante reglas internas de control. (ej. PROLOG)
6. La programación funcional: Se puede expresar un programa como una
secuencia de aplicación de funciones. Elude el concepto de estado del
cómputo y no precisa de las estructuras de control de la programación
estructurada. (ej. LISP, Haskell)
7. La programación orientada a objetos: Los programas se definen en
términos de “clases de objetos” que se comunican entre sí mediante el
envío de mensajes. Es una evolución de los paradigmas de la programación
procedural, estructurada y modular, y se implementa en lenguajes como
Java, Smalltalk, Python o C++.
2.7.1.2 Programación multiparadigma
Los paradigmas de programación son idealizaciones, y, como tales, no siempre se
presentan de forma totalmente ‘pura’, ni siempre resultan incompatibles entre sí. Cuando se
utilizan diversos paradigmas se produce lo que se conoce como programación
multiparadigma.
El uso de distintos modelos, según se adapten mejor a las diversas partes de un
problema o a nuestra forma de pensamiento, resulta también más natural y permite expresar
de forma más clara y concisa nuestras ideas.
29
Algunos lenguajes, como Haskell o Prolog están diseñados para encajar
perfectamente en la visión de un paradigma particular, mientras que otros, como Python, se
adaptan especialmente bien a la programación multiparadigma y dan gran libertad a la hora
de resolver un problema, al no imponen un mismo patrón para todos los casos.
30
Unidad 3. Conceptos
básicos de
programación
32
lenguajes, el código fuente se traduce a un pseudocódigo máquina intermedio llamado
bytecode la primera vez que se ejecuta, generando archivos .pyc o .pyo (bytecode
optimizado), que son los que se ejecutarán en sucesivas ocasiones.
Tipado dinámico: La característica de tipado dinámico se refiere a que no es
necesario declarar el tipo de dato que va a contener una determinada variable, sino que su
tipo se determinará en tiempo de ejecución según el tipo del valor al que se asigne, y el tipo
de esta variable puede cambiar si se le asigna un valor de otro tipo.
Fuertemente tipado: No se permite tratar a una variable como si fuera de un tipo
distinto al que tiene, es necesario convertir de forma explícita dicha variable al nuevo tipo
previamente. Por ejemplo, si se tiene una variable que contiene un texto (variable de tipo
cadena o string) no se tratará como un número (sumar la cadena "9" y el número 8). En otros
lenguajes el tipo de la variable cambiaría para adaptarse al comportamiento esperado, aunque
esto es más propenso a errores.
Multiplataforma: El intérprete de Python está disponible en multitud de plataformas
(UNIX, Solaris, Linux, DOS, Windows, OS/2, Mac OS, etc.) por lo que si no se utiliza
bibliotecas específicas de cada plataforma nuestro programa podrá correr en todos estos
sistemas sin grandes cambios.
Orientado a objetos: La orientación a objetos es un paradigma de programación en
el que los conceptos del mundo real relevantes para nuestro problema se trasladan a clases y
objetos en nuestro programa. La ejecución del programa consiste en una serie de
interacciones entre los objetos.
Python también permite la programación imperativa, programación funcional y
programación orientada a aspectos.
A diferencia de la mayoría de los lenguajes de programación, Python provee reglas
de estilos, a fin de poder escribir código fuente más legible y de manera estandarizada. Estas
reglas de estilo, son definidas a través de la Python Enhancement Proposal Nº 8 (PEP 8
https://www.python.org/dev/peps/pep-0008/).
Características de Python
Algunas características en la que se destaca Python son las siguientes:
a. Fácil de aprender y de programar
b. Fácil de leer (similar a pseudocódigo)
c. Interpretado (rápido para programar)
d. Datos de alto nivel (listas, diccionarios, sets, etc.)
e. Libre y gratuito
f. Multiplataforma (Windows, Linux y Mac)
g. Pilas incluidas (biblioteca estándar incluida en el paquete)
h. Cantidad de bibliotecas con funciones extras
i. Comunidad
Ventajas
Las ventajas del lenguaje Python son las siguientes:
33
1. Simplificado y rápido: Este lenguaje simplifica mucho la programación “hace que
te adaptes a un modo de lenguaje de programación, Python te propone un patrón”. Es
un gran lenguaje para scripting, si usted requiere algo rápido (en el sentido de la
ejecución del lenguaje), con unas cuantas líneas ya está resuelto.
2. Elegante y flexible: El lenguaje le da muchas herramientas, si usted quiere listas de
varios tipos de datos, no hace falta que declares cada tipo de datos. Es un lenguaje tan
flexible usted no se preocupa tanto por los detalles.
3. Programación sana y productiva: Programar en Python se convierte en un estilo
muy sano de programar: es sencillo de aprender, direccionado a las reglas perfectas,
le hace como dependiente de mejorar, cumplir las reglas, el uso de las líneas, de
variables”. Además, es un lenguaje que fue hecho con productividad en mente, es
decir, Python le hace ser más productivo, le permite entregar en los tiempos que me
requieren.
4. Ordenado y limpio: El orden que mantiene Python, es de lo que más les gusta a sus
usuarios, es muy legible, cualquier otro programador lo puede leer y trabajar sobre el
programa escrito en Python. Los módulos están bien organizados, a diferencia de
otros lenguajes.
5. Portable: Es un lenguaje muy portable (ya sea en Mac, Linux o Windows) en
comparación con otros lenguajes. La filosofía de baterías incluidas, son las
bibliotecas que más usted necesita al día a día de programación, ya están dentro del
interprete, no tiene la necesidad de instalarlas adicionalmente con en otros lenguajes.
6. Comunidad: Algo muy importante para el desarrollo de un lenguaje es la comunidad,
la misma comunidad de Python cuida el lenguaje y casi todas las actualizaciones se
hacen de manera democrática.
Desventajas
Las desventajas del lenguaje Python son las siguientes:
1. Curva de aprendizaje: La “curva de aprendizaje cuando ya estás en la parte web no
es tan sencilla”.
2. Hosting: La mayoría de los servidores no tienen soporte a Python, y si lo soportan,
la configuración es un poco difícil.
3. Bibliotecas incluidas: Algunas bibliotecas que trae por defecto no son del gusto de
amplio de la comunidad, y optan a usar bibliotecas de terceros.
Instalación de Python
Para la descarga del lenguaje Python se ingresa al sitio: python.org (descargar la
versión más actual 3.X). Se ejecuta el programa descargado y se procede a instalarlo
(seleccionar 'Add Python 3.X to PATH').
34
Luego de haberse instalado se puede ejecutar desde el menú de opciones de Windows.
Depuración
La programación es un proceso complejo y, por ser realizado por humanos, a menudo
desemboca en errores. Por razones caprichosas, esos errores se llaman bugs y el proceso de
buscarlos y corregirlos se llama depuración (en inglés “debugging”).
Hay tres tipos de errores que pueden ocurrir en un programa: de sintaxis, en tiempo
de ejecución y semánticos. Es muy útil distinguirlos para encontrarlos más rápido.
Errores sintácticos
Python sólo puede ejecutar un programa si el programa es correcto sintácticamente.
En caso contrario, es decir si el programa no es correcto sintácticamente, el proceso falla y
devuelve un mensaje de error. El término sintaxis se refiere a la estructura de cualquier
programa y a las reglas de esa estructura.
Para la mayoría de lectores, unos pocos errores sintácticos no son significativos, y
por eso puede leerse el código sin anunciar errores de sintaxis. Python no es tan permisivo.
Si hay, aunque sea un solo error sintáctico en el programa, Python mostrará un mensaje de
error y abortará la ejecución del programa. Durante las primeras semanas de su carrera como
programador pasará, seguramente, mucho tiempo buscando errores sintácticos. Sin embargo,
tal como adquiera experiencia tendrá menos errores y los encontrará más rápido.
>>> 4/*8SyntaxError: invalid syntax
>>> pirnt('Hola mundo!')
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
pirnt('Hola mundo!')
NameError: name 'pirnt' is not defined
35
Con los programas iniciales los errores en tiempo de ejecución ocurrirán con poca
frecuencia, así que puede pasar bastante tiempo hasta que vea uno.
>>> alumnos =56
>>> grupos =0
>>> alum_grupo =alumnos/grupos
Traceback (most recent call last):
File "<pyshell#90>", line 1, in <module>
alum_grupo = alumnos/grupos
ZeroDivisionError: division by zero
Errores semánticos
El tercer tipo de error es el error semántico. Si hay un error de lógica en su programa,
el programa se ejecutará sin ningún mensaje de error, pero el resultado no será el deseado.
Será cualquier otra cosa. Concretamente, el programa hará lo que usted le dijo.
A veces ocurre que el programa escrito no es el programa que se tenía en mente. El
sentido o significado del programa (su semántica) no es correcto. Es difícil detectar los
errores de lógica, porque requiere trabajar al revés, observando el resultado del programa
para averiguar lo que hace.
# dada la base y la altura de un triángulo rectángulo,
# determine el área.
>>> base = 4
>>> altura = 2
>>> area = base / altura
>>> print(area)
2.0
Depuración experimental
Una de las técnicas más importantes que usted aprenderá es la depuración. Aunque a
veces es frustrante, la depuración es una de las partes más intelectualmente ricas, interesantes
y estimulantes de la programación.
La depuración es una actividad parecida a la tarea de un investigador: se tienen que
estudiar las claves para inducir los procesos y eventos que llevaron a los resultados que tiene
a la vista.
La depuración también es una ciencia experimental. Una vez que se tiene la idea de
cuál es el error, se modifica el programa y se intenta nuevamente. Si su hipótesis fue la
correcta se pueden predecir los resultados de la modificación y estará más cerca de un
programa correcto. Si su hipótesis fue errónea tendrá que idearse otra hipótesis.
Para algunas personas, la programación y la depuración son lo mismo: la pro-
gramación es el proceso de depurar un programa gradualmente hasta que haga lo que usted
quiera. La idea es que debería usted comenzar con un programa que haga algo y hacer
pequeñas modificaciones, depurándolas sobre la marcha, de modo que siempre tenga un
programa que funcione.
Tipos de Datos
Una característica de Python es la cantidad y versatilidad de sus tipos de datos.
Conocerlos en profundidad sirve para tener un buen criterio a la hora de elegir como modelar
36
nuestros datos. En líneas generales los tipos de datos (ver Figura 3-1) se dividen en primarios
o simple y compuesto o derivados:
Primarios (o primitivos):
Los datos elementales son los datos simples, llamados también escalares por ser
objetos indivisibles. Los datos simples se caracterizan por tener asociado un solo valor y son
de tipo entero, real o de coma/punto flotante (float), booleano y carácter. En Python no existe
el tipo de dato simple carácter. Aunque el dato conste de solo una letra o carácter ASCII se
representa como un dato compuesto de cadena de caracteres (string).
3.7.1.1 Números Enteros
En matemáticas los números enteros (integer) son los números naturales, sus
negativos y el cero. Ejemplos de enteros: 5, -20, 0, -104. En Python los enteros se definen
con la palabra int y dispone de una función interna type que devuelve el tipo de dato dado:
>>> type(7)
<class 'int'>
>>> a = 45
>>> type(a)
<class 'int'>
37
En Python los datos de tipo entero se almacenan con “precisión arbitraria”, es decir
se utiliza el número de bytes necesarios para representar el número entero. Por ejemplo, los
números 5 (binario: 101) y 200 (27+26+23, binario: 11001000) se representan:
>>> bin(5)
'0b101'
>>> bin(200)
'0b11001000'
La función interna de Python bin(N) convierte un número entero a string con el binario
equivalente (0b+binario). Para comprobar el amplio rango de valores en Python, pruebe con
un valor mayor que 263, como 2220:
>>> 2**220
1684996666696914987166688442938726917102321526408785780068975640576
38
<class 'float'>
>>> .2e2
20.0
>>> 1.1 + 2.2 # se representa con error en punto flotante binario
3.3000000000000003
La causa de este problema es que Python no esconde el hecho que las operaciones
que involucran números de punto flotante no son exactas debido a que hay un error inherente
al pasar internamente los números de la base 2 (la que usa realmente el hardware) a la base
10. Este error ocurre con todos los lenguajes, la diferencia es que la mayoría de los lenguajes
oculta este hecho usando algún tipo de redondeo. En Python este redondeo hay que hacerlo
de manera explícita (si hace falta para la aplicación que se está haciendo). Una manera de
contrarrestar esto es con la función incorporada (built-in) round(). Esta función requiere 2
parámetros. El primero es el número que se quiere redondear y el segundo es la precisión con
la que se quiere mostrar dicho valor. En el siguiente ejemplo se redondea el resultado de la
suma a un solo decimal:
>>> round(0.1 + 0.1 + 0.1 - 0.3,1)
0.0
39
3.7.1.3 Cadenas.
Los textos se llaman cadena de caracteres (en inglés string). Los caracteres están
ordenados de acuerdo a la tabla ASCII. Por ejemplo, los caracteres ASCII ordenados del
valor decimal 20 al 127 son:
! " # $ % & ' ( ) * +, -. / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d
e f g h i j k l m n o p q r s t u v w x y z { | } ~
El orden en que se representan sirve para evaluar cuál es mayor que otro, de acuerdo
al valor numérico en que figuran en el código ASCII. Por ejemplo 'b' es mayor que 'a'. El tipo
carácter no está definido en Python. Los caracteres simples se definen igual que un texto con
una sola letra, es decir como una cadena de caracteres(string).
>>> type('a')
<class 'str'>
Derivados
a) Los datos compuestos o estructurados comprenden aquellos datos con elementos
de valores de un mismo tipo o de diferentes tipos, que se representan unificados
para ser guardados o procesados. Las listas, diccionarios, tuplas, entre otros serán
tratados en temas posteriores. Estos datos se pueden subclasificar según distintos
parámetros: Ordenados (o secuenciales) / Desordenados y Mutables / Inmutables.
Los tipos de datos en Python se pueden resumir en la Tabla 3-1
Tabla 3-1. Tipos de datos en Python
Tipo Clase Notas Ejemplo
int Número Precisión fija, convertido en 42
entero long en caso de overflow.
long Número Precisión arbitraria 42L ó
entero 456966786151987643L
float Número Coma flotante de doble 3.1415927
decimal precisión
complex Número Parte real y parte imaginaria (4.5 + 3j)
complejo j.
bool Booleano Valor booleano verdadero o True o False
falso
40
str Cadena Inmutable ‘Cadena’
list Secuencia Mutable, puede contener [4.0, ‘Cadena’,
objetos de diversos tipos True]
tuple Secuencia Inmutable, puede contener (4.0, ‘Cadena’,
objetos de diversos tipos True)
set Conjunto Mutable, sin orden, no set([4.0, ‘Cadena’,
contiene duplicados True])
frozen Conjunto Inmutable, sin orden, no frozenset([4.0,
set contiene duplicados ‘Cadena’,
True])
dict Mapping Grupo de pares clave:valor {‘key1’: 1.0,
‘key2’: False}
Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecución.
Inmutable: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecución.
Los textos 'Hola' o "Casa de madera" son de tipo string en general en todos los lenguajes.
El valor 15 es un número de tipo entero (int), sin embargo, el valor '15' es un string (str). Si
se incluyen comillas (") o comillas simples (') dentro de un string pueden dar resultados
erróneos cuando estos caracteres se usan para delimitar el string. Se puede emplear dentro
del texto aquel carácter que no se ha usado de delimitador:
>>> 'Ella dijo "Qué lindo"'
'Ella dijo "Qué lindo"'
>>> "He doesn't know"
"He doesn't know"
Sin embargo, en estos casos se puede también usar el carácter barra invertida (\) que
sirve de escape para agregar comillas u otras acciones dentro del string:
>>> print('He doesn\'t know I \"will come\"')
He doesn't know I "will come"
El carácter barra invertida (llamado carácter de escape) seguido de n (\n) indica salto
a nueva línea. Se pueden incluir múltiples líneas en un string usando triples comillas """ ...
"""".
En este caso los fines de línea están incluidos. Los salto a nueva línea se aprecian
cuando se presenten en pantalla con la función interna print():
>>> print('Cambiamos de línea \nNueva línea')
41
Cambiamos de línea
Nueva línea
>>> """
Programa:
Autor:
Fecha:
"""
'\n Programa:\n Autor:\n Fecha:\n '
Este error se debe a que Python es un lenguaje de tipado dinámico pero fuerte. Es
dinámico porque en cualquier momento se puede definir una variable con un tipo de dato
distinto. En los lenguajes de tipado estático una vez que se crea un dato de un tipo particular,
esto no puede alterarse. Python es de tipado fuerte porque una vez definido, este no puede
convertirse automáticamente en otro tipo de datos. Por ejemplo, en PHP '1' + 1 es igual a 2.
En Python sumar un string con un int es imposible, porque Python no presupone nada con
respecto a cómo hacer esta operación no definida. Lo que sí es posible es "convertir" el '1' en
1 y obtener 2 (o convertir el 1 en '1' y obtener '11').
42
Listas
Se trata de conjuntos ordenados de elementos, encerrados por corchetes y separados
por comas. El orden comienza con el índice 0 para el primer lugar de la Lista. Pueden
agruparse valores de distintos tipos de datos básicos, y es posible agregar, eliminar o
modificar elementos de las listas en cualquier momento (las listas son mutables en Python).
In [7]:
# Definición de una lista y referencia a un índice
lista = [10,20,30,40]
print(lista)
print(lista[0])
print(lista[3])
[10, 20, 30, 40]
10
40
In [8]:
# Modificación de una lista
lista[1] = 25
print(lista)
[10, 25, 30, 40]
In [9]:
# Generación de porciones a partir de una lista
sublista = lista[1:3]
print(lista)
print(sublista)
print(lista[:-1])
print(lista[:])
[10, 25, 30, 40]
[25, 30]
[10, 25, 30]
[10, 25, 30, 40]
Tuplas
Las Tuplas son básicamente listas de elementos estáticas, es decir, que no pueden
modificarse (las Tuplas son inmutables en Python). Para su definición, en lugar de corchetes
se encierran valores separados por comas entre paréntesis.
In [10]:
# Definición de una tupla y referencia a un índice
tupla = (6, 7, 8,9)
print(tupla)
print(tupla[0])
print(tupla[3])
(6, 7, 8, 9)
6
9
In [11]:
# Generación de porciones a partir de una tupla
subtupla = tupla[1:3]
print(tupla)
print(subtupla)
print(tupla[:-1])
print(tupla[:])
43
(6, 7, 8, 9)
(7, 8)
(6, 7, 8)
(6, 7, 8, 9)
La similitud entre listas y tuplas es tan explícita que se puede bloquear una lista
transformándola en una tupla con la función tuple() o bien desbloquear una tupla para
transformarla en una lista con la función list()
In [12]:
print(tuple(lista))
print(list(tupla))
(10, 25, 30, 40)
[6, 7, 8, 9]
Diccionarios
En los Diccionarios cada elemento se compone de un par clave-valor, y para su
definición es necesario encerrar los elementos entre llaves. Es posible acceder a un valor
utilizando su clave, pero no al revés. Por este motivo, no se pueden repetir las claves para
elementos distintos, pero sí es posible agregar, eliminar o modificar valores (Los diccionarios
son mutables).
In [13]:
# Definición de un diccionario
diccionario = {"Codigo":7512,"Materia":"Análisis Numérico I"}
print(diccionario)
{'Codigo': 7512, 'Materia': 'Análisis Numérico I'}
In [14]:
# Referencia a un índice
print(diccionario["Codigo"])
print(diccionario["Materia"])
7512
Análisis Numérico I
44
f. Las palabras reservadas del lenguaje están prohibidas. En caso de que intente dar
un nombre incorrecto a una variable, Python mostrará un mensaje de error al
ejecutar el programa.
g. Python permite identificadores con vocales acentuadas, como área, incluso la ñ y
las letras griegas. Aunque no es recomendable esta práctica por si se cambia de
lenguaje de programación.
Aunque no es obligatorio, normalmente conviene que el nombre de la variable esté
relacionado con la información que se almacena en ella, para que sea más fácil entender el
programa. Mientras se escribe un programa, esto no parece muy importante, pero si consulta
un programa que ha escrito hace tiempo (o que ha escrito otra persona), te resultará mucho
más fácil entender el programa si los nombres están bien elegidos.
En el caso de definir una cadena, es decir una variable que contiene valores
alfanuméricos (letras, números y caracteres especiales), debe escribir su valor entre comillas
(") o apóstrofes ('), como prefiera.
Hay que tener cuidado también con las funciones internas o predefinidas del lenguaje
(built-in functions), se pueden consultar la lista actual de funciones internas en:
https://docs.python.org/3.3/library/functions.html. Si se identifica una variable con el
nombre de una función predefinida, ésta luego no podrá ser llamada pues su identificador se
ha sobrescrito con la variable. Por ejemplo, la función type se utiliza para saber el tipo de
dato, si a una variable se le identifica con el nombre type, se pierde esta función en el
programa.
45
Variables
Una variable es un objeto o tipo de datos cuyo valor puede cambiar durante el
desarrollo del algoritmo o ejecución del programa. Dependiendo del lenguaje, hay diferentes
tipos de variables, tales como enteras, reales, carácter, lógicas y de cadena. Una variable
que es de un cierto tipo puede tomar únicamente valores de ese tipo. Una variable de carácter,
por ejemplo, puede tomar como valor sólo caracteres, mientras que una variable entera puede
tomar sólo valores enteros [1].
Si se intenta asignar un valor de un tipo a una variable de otro tipo se producirá un
error de tipo. Una variable se identifica por los siguientes atributos: nombre que lo asigna y
tipo que describe el uso de la variable.
En Python, una variable se define con la sintaxis:
>>> identificador = valor_de_la_variable
46
Python creará un nuevo número
entero con el valor 78 y luego la variable y
hará referencia a este número recién creado. Ahora
Todavía
apunto al
En resumen: en Python una variable apunto al
valor 78
valor 42
no se guarda directamente en la memoria; se
crea un objeto (cuya posición en la memoria
se llama identidad); y se asocia el
identificador de la variable a la identidad de
ese objeto. La Figura 3-2 muestra un ejemplo
del uso de variables de un mismo valor en
Python, comparado con otros lenguajes de programación [3].
Constante
Una constante es un dato que permanece sin cambios durante todo el desarrollo del algoritmo
o durante la ejecución del programa [1].
En Python no se puede utilizar constantes, para no modificar su valor en el código, se
debe utilizar como norma nombres descriptivos y en mayúsculas separando las palabras por
guiones bajos, antes y después del signo igual “=”, coloque un espacio en blanco, por
ejemplo:
>>> ACELERACION_GRAVEDAD = 10
Variables no inicializadas
En Python, la primera operación sobre una variable debe ser la asignación de un valor.
No se puede usar una variable a la que no se ha asignado previamente un valor:
>>> a + 2
Traceback (most recent call last)
File "<stdin>", line 1, in ?
NameError: name ’a’ is not defined
47
Asignación múltiple
Otra de las ventajas que Python provee, es la de poder asignar en una sola instrucción,
múltiples variables:
nombre, cedula, edad = 'José', 35125569, 25
En una sola instrucción, se declaran tres variables: nombre, cédula y edad a las cuales
se le asigna un valor determinado a cada una.
Comentarios
La documentación de un programa es el conjunto de información interna y externa al
programa, que facilitará su posterior mantenimiento y puesta a punto. La documentación
puede ser interna y externa. La documentación externa es aquella que se realiza
externamente al programa y con fines de mantenimiento y actualización; es muy importante
en las fases posteriores a la puesta en marcha inicial de un programa. La documentación
interna es la que se acompaña en el código o programa fuente y se realiza a base de
comentarios significativos. Estos comentarios se representan con diferentes notaciones,
según el tipo de lenguaje de programación.
En Python, los comentarios comienzan con el signo numeral (#) seguido de un
espacio. La siguiente línea representa un comentario y, por lo tanto, sería ignorada por el
intérprete de Python:
>>> # Esto es un comentario
Esta sección es estrictamente voluntaria, sin embargo, es muy útil cuando varios
usuarios programan en el mismo archivo.
Nombre El nombre del archivo al guardar por primera vez. En este caso de
ejemplo_programa.py.
48
Propósito La finalidad que se persigue al crear el programa, * Crear gráfica del
seno*, * Calcular los coeficientes de un polinomio*, etc.
Origen Si el origen del programa no es propio conviene saber su procedencia
por si se debe consultar de nuevo la fuente original en un futuro.
Autor(es) Los nombres de los creadores del programa.
Creación Fecha de creación del programa.
Historia En caso de modificaciones posteriores, es en esta sección donde se
indica la modificación, la fecha de la realización y el autor de la
misma.
Dependencias Módulos necesarios para la ejecución del programa. Por ejemplo:
scipy, matplotlib.
Licencia Apartado correspondiente a los derechos de autor.
PEP 8: comentarios, Comentarios en la misma línea del código deben separarse con
dos espacios en blanco. Luego del símbolo # debe ir un solo espacio en blanco.
Punto py
Hay un convenio por el que los archivos que contienen programas Python tienen
extensión py en su nombre. La extensión de un nombre de archivo son los caracteres del
mismo que suceden al (último) punto. Un archivo llamado ejemplo.py tiene extensión py.
La idea de las extensiones viene de antiguo y es un mero convenio. Puedes prescindir de
él, pero no es conveniente. En entornos gráficos (como KDE, Gnome o Microsoft
Windows) la extensión se utiliza para determinar qué icono va asociado al archivo y qué
aplicación debe arrancarse para abrir el archivo al hacer clic (o doble clic) en el mismo.
Operadores
Los operadores son aquellos elementos del lenguaje que combinan variables,
constantes, valores literales, instrucciones, etc., para obtener un valor numérico, lógico, de
cadena, etc., como resultado.
La combinación de operadores con variables, instrucciones, etc., se denomina
expresión, mientras que a los elementos integrantes de una expresión y que no son
operadores, se les denomina operandos.
En función de la complejidad de la operación a realizar, o del tipo de operador
utilizado, una expresión puede ser manipulada a su vez como un operando dentro de otra
expresión de mayor nivel.
Los operadores se clasifican en las categorías detalladas a continuación, según el tipo
de expresión a construir.
a) aritméticas,
b) relaciónales,
c) lógicas,
d) carácter.
49
El resultado de la expresión aritmética es de tipo numérico; el resultado de la
expresión relacional y de una expresión lógica es de tipo lógico, el resultado de una expresión
de cadena es de tipo cadena.
Operadores Aritméticos
Un operador aritmético (Tabla 3-2) toma dos operandos como entrada, realiza un
cálculo y devuelve el resultado.
Considera la expresión, “a = 2 + 3”. Aquí, 2 y 3 son los operandos y + es el operador
aritmético. El resultado de la operación se almacena en la variable a.
Tabla 3-2. Operadores Aritméticos.
Nombre Símbolo Ejemplo Resultado Resultado tipo
Suma + a = 10 + 5 a es 15 Entero si a y b
enteros; real si
alguno es real
Resta - a = 12 - 7 a es 5 Entero si a y b
enteros; real si
alguno es real
Negación a = -5 a es -5 De igual tipo, con
signo contrario
Multiplicación * a = 7 * 5 a es 35 Entero si a y b
enteros; real si
alguno es real
División / a = 12.5 / 2 a es 6.25 Siempre es real
División // a = 12.5 // 2 a es 6.0 Devuelve la parte
entera entera del cociente
a÷b
Módulo % a = 27 % 4 a es 3 Devuelve el resto de
la división a÷b
Exponente ** a = 2 ** 3 a es 8 Entero si a y b
enteros; real si
alguno es real
Operadores aritméticos
50
Prioridad de operadores aritméticos
Potenciación ( ** )
Negación ( - )
Multiplicación y división real ( * , /)
División entera ( // )
Resto de división ( % )
Suma y resta ( + , - ) Nota: La potenciación es
asociativa por la derecha. La expresión
2
2 ** 3 ** 2 equivale a 2(3 ) = 29 = 512, y no a (23 )2 = 82 = 64
3.9.1.1 División Entera
En Python 2 el resultado de dividir dos números enteros se redondea al entero más
cercano. Como resultado de dividir 3/2 se obtendrá 1. Para obtener una división con punto
flotante tanto el numerador como el denominador deben ser explícitamente float. Por tanto,
3.0/2 o 3/2.0 o 3.0/2.0 su resultado es 1.5; Python 3 evalúa 3 / 2 como 1.5 por defecto, lo cual
es más intuitivo para los programadores.
3.9.1.2 Ejemplo de operadores numéricos
>>> a = 26
>>> b = 11.3
>>> c = 5
>>> d = 3.5
51
a) 1 / 2 / 4.0 g) 4.0 ** (1 / 2) + 1 / 2
b) 1 / 2.0 / 4.0 h) 4.0 ** (1.0 / 2) + 1 / 2.0
c) 1 / 2.0 / 4 i) 3e3 / 10
d) 1.0 / 2 / 4 j) 10 / 5e-3
e) 4 ** .5 k) 10 / 5e-3 + 1
f) 4.0 ** (1 / 2) l) 3 / 2 + 1
52
>>> b1 = 3
>>> c1 = 3
>>> # igual
>>> c = a == b
>>> c
>>> # diferente
>>> d = a1 != b
>>> d
Operaciones de texto
Los operadores + y * tienen otras interpretaciones cuando sus operandos son strings.
+ es el operador de concatenación de strings: une dos strings uno después del otro:
>>> 'perro' + 'gato'
'perrogato'
Otras operaciones que pueden ser útiles son: obtener el i-ésimo carácter de un string
(partiendo desde cero) usando los corchetes:
>>> nombre = 'Pedro'
>>> nombre[0]
'P'
>>> nombre[1]
'e'
>>> nombre[2]
'd'
53
Comparar strings alfabéticamente con los operadores relacionales (lamentablemente
no funciona con acentos y eñes):
>>> 'a' < 'abad' < 'abeja'
True
>>> 'zapato' <= 'alpargata'
False
Operadores Lógicos
Hay tres operadores lógicos en Python: la y lógica o conjunción (and, ver Tabla 3-5),
la o lógica o disyunción (or, ver Tabla 3-6) y el no lógico o negación (not, ver Tabla 3-7).
El operador and devuelve como resultado el valor verdadero si y sólo si son ciertos
sus dos operandos. Esta es su tabla de verdad:
Tabla 3-5. Operador lógico and.
and
operando resultado
izquierdo derecho
True True True
True False False
False True False
False False False
54
True False
False True
La precedencia está dada por la siguiente lista (Tabla 3-8), en que los operadores
lógicos han sido listados en orden de mayor a menor precedencia:
Tabla 3-8. Prioridad de operadores lógicos.
Prioridad de operadores Lógicos
not
and
or
La tercera operación ha fallado porque Python intento evaluar (x/y) e y era cero, lo
cual provoca un runtime error (error en tiempo de ejecución). Pero el segundo ejemplo no
falló, porque la primera parte de la expresión x >= 2 fue evaluada como falsa, así que (x / y)
no se ejecutó debido a la regla del cortocircuito, y no se produjo ningún error.
Es posible construir las expresiones lógicas colocando estratégicamente una
evaluación para validar justo antes de la evaluación que podría causar un error, como se
muestra a continuación:
>>> x = 1
>>> y = 0
>>> x >= 2 and y != 0 and (x/y) > 2
False
>>> x = 6
>>> y = 0
55
>>> x >= 2 and y != 0 and (x/y) > 2
False
>>> x >= 2 and (x/y) > 2 and y != 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
El valor None
Existe un valor especial en Python para representar aquellos casos en los que “no
hay valor”; es el valor None. Este valor es el único de su tipo. Se interpreta como falso en
las expresiones lógicas y es el devuelto por las funciones que no devuelven ningún valor
explícitamente. Cuando el resultado de una expresión es None, el intérprete no lo muestra:
>>> None
>>>
56
i) Los números a, b, y c están incluidos en un intervalo menor a la unidad.
j) El menor de a y b está entre 0 y 1.
3) Dadas dos variables reales x e y, escribir una expresión booleana que valide que x está
fuera del intervalo [100, 200] e y está dentro del intervalo (20,40].
4) Sean A, B y C tres variables enteras que representan las ventas de tres productos
respectivamente, escribir expresiones lógicas (booleanas) que representen las siguientes
afirmaciones:
a) Las ventas del producto A son las más elevadas.
b) Ningún producto tiene unas ventas inferiores a 300.
c) Algún producto tiene unas ventas superiores a 1000.
d) La media de ventas es superior a 700.
e) El producto C no es el más vendido
5) Las edades de tres primos se guardan en las variables a, b, c. Escribir una expresión
booleana que evalúe True si solamente 2 de los 3 primos tienen la misma edad y, además,
la suma de las 3 edades sea múltiplo de 3.
6) Obtener las expresiones booleanas equivalentes a los enunciados siguientes:
a) No se cumple z de tipo booleano o que x e y sean positivas y su suma múltiplo de 7.
b) La suma de a y b, de tipo entero, es múltiplo de 5 y al menos una de ellas es par.
c) x no es la más grande ni la más pequeña de entre x, y, z de tipo real.
d) La suma de a y b, de tipo entero, es múltiplo de 5 y ambas son impares.
e) Exactamente dos de entre x, y, z son positivas.
f) La más pequeña de las variables a y b de tipo real está entre 0 y 1.
g) Una variable a de tipo entero pertenece al conjunto de los números menores de 100 o
mayores de 200 y además es un impar múltiplo de 3.
h) x, y, z de tipo entero son todas impares o todas pares.
i) ξ de tipo real es mayor que la distancia entre x e y de tipo real. xi**2 > (x-y)**2 #
Debe usarse un identificador válido (xi), no ξ
j) Alguno de los valores absolutos de a, b o c de tipo real es menor que 1.
k) Alguno de los valores de a, b o c de tipo real está en medio del intervalo formado por
los otros dos.
l) x, y, z de tipo real pueden ser los lados de un triángulo. Los valores podrán ser un
triángulo cuando el valor más grande sea menor que la suma de los otros dos.
m) No se cumple una persona trabaja (trabaja de tipo booleano) o sueldo de tipo entero
está entre 1000 y 2000.
57
Prioridad de evaluación de expresiones con diferentes operadores
Cuando una expresión tiene operadores de diferentes grupos, se evaluarán de acuerdo
a la Tabla 3-9 [4]:
Tabla 3-9: Características de los operadores Python. El nivel de precedencia 1 es
el de mayor prioridad.
Operadores Operación Operador Paridad Asociatividad Precedencia
Aritméticos Exponenciación ** Binario Por la 1
derecha
Identidad + Unario — 2
Cambio de - Unario — 2
signo
Multiplicación * Binario Por la 3
izquierda
División / Binario Por la 3
izquierda
Módulo (o % Binario Por la 3
resto) izquierda
Suma + Binario Por la 4
izquierda
Resta - Binario Por la 4
izquierda
Comparación Igual que == Binario — 5
Distinto de != Binario — 5
Menor que < Binario — 5
Menor o igual <= Binario — 5
que
Mayor que > Binario — 5
Mayor o Igual >= Binario — 5
que
Lógicos Negación not Unario — 6
Conjunción and Binario Por la 7
izquierda
Disyunción or Binario Por la 8
izquierda
Esto significa, por ejemplo, que las multiplicaciones se evalúan antes que las sumas,
y que las comparaciones se evalúan antes que las operaciones lógicas:
>>> 2 + 3 * 4
14
>>> 1 < 2 and 3 < 4
True
La única excepción a la regla anterior son las potencias, que son evaluadas de
derecha a izquierda:
>>> 2 ** 3 ** 2 # es igual a 2 ** (3 ** 2)
512
58
Uso de paréntesis para alterar la prioridad de operadores
Se Puede alterar el orden natural de prioridades entre operadores utilizando los
paréntesis, encerrando entre ellos los elementos que se resuelven en primer lugar dentro de
una expresión. De esta forma, se resolverán en primer lugar las operaciones que se encuentren
en los paréntesis más interiores, finalizando por las de los paréntesis exteriores. Es importante
tener en cuenta, que dentro de los paréntesis se seguirá manteniendo la prioridad explicada
anteriormente.
Por ejemplo:
>>> c = c + 1 # la variable c se incrementa en 1
>>> d = d - 1 # la variable d se decrementa en 1
>>> c += 1 # equivale a: c = c + 1
>>> x += 0.01 # equivale a: x = x + 0.01
>>> d -= 2 # equivale a: d = d – 2
>>> y *= d+1 # equivale a: y = y * (d+1)
>>> n = 7
>>> n //= 2 # equivale a: n = n // 2
>>> n
3
>>> n **= 2 # equivale a: n = n**2
>>> n
9
Evaluación de expresiones.
Sin usar el computador, evalúe las siguientes expresiones, y para cada una de ellas
indique el resultado y su tipo (si la expresión es válida) o qué error ocurre (si no lo es):
>>> 2 + 3 # Respuesta: tipo int, valor 5
>>> 4 / 0 # Respuesta: error de división por cero
>>> 5 + 3 * 2
>>> '5' + '3' * 2
>>> 2 ** 10 == 1000 or 2 ** 7 == 100
>>> int('cuarenta')
>>> 70/16 + 100/24
>>> 200 + 19 %
>>> 3 < (1024 % 10) < 6
59
>>> 'six' + 'eight'
>>> 'six' * 'eight'
>>> float(-int('5') + int('10'))
>>> abs(len('ocho') - len('cinco'))
>>> bool(14) or bool(-20)
>>> float(str(int('5' * 4) / 3)[2])
60
d) True or not and (2 > 1)
e) (7.5 – 3) // 3 == 1.5
f) (3 // 2) > (3 % 2) and not True
g) (3 // 3 > 3 % 3) or not True
h) p == (4 % 3 + 1 > 0) and not p
a)
b)
c)
d)
e)
f)
61
g)
h)
i)
j)
7. Dadas dos variables reales x e y, escribir una expresión booleana que valide que x está
fuera del intervalo [25, 35] y está dentro del intervalo (20,40].
8. Sean A, B y C tres variables enteras que representan las ventas de tres productos
respectivamente, escribir expresiones lógicas (booleanas) que representen las siguientes
afirmaciones:
a) Las ventas del producto A son las más elevadas.
b) Ningún producto tiene unas ventas inferiores a 300.
c) Algún producto tiene unas ventas superiores a 1000.
d) La media de ventas es superior a 700.
e) El producto C no es el más vendido.
9. Las edades de tres primos se guardan en las variables a, b, c. Escribir una expresión
booleana que evalúe True si solamente 2 de los 3 primos tienen la misma edad y, además,
la suma de las 3 edades sea múltiplo de 3.
10. Obtener las expresiones booleanas equivalentes a los enunciados siguientes:
a) No se cumple z de tipo booleano o que x e y sean positivas y su suma múltiplo
de 7.
b) La suma de a y b, de tipo entero, es múltiplo de 5 y al menos una de ellas es par.
c) x no es la más grande ni la más pequeña de entre x, y, z de tipo real.
d) La suma de a y b, de tipo entero, es múltiplo de 5 y ambas son impares.
e) Exactamente dos de entre x, y, z son positivas.
f) La más pequeña de las variables a y b de tipo real está entre 0 y 1.
g) a de tipo entero pertenece al conjunto de los números menores de 100 o mayores
de 200 y además es un impar múltiplo de 3.
h) x, y, z de tipo entero son todas impares o todas pares.
i) ξ de tipo real es mayor que la distancia entre x e y de tipo real. xi**2 > (x-y)**2
# Debe utilizarse un identificador válido (xi), no ξ
j) Alguno de los valores absolutos de a, b o c de tipo real es menor que 1.
62
k) Alguno de los valores de a, b o c de tipo real está en medio del intervalo formado
por los otros dos.
l) x, y, z de tipo real pueden ser los lados de un triángulo. Los valores podrán ser un
triángulo cuando el valor más grande sea menor que la suma de los otros dos.
m) No se cumple una persona trabaja (trabaja de tipo booleano) o sueldo de tipo
entero está entre 1000 y 2000.
11. Un valor entero x es positivo e impar.
12. El peso se encuentra entre 50,5 y 75 kg.
13. El sexo es masculino.
14. La edad es múltiplo de 10.
15. Puede votar si el sexo es masculino y tiene edad para votar. Considere edad superior o
igual a 21 años para votar.
16. Puede pagar si la tarjeta es de débito y el monto es superior a 20 Bs o si la tarjeta es de
crédito y el monto es superior a 50 Bs. Considere Tipo de tarjeta 1: débito, 2: crédito.
17. Un punto (x, y) pertenece a una circunferencia de radio r con centro en (xc, yc). Ecuación
de una circunferencia (x -xc )2+(y - yc)2= r2
18. Dada la fecha actual (da, ma, aa) y una fecha de vencimiento (dv, mv, av) el producto
está vencido.
19. Dado un cuadrado de lado a su área es superior a 100. área = lado2
Funciones predefinidas
Python proporciona funciones (ver Tabla 3-11) para utilizar en las expresiones. Estas
funciones se dice que están predefinidas.
Tabla 3-11. Simple Python Built-in Functions
Función Descripción Ejemplo
abs(x) Devuelve el valor abs(-2) es 2
absoluto de x.
max(x1, x2, ...) Devuelve el mayor max(1, 5, 2) es 5
valor de x1, x2, ...
min(x1, x2, ...) Devuelve el menor min(1, 5, 2) es 1
valor de x1, x2, ...
pow(a, b) Devuelve ab. Same as a pow(2, 3) es 8
** b.
round(x) Devuelve un número round(5.4) es 5
entero más cercano a round(5.5) es 6
x. Si x es igualmente round(4.5) es 4
cercano a dos enteros,
se devuelve el valor
par.
round(x, n) Devuelve el valor round(5.466, 2) es 5.47
flotante redondeado a round(5.463, 2) es 5.46
63
n dígitos después del
punto decimal.
La función float también acepta argumentos de tipo cadena. Cuando se le pasa una
cadena, float la convierte en el número flotante que esta representa:
>>> float('3.2')
3.2
>>> float('3.2e10')
32000000000.0
La función str también puede recibir como argumento una cadena, pero en ese caso
devuelve como resultado la misma cadena.
64
ord: acepta una cadena compuesta por un único carácter y devuelve su código ASCII
(un entero).
chr: recibe un entero (entre 0 y 255) y devuelve una cadena con el carácter que tiene
a dicho entero como código ASCII.
round: redondeo. Puede usarse con uno o dos argumentos. Si se usa con un sólo
argumento, redondea el número al flotante más próximo cuya parte decimal sea nula.
>>> round(2.1)
2.0
>>> round(2.9)
3.0
>>> round(-2.9)
-3.0
>>> round(2)
2.0
Las funciones pueden formar parte de expresiones y sus argumentos pueden, a su vez,
ser expresiones. Observa los siguientes ejemplos:
>>> abs(-23) % int(7.3)
2
>>> abs(round(-34.2765,1))
34.3
>>> str(float(str(2) * 3 + '.123')) + '321'
'222.123321'
Módulos Estándar
En Python, un módulo es una pequeña parte de un gran programa. Este módulo es un
archivo dentro de una unidad de almacenamiento.
Motivos por los que usar módulos:
• Se crean archivos pequeños, donde es más fácil de localizar elementos de tu
código.
• Un módulo se puede usar en todos los programas que desees. Sin necesidad de
repetir código fuente.
Para un nuevo módulo se crea un archivo y se nombra como mi_modulo.py en este
archivo se incluye el código que se necesita, por ejemplo, funciones.
Para utilizar las funciones del módulo se escribe import mi_modulo, una vez incluido
el módulo ya se dispone de todas las funciones que se utilizarán en el nuevo programa.
65
Al importar un módulo Python recorre todos los directorios indicados en la variable
de entorno PYTHONPATH en busca de un archivo con el nombre adecuado. El valor de la
variable PYTHONPATH se puede consultar desde Python mediante sys.path incluida en el
módulo sys. A continuación, se presentan los módulos estándar de Python y las funciones
más utilizadas dentro de cada módulo.
66
1.0
En una misma sentencia se puede importar más de una función. Basta con separar sus
nombres con comas:
>>> from math import sin, cos
Funciones trigonométricas
math.acos(x) devuelve el coseno del arco 'x' (en radianes)
math.asin(x) Seno del arco ‘x’
math.atan(x) arcotangente
math.sin(x) devuelve en seno de 'x'. ('x' en radianes)
math.cos(x) devuelve en coseno de 'x'. ('x' en radianes)
math.tan(x) Tangente
Funciones hiperbólicas
math.acosh(x) Devuelve el coseno hiperbólico del arco ‘x’ (en rad)
math.asinh(x) Seno del arco hiperbólico ‘x’
math.atanh(x) Arcotangente hiperbólica
math.cosh(x) Devuelve el coseno hiperbólico de x.
math.sinh(x) Seno hiperbólico
67
Exponenciales y logarítmicas
math.exp(x) exponencial en base e
math.log(x[, base]) si no se le da una base, toma e (neperiano)
math.log1p(x) devuelve el logaritmo de 1+x (base e)
math.log10(x) logaritmo decimal
math.pow(x, y) eleva la base 'x' al exponente 'y'
math.sqrt(x) raíz cuadrada de 'x'
math.hypot(x, y) devuelve la norma euclídea (sqrt(x ** 2 + y **
2))
De esta forma, todas las funciones del módulo math están disponibles, pero usando
el nombre del módulo y un punto como prefijo:
>>> import math
>>> print (math.sin(0))
68
0.0
Entornos de desarrollo
El código puede editarse con un simple editor de texto o utilizando el IDLE que hace
más fácil la tarea de escribir programas. Python viene con su propio IDLE conformado por
una consola y un editor de texto.
Además, hay otros buenos entornos de desarrollo más avanzados para Python: Stani’s
Python Editor, Eric IDE, NinJa IDE, PyScripter, WingIDE 101 o Spyder, entre otros.
69
La mayoría de sus características están disponibles en la versión gratuita, se integra
con IPython, soporta Anaconda, así como otros paquetes científicos como matplotlib y
NumPy.
Características como desarrollo remoto, soporte de bases de datos, soporte de
frameworks de desarrollo web, etc., están disponibles solo para la edición profesional de
PyCharm.
Algo muy útil de Pycharm es su compatibilidad con múltiples marcos de desarrollo
web de terceros como Django, Pyramid, web2py, motor de aplicaciones Google y Flask,
lo que lo convierte en un competo IDE de desarrollo de aplicaciones rápidas.
Se encuentra disponible para Windows y Linux, puedes descargarlo desde la
siguiente URL: http://www.jetbrains.com/pycharm/
Como instalar PyCharm en Windows
1 - Una vez finalizada la descarga, ejecute el archivo descargado, debe aparecer el
asistente de instalación.
2 - Haga clic en siguiente y marque las 2 casillas.
Como instalar Pycharm en Linux
1 - Descomprima el archivo descargado en un directorio.
2 - Para ejecutar PyCharm, ejecute pycharm.sh desde el subdirectorio bin.
70
Aunque PyDev califica como uno de los mejores IDE de Python de código abierto,
también viene empaquetado junto con otro producto llamado Liclipse, un producto comercial
construido sobre Eclipse que proporciona mejoras en la usabilidad y temas adicionales.
71
3.12.1.4 Wing IDE
Wing IDE es comercial y apunta a desarrolladores profesionales. Fue lanzado hace
15 años atrás y es un producto muy maduro, con un montón de herramientas y características
para programar en Python.
Wing IDE es soportado por Windows, OS X Linux. Como Pycharm, tiene una
versión básica gratuita, una edición personal y una profesional muy potente.
En el Debugging es donde Wing IDE brilla más e incluye funciones como
depuración de procesos múltiples, depuración de subprocesos, depuración automática de
procesos secundarios, puntos de interrupción, inspección de código, etc. También ofrece
funciones para depurar remotamente el código que se ejecuta en Raspberry PI.
Wing IDE también soporta una gran cantidad de frameworks Python como: Maya,
MotionBbuilder, Zope, PyQt, PySide, pyGTK, Django, matplotib entre otros. Más
información en la página oficial: https://wingware.com/
72
quiera, pero lo que se obtiene al final vale la pena el esfuerzo. Si buscas un IDE Python para
Linux, Vim puede ser tu mejor opción. Mas información: http://www.vim.org/
• Provisión de la consola IPython (Qt) como un mensaje interactivo, que puede mostrar
gráficos en línea
• Capacidad de ejecutar fragmentos de código desde el editor de la consola
• Análisis continuo de archivos en el editor y provisión de advertencias visuales sobre
posibles errores
• Ejecución paso a paso
• Explorador de variables
73
3.12.1.7 Atom
La forma más básica de crear y ejecutar un programa
Python es crear un archivo vacío con extensión .py, y apuntar a
ese archivo desde la línea de comandos con nombre de
archivo.py.
Alternativamente, puedes usar el IDLE de Python por
defecto que viene instalado con Python. Puedes escribir y ejecutar
tu código dentro de IDLE. Sin embargo, si desea ser productivo,
las dos primeras opciones no serán las mejores. Querrías usar algo
como el editor Atom.
Atom fue construido por GitHub con el lema “Un editor de texto hackeable para el
siglo XXI”. Y es realmente flexible y tiene un gran soporte de paquetes externos que lo
convierten en un poderoso Entorno de Desarrollo Interactivo (IDE).
Estos son los pasos que le permitirán empezar a trabajar con Atom:
Descargue e instale Atom desde https://atom.io/ Una vez que instale atom, puede
lanzarlo escribiendo atom en la línea de comandos. Si esto no funciona, asegúrese de que el
átomo ha sido añadido a sus variables de trayectoria/entorno de búsqueda. El átomo debería
verse así:
74
Una forma más conveniente de abrir Atom podría ser hacer clic con el botón derecho
del ratón en la carpeta donde se encuentran los archivos y luego ir a Abrir con Atom. Esto
añadirá todos los archivos de esa carpeta a la vista de árbol tal y como se ve en la captura de
pantalla anterior. Esto es estupendo cuando el programa o la aplicación web que estás
desarrollando consta de varios archivos. Puedes saltar de archivo en archivo y editarlos desde
dentro de Atom.
Para ejecutar un archivo Python en Atom, se abre la línea de comandos y apuntar a
las rutas de los archivos o utilizar un gran paquete Atom llamado plataforma-ide-terminal.
que se integra con Atom para poder ejecutar los archivos en Atom.
Para instalar un paquete, seleccione File -> Settings y luego Install and search for the
name of the package (i.e., platformio-ide-terminal). Una vez instalado el paquete terminal-
plus puede encontrar la herramienta y abrir una instancia de terminal seleccionado Paquetes.
Una forma más rápida de abrir un terminal es hacer clic en el signo “+” que se ha añadido en
la parte inferior de la ventana de Atom. Eso debería abrir la terminal:
75
Como se puede observar, el terminal apunta al directorio principal de sus archivos.
Ahora se pueden ejecutar scripts Python desde allí como se muestra en la captura de pantalla
anterior.
Se puede dividir el editor en varias ventanas. Cuando se tiene más de un archivo
abierto dentro de Atom, puedes ir a View -> Panes -> Split Right para enviar el archivo actual
a la mitad derecha de la ventana. Esto puede aumentar su productividad cuando trabaja con
varios archivos.
Manejo de datos
Salida estándar
El cambio más notable y ampliamente conocido en Python 3 es como la función print
es utilizada. El uso del paréntesis () es obligatorio en la versión 3, el mismo fue opcional en
la versión 2.
print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()
La función print() por defecto inserta al final un salto de línea. Este se puede eliminar
en Python 2 escribiendo ',' al final de la función. En Python 3 "end=' '" agrega un espacio en
vez de un salto de línea.
print x, # La coma al final suprime el salto de línea en Python 2
print(x, end=" ") # Agrega un espacio en lugar de una nueva línea en
# Python 3
mundo
Para que la siguiente impresión se realice en la misma línea se escribe una coma al
final de la sentencia.
>>> print ('Hola', 'mundo')
Hola mundo
Esto se diferencia del uso del operador + para concatenar las cadenas en que al utilizar
las comas print introduce automáticamente un espacio para separar cada una de las cadenas.
76
Este no es el caso al utilizar el operador +, ya que lo que le llega a print es un solo argumento:
una cadena ya concatenada.
>>> print ('Hola' + 'mundo')
Holamundo
Lo que hace la primera línea es introducir los valores a la derecha del símbolo % (la
cadena 'Hola') en las posiciones indicadas por los especificadores de conversión de la cadena
a la izquierda del símbolo % (ver Tabla 3-12), tras convertirlos al tipo adecuado.
Los especificadores más sencillos están formados por el símbolo % seguido de una
letra que indica el tipo con el que se formatea el valor. Por ejemplo:
Tabla 3-12. Códigos de % y su conversión
% Código Conversión
%c Convierte a un carácter
%s Convierte a una cadena y aplica la función str() a la cadena
antes de formatear
%i Convierte a un entero decimal con signo
%d Convierte a un entero decimal con signo
%u Convierte a un entero decimal sin signo
%o Convierte a un entero octal
%x Convierte a un entero hexadecimal con letras minúsculas
%X Convierte a un entero hexadecimal con letras mayúsculas
%e Convierte a una notación exponencial con minúscula "e"
%E Convierte a una notación exponencial con mayúscula "e"
%f Convierte a un número real de coma flotante
%g Convierte al valor más corto de% f y% e
%G Convierte al valor más bajo de% f y% E
77
cadena. En el caso de que el número sea negativo, ocurrirá exactamente lo mismo, sólo que
los espacios se añadirán a la derecha de la cadena.
En el caso de los números reales, es posible indicar la precisión a utilizar precediendo
la letra “f” de un punto seguido del número de decimales a mostrar:
>>> from math import pi
>>> print ('%.4f' % pi)
3.1416
Caracteres especiales
Es posible que desee que las cadenas incluyan caracteres, como tabulaciones y
comillas. Para hacer esto, utiliza una barra invertida “\” seguido de algún carácter único.
Estos caracteres individuales junto con una barra invertida indican la presencia de un carácter
especial.
La Tabla 3-13 enumera varios caracteres de escape de barra invertida junto con sus
equivalentes octales, decimales y hexadecimales.
Tabla 3-13. Caracteres de escape para cadenas
ESCAPE NAME CHARACTER DECIMAL OCTAL HEXADECIMAL
CHARACTER
\n Newline\ LF 10 012 0x0A
Linefeed
\t Horizontal HT 9 01l 0x09
Tab
\b Backspace BS 8 010 0x08
\0 Null NUL 0 000 0x00
character
\a Bell BEL 7 007 0x07
\v Vertical VT 11 013 0x0B
tab
\r Carriage CR 13 015 0x0D
return
\e Escape ESC 27 033 0xlB
\" Double “ 34 042 0x22
quote
V Single ' 39 047 0x27
quote
\f Form FF 12 014 0x0C
feed
\\ Backslash \ 92 134 0x5C
78
Tenga en cuenta que \n no se imprime en la salida. También hay una nueva línea antes
del comienzo de la segunda palabra. Además, cuando tiene una declaración larga que excede
una sola línea, puede usar una barra diagonal inversa “\” para escapar de NEWLINE y
continuar la instrucción. Por ejemplo,
>>> print ('The name for the registration number %s is %s' \
... % ('A002','Steve'))
The name for the registration number A002 is Steve
Para imprimir caracteres especiales, no solo usa los caracteres con una barra diagonal
inversa, sino también sus valores decimales, octales y hexadecimales. Por ejemplo,
>>> print ("Hello \012world)
Hello
world!! !
79
NameError: name 'raw_input' is not defined
Glosario
Algoritmo: Un proceso general para resolver una clase completa de problemas.
Análisis sintáctico: La exanimación de un programa y el análisis de su estructura
sintáctica.
Asignación: sentencia que asigna un valor a una variable.
Código de objeto: La salida del compilador una vez que ha traducido el programa.
Código fuente: es un conjunto de instrucciones y órdenes lógicas, compuestos de
algoritmos que se encuentran escritos en un determinado lenguaje de programación, las
cuales deben ser interpretadas o compiladas, para permitir la ejecución del programa
informático.
Código fuente: Un programa escrito en un lenguaje de alto nivel antes de ser
compilado.
Coma flotante: un formato para representar números con decimales.
Comentario: un segmento de información en un programa, destinado a otros
programadores (o cualquiera que lea el código fuente) y que no tiene efecto sobre la ejecución
del programa.
Compilar: Traducir un programa escrito en un lenguaje de alto nivel a un lenguaje
de bajo nivel todo al mismo tiempo, en preparación para la ejecución posterior.
Composición: la capacidad de combinar expresiones sencillas y sentencias hasta
crear sentencias y expresiones compuestas, con el fin de representar cálculos complejos de
forma concisa.
Concatenar: Unir dos operandos, extremo con extremo.
Depuración: El proceso de hallazgo y eliminación de los tres tipos de errores de
programación.
80
Diagrama de estado: representación gráfica de un conjunto de variables y de los
valores a los que se refiere.
División de enteros: es una operación que divide un entero entre otro y devuelve un
entero. La división de enteros devuelve sólo el número entero de veces que el numerador es
divisible por el denominador, y descarta el resto.
Error (bug): Un error en un programa.
Error en tiempo de ejecución: Un error que no ocurre hasta que el programa ha
comenzado a ejecutarse e impide que el programa continúe.
Error semántico: Un error en un programa que hace que ejecute algo que no era lo
deseado.
Error sintáctico: Un error en un programa que hace que el programa sea imposible
de analizar sintácticamente (e imposible de interpretar).
Evaluar: simplificar una expresión ejecutando las operaciones para entregar un valor
único.
Excepción: Otro nombre para un error en tiempo de ejecución.
Expresión: una combinación de variables, operadores y valores. Dicha combinación
representa un único valor como resultado.
Guion: Un programa archivado (que va a ser interpretado).
Interpretar: Ejecutar un programa escrito en un lenguaje de alto nivel traduciéndolo
línea por línea
Lenguaje de alto nivel: Un lenguaje como Python diseñado para ser fácil de leer y
escribir para la gente.
Lenguaje de bajo nivel: Un lenguaje de programación diseñado para ser fácil de
ejecutar para un computador; también se lo llama “lenguaje de máquina” o “lenguaje
ensamblador”.
Lenguaje de programación: es un lenguaje informático, diseñado para expresar
órdenes e instrucciones precisas, que deben ser llevadas a cabo por una computadora. El
mismo puede utilizarse para crear programas que controlen el comportamiento físico o lógico
de un ordenador. Está compuesto por una serie de símbolos, reglas sintácticas y semánticas
que definen la estructura del lenguaje.
Lenguaje formal: Cualquier lenguaje diseñado por humanos que tiene un propósito
específico, como la representación de ideas matemáticas o programas de computadores:
todos los lenguajes de programación son lenguajes formales.
Lenguaje informático: Es un idioma artificial, utilizado por ordenadores, cuyo fin
es transmitir información de algo a alguien. Los lenguajes informáticos, pueden clasificarse
en: a) lenguajes de programación (Python, PHP, Pearl, C, etc.); b) lenguajes de especificación
(UML); c) lenguajes de consulta (SQL); d) lenguajes de marcas (HTML, XML); e) lenguajes
de transformación (XSLT); f) protocolos de comunicaciones (HTTP, FTP); entre otros.
Lenguaje natural: Cualquier lenguaje hablado que evolucionó de forma natural.
81
Lenguajes de alto nivel: son aquellos cuya característica principal, consiste en una
estructura sintáctica y semántica legible, acorde a las capacidades cognitivas humanas. A
diferencia de los lenguajes de bajo nivel, son independientes de la arquitectura del hardware,
motivo por el cual, asumen mayor portabilidad.
Lenguajes interpretados: a diferencia de los compilados, no requieren de un
compilador para ser ejecutados sino de un intérprete. Un intérprete, actúa de manera casi
idéntica a un compilador, con la salvedad de que ejecuta el programa directamente, sin
necesidad de generar previamente un ejecutable. Ejemplo de lenguajes de programación
interpretado son Python, PHP, Ruby, Lisp, entre otros.
Multiparadigma: acepta diferentes paradigmas (técnicas) de programación, tales
como la orientación a objetos, aspectos, la programación imperativa y funcional.
Multiplataforma: significa que puede ser interpretado en diversos Sistemas
Operativos como GNU/Linux, Windows, Mac OS, Solaris, entre otros.
Operador: un símbolo especial que representa un cálculo sencillo, como la suma. La
multiplicación o la concatenación de cadenas.
Operando: uno de los valores sobre los que actúa un operador.
Palabra reservada: es una palabra clave que usa el compilador para analizar
sintácticamente los programas. No pueden usarse palabras reseñadas, por ejemplo, if, def y
while como nombres de variables.
Portabilidad: La cualidad de un programa que le permite ser ejecutado en más de un
tipo de computador.
Programa ejecutable: Otro nombre para el código de objeto que está listo para
ejecutarse.
Programa: Un conjunto de instrucciones que especifica una computación.
Reglas de precedencia: la serie de reglas que especifican el orden en el que las
expresiones con múltiples operadores han de evaluarse.
Semántica: El significado de un programa.
Sentencia print: Una instrucción que causa que el intérprete Python muestre un valor
en el monitor.
Sentencia: es una porción de código que representa una orden o acción. Hasta ahora,
las sentencias vistas son las asignaciones y las sentencias print.
Sintaxis: La estructura de un programa.
Solución de problemas: El proceso de formular un problema, hallar la solución y
expresar esa solución.
Tipado dinámico: un lenguaje de tipado dinámico es aquel cuyas variables, no
requieren ser definidas asignando su tipo de datos, sino que éste, se auto-asigna en tiempo de
ejecución, según el valor declarado.
82
Tipo: un conjunto de valores. El tipo de un valor determina cómo puede usarse en las
expresiones. Hasta ahora, los tipos vistos son enteros (tipo int), números de coma flotante
(tipo float) y cadenas (tipo string).
Unidad: Uno de los elementos básicos de la estructura sintáctica de un programa,
análogo a una palabra en un lenguaje natural.
Valor: un número o cadena (o cualquier otra cosa que se especifique posteriormente)
que puede almacenarse en una variable o calcularse en una expresión.
Variable: nombre que hace referencia a un valor.
# Entrada de datos
n1 = float(input("Introduce el primer número: "))
n2 = float(input("Introduce el segundo número: "))
Ejecución:
Introduce el primer número: 10
Introduce el segundo número: 10
¿Son iguales? True
¿Son diferentes? False
¿El primero es mayor que el segundo? False
¿El segundo es mayor o igual que el primero? True
83
Código 3-2. tam_cad.py
# Propósito: Determinar tamaño de una cadena
# Autor: Alejandro Bolívar
# Fecha: 30/01/2020
# Entrada de datos
cadena = input("Escribe una cadena: ")
Ejecución:
Escribe una cadena: Hola
¿La longitud de la cadena es mayor o igual que 3 y menor que 10? True
# Entrada de datos
numero_usuario = int(input("Introduce un número del 1 al 9: "))
numero_usuario *= 9
numero_magico = 12345679
numero_magico *= numero_usuario
print("El número mágico es:", numero_magico)
Ejecución:
Introduce un número del 1 al 9: 5
El número mágico es: 555555555
84
Ejercicio 3-4: En el siguiente ejemplo se convierte grados Celsius a Fahrenheit; al
ejecutarlo e introducir por ejemplo el valor 27, se muestra el resultado en la consola:
# Entrada de datos
c = float(input("Entra temperatura en ºC: "))
# Procesamiento de datos
f = 9 / 5 * c + 32
# Salida de datos
print(c, " ºC equivale a ", f, " ºF")
Ejecución:
Entra temperatura en ºC: 27
27.0 ºC equivale a 80.6 ºF
# Entrada de datos
r = float(input('Introduce el radio del círculo: '))
# Procesamiento de datos
per = 2 * pi * r
area = pi * r ** 2
#Salida de datos
print('Perímetro =', per)
print('Área = ', area)
85
# Fin del programa
input('Pulse una tecla para finalizar... ') # Pausa
Ejecución:
Introduce el radio del círculo: 1.2
Perímetro = 7.5398223686155035
Área = 4.523893421169302
Los decimales de los números reales (float) del perímetro y área se pueden reducir,
por ejemplo, a dos dígitos decimales utilizando el estilo adaptado printf de otros lenguajes
(%.2f) o usando la función interna de Python round(x, 2). Puede cambiarse el argumento 2
por el número de decimales que se requiera.
print('Perímetro = ', round(per, 2)) # función interna round()
print('Área = %.2f', % area) # funcionalidad de printf en Python
Ejecución:
Introduce el radio del círculo: 1.2
Perímetro = 7.54
Área = 4.52
# Entrada de datos
s = int(input("Entra segundos: "))
auxs = s
# Procesamiento de datos
m = s // 60
s = s % 60
h = m // 60
m = m % 60
d = h // 24
h = h % 24
#Salida de datos
print(auxs, 'segundos son:')
print(d, "días,", h, "horas,", m, "minutos y", s, "segundos")
86
Ejecución 1:
Entra segundos: 3676
3676 segundos son:
0 días, 1 horas, 1 minutos y 16 segundos
Ejecución 2:
Entra segundos: 400000
400000 segundos son:
4 días, 15 horas, 6 minutos y 40 segundos
# Entrada de datos
c = int(input("Entra céntimos: "))
auxc = c
# Procesamiento de datos
e2 = c // 200
c = c % 200
e = c // 100
c = c % 100
c50 = c // 50
c = c % 50
c20 = c // 20
c = c % 20
c10 = c // 10
c = c % 10
c5 = c // 5
c = c % 5
c2 = c // 2
c = c % 2
#Salida de datos
print(auxc,'céntimos equivalen a:')
print(e2,'monedas de 2 €,',e,'de 1 €,',c50,'de 50 cts,',c20,'de 20 cts,')
print(c10,'monedas de 10 cts,',c5,'de 5 cts,',c2,'de 2 cts y',c,'de 1
céntimo')
87
Ejecución 1:
Entra céntimos: 589
589 céntimos equivalen a:
2 monedas de 2 €, 1 de 1 €, 1 de 50 cts, 1 de 20 cts,
1 monedas de 10 cts, 1 de 5 cts, 2 de 2 cts y 0 de 1 céntimo
Pulse una tecla para finalizar...
Ejecución 2:
Entra céntimos: 399
399 céntimos equivalen a:
1 monedas de 2 €, 1 de 1 €, 1 de 50 cts, 2 de 20 cts,
0 monedas de 10 cts, 1 de 5 cts, 2 de 2 cts y 0 de 1 céntimo
Pulse una tecla para finalizar...
Ejercicio 3-8: Dada la longitud de los catetos de un triángulo rectángulo,
utilizando el teorema de Pitágoras (H2=C12+C22), desarrolle un programa que determine
el valor de la longitud de la hipotenusa.
¿Qué información está
¿Qué resultados exige? ¿Cómo lo logro?
presente?
Longitud Cateto 1 (C1) Usando el teorema de
Longitud Cateto 2 (C2) Pitágoras
La longitud de la
El hecho que el
hipotenusa (H)
triángulo es
rectángulo
Tabla de Variables:
Descripción del dato Nombre de la Variable Tipo de Dato
O Entero ® Real O Lógico
Longitud del Cateto 1 c1
O Cadena
O Entero ® Real O Lógico
Longitud del Cateto 2 c2
O Cadena
Longitud de la O Entero ® Real O Lógico
h
Hipotenusa O Cadena
# Entrada de datos
c1 = float(input("Longitud del primer cateto:"))
c2 = float(input("Longitud del segundo cateto:"))
# Procesamiento de datos
h = (c1 ** 2 + c2**2)**0.5
#Salida de datos
88
print("Longitud de la hipotenusa= ", h)
Ejecución 1:
Longitud del primer cateto:3
Longitud del segundo cateto:4
Longitud de la hipotenusa= 5.0
Pulse una tecla para finalizar...
Ejercicio 3-9: Dado el valor de un ángulo, expresado en radianes, desarrolle un
programa que determine e imprima el valor de dicho ángulo en grados, sabiendo que
180°=n radianes.
¿Qué información está
¿Qué resultados exige? ¿Cómo lo logro?
presente?
Valor del ángulo
La unidad de medida El valor de ángulo medido Ángulo en ° = ángulo en
del ángulo es en en grado radianes * 180/n
radianes
Tabla de Variables:
Descripción del dato Nombre de la Variable Tipo de Dato
Valor del ángulo en O Entero ® Real O Lógico
angulo1
Grados O Cadena
Valor del ángulo en O Entero ® Real O Lógico
angulo2
Radianes O Cadena
# Entrada de datos
angulo1 = float(input("Valor en Radianes:"))
# Procesamiento de datos
angulo2 = angulo1 * 180 / 3.141516
#Salida de datos
print("Valor en Grados es= ", angulo2)
Ejecución 1:
Valor en Radianes:3.14
Valor en Grados es= 179.9131374788478
89
Pulse una tecla para finalizar...
Tabla de Variables:
Nombre de la
Descripción del dato Tipo de Dato
Variable
O Entero ® Real O Lógico O
Longitud de la Base base
Cadena
Longitud de la O Entero ® Real O Lógico O
altura
altura Cadena
O Entero ® Real O Lógico O
Área del Triángulo area
Cadena
# Entrada de datos
base = float(input('Longitud de la Base:'))
altura = float(input('Longitud de la altura:'))
# Procesamiento de datos
area = base * altura / 2
#Salida de datos
print("Área del Triángulo= ", area)
Ejecución:
Longitud de la Base:3
Longitud de la altura:4
Área del Triángulo= 6.0
Pulse una tecla para finalizar...
90
Ejercicio 3-11: Dado el largo y ancho de un rectángulo, desarrolle un programa
que determine e imprima el área y el perímetro del rectángulo, sabiendo que el
área=largo*ancho y el perímetro=2*Largo + 2*ancho.
¿Qué información está
¿Qué resultados exige? ¿Cómo lo logro?
presente?
Longitud del largo El valor del área que
Área=largo*ancho
del rectángulo encierra el rectángulo
Perímetro=2*Largo +
Longitud del ancho El valor del perímetro
2*ancho
del rectángulo del rectángulo
Tabla de Variables:
Descripción del dato Nombre de la Variable Tipo de Dato
O Entero ® Real O Lógico
Longitud del Largo largo
O Cadena
O Entero ® Real O Lógico
Longitud del Ancho ancho
O Cadena
O Entero ® Real O Lógico
Área del Rectángulo area
O Cadena
Perímetro del O Entero ® Real O Lógico
perim
Rectángulo O Cadena
# Entrada de datos
largo = float(input('Longitud del Largo del rectángulo:'))
ancho = float(input('Longitud del Ancho del rectángulo:'))
# Procesamiento de datos
area = largo * ancho
perim = 2 * largo + 2 * ancho
#Salida de datos
print(f'Área del Rectángulo= {area}')
print(f'Perímetro del rectángulo= {perim}')
Ejercicio 3-12: Dadas las longitudes de los lados de un triángulo (l1, l2 y l3),
desarrolle un programa que determine el área que encierra el triángulo utilizando el
método del semiperímetro, donde el semiperímetro se calcula como s= (l1+l2+l3) / 2 y
el área como (s*(s-l1)*(s-l2)*(s-l3))**0.5
91
¿Qué información está
¿Qué resultados exige? ¿Cómo lo logro?
presente?
Longitud del Lado L1 1. El valor del área por s=(l1+l2+l3)/2
Longitud del Lado L2 el método del area=(s*(s-l1) *(s-l2)
Longitud del Lado L3 semiperímetro *(s-l3))**0.5
Tabla de Variables:
Descripción del dato Nombre de la Variable Tipo de Dato
O Entero ® Real O Lógico
Longitud del Lado L1 l1
O Cadena
O Entero ® Real O Lógico
Longitud del Lado L2 l2
O Cadena
O Entero ® Real O Lógico
Longitud del Lado L3 l3
O Cadena
O Entero ® Real O Lógico
Área del Triángulo area
O Cadena
Valor del O Entero ® Real O Lógico
s
Semiperímetro O Cadena
# Entrada de datos
l1 = float(input('Longitud del Lado 1:'))
l2 = float(input('Longitud del Lado 2:'))
l3 = float(input('Longitud del Lado 3:'))
# Procesamiento de datos
s = (l1 + l2 + l3) / 2
area = ((s - l1) * (s - l2) * (s - l3)) ** 0.5
# Salida de datos
print(f'Área del Rectángulo: {área}')
Ejercicio 3-13: Dadas las longitudes del radio de la base y la altura de un cilindro,
determine el área y el volumen del cilindro, sabiendo que el área = 2*PI*Radio*Altura y
el volumen = (PI * Radio2) * Altura.
¿Qué información está
¿Qué resultados exige? ¿Cómo lo logro?
presente?
Longitud del radio de El valor del área del Area = pi * Radio2
la base cilindro
92
Longitud de la altura El valor del volumen del Volumen = (2 * pi *
cilindro Radio) * altura
Tabla de Variables:
Descripción del dato Nombre de la Variable Tipo de Dato
O Entero ® Real O Lógico
Radio de la base radio
O Cadena
O Entero ® Real O Lógico
Altura del Cilindro altura
O Cadena
O Entero ® Real O Lógico
Área del Cilindro area
O Cadena
O Entero ® Real O Lógico
Volumen del Cilindro volumen
O Cadena
# Módulos Importados
from math import pi
# Entrada de datos
radio = float(input('Radio de la base [cm]: '))
altura = float(input('Altura del cilindro [cm]: '))
# Procesamiento de datos
area = (2 * pi * radio) * altura
volumen= pi * radio * radio * altura
# Salida de datos
print('Área del Cilindro= %.2f' % area, ' [cm²]')
print('Volumen del Cilindro= %.2f' % volumen, ' [cm³]')
Ejecución:
Radio de la base [cm]: 2
Altura del cilindro [cm]: 10
Área del Cilindro= 125.66 [cm²]
Volumen del Cilindro= 125.66 [cm³]
Pulse una tecla para finalizar...
Ejercicio 3-14: Dadas las longitudes de los catetos de un triángulo, desarrolle un
programa que determine la hipotenusa y para el ángulo que forma uno de los catetos con
la hipotenusa, el valor del seno, coseno y tangente de dicho ángulo.
¿Qué información está
¿Qué resultados exige? ¿Cómo lo logro?
presente?
93
Longitud de un Longitud de la hipotenusa.
cateto. Seno del ángulo de la hipotenusa hip = (co2 +ca2)2
Longitud del otro con uno de los catetos. seno = co / hip
cateto. Coseno del ángulo de la hipotenusa cos = ca / hip
con el mismo cateto anterior tan = co / ca
Tangente del ángulo de los catetos
anteriores
Tabla de Variables:
Descripción del dato Nombre de la Variable Tipo de Dato
Longitud del cateto O Entero ® Real O Lógico O
ca
adyacente Cadena
Longitud del cateto O Entero ® Real O Lógico O
co
opuesto Cadena
Longitud de la O Entero ® Real O Lógico O
h
hipotenusa Cadena
O Entero ® Real O Lógico O
Seno del ángulo seno
Cadena
O Entero ® Real O Lógico O
Coseno del ángulo Cos
Cadena
O Entero ® Real O Lógico O
Tangente del ángulo tan
Cadena
# Entrada de datos
# Procesamiento de datos
hip = (co**2 + ca**2) ** 0.5
seno = co / hip
coseno = ca / hip
tangente = co / ca
#Salida de datos
print("Longitud de la Hipotenusa=", hip)
print("Seno del ángulo= ", seno)
print("Coseno del ángulo= ", coseno)
print("Tangente del ángulo= ", tangente)
Ejecución:
Longitud del cateto adyacente:3
94
Longitud del cateto opuesto:4
Longitud de la Hipotenusa= 5.0
Seno del ángulo= 0.8
Coseno del ángulo= 0.6
Tangente del ángulo= 1.3333333333333333
Pulse una tecla para finalizar...
Ejercicio 3-15: Debido a que aún en Norteamérica no se utilizan el sistema métrico
decimal en la medición de longitudes, desarrolle un programa que, dada la longitud en
pies de una pieza cualquiera, determine e imprima su equivalente en a) yardas; b)
pulgadas; c) centímetros, y d) metros, sabiendo que 1 yarda=3 pies, 1 pie=12 pulgadas,
1 pulgada=2.54 centímetros, 1 metro=100 centímetros.
¿Qué información está ¿Cómo lo
¿Qué resultados exige?
presente? logro?
Longitud en pies Longitud equivalente en yardas yarda = longitud / 3
Longitud equivalente en pulgadas pulgada = longitud * 12
Longitud equivalente en centímetros cm = pulgada * 2.54
Longitud equivalente en metros mts = cm / 100
Tabla de Variables:
Nombre de la
Descripción del dato Tipo de Dato
Variable
O Entero ® Real O Lógico O
Longitud en pies longitud
Cadena
O Entero ® Real O Lógico O
Longitud en Yardas yarda
Cadena
O Entero ® Real O Lógico O
Longitud en Pulgadas pulgada
Cadena
Longitud en O Entero ® Real O Lógico O
cm
Centímetros Cadena
O Entero ® Real O Lógico O
Longitud en Metros mts
Cadena
# Entrada de datos
longitud= float(input('Longitud de la pieza [pie]:’)
# Procesamiento de datos
yarda = longitud / 3
pulgada = longitud * 12
cm = pulgada * 2.54
95
mts = cm / 100
#Salida de datos
print("Longitud de la pieza en Metro:", mts)
print("Longitud de la pieza en Pie:", longitud)
print("Longitud de la pieza en Yardas:", yarda)
print("Longitud de la pieza en Pulgada:", pulgada)
print("Longitud de la pieza en Centimetro:", cm)
96
Unidad 4
Estructuras de
Control
Estructuras Selectivas
97
Unidad IV. Estructuras de Control
Objetivos de la unidad:
• En esta unidad aprenderá a utilizar las estructuras condicionales, con el fin de
dirigir el flujo del programa de acuerdo a la necesidad de ejecutar las
instrucciones necesarias para resolver un problema.
• Se presenta una recopilación y adaptación de ejercicios relacionados con el
desarrollo de series numéricas.
Sangría
La sangría es la sangría que se asigna a las instrucciones que se ejecutarán dentro de
una estructura de control.
No todos los lenguajes de programación,
necesitan de una sangría, aunque sí, se estila
implementarla, a fin de otorgar mayor legibilidad
al código fuente. Pero en el caso de Python, la
sangría es obligatoria, ya que, de ella, dependerá
su estructura.
PEP 8: sangría
Una sangría de 4 (cuatro) espacios en blanco, indicará que las instrucciones
sangradas, forman parte de una misma estructura de control.
Una estructura de control, entonces, se define de la siguiente forma:
inicio de la estructura de control:
expresiones
98
if a % 2 == 0:
print ('El número es par ')
else:
print ('El número es impar ')
Atención
Todas las instrucciones que describen el cuerpo de la estructura deben tener una
sangría mayor que el encabezado de la estructura. Esta sangría puede ingresarse mediante
4 espacios preferiblemente o un tabulador, pero es importante que sea la misma para todas
las instrucciones de la estructura.
Estructuras Selectivas
Las estructuras de selección o decisión permiten ejecutar un bloque de código entre
varios disponibles, según el resultado de la evaluación de una expresión lógica situada en la
cabecera de la estructura.
99
Esta forma del condicional if
se interpreta como Si
(expresión_lógica) es verdadera, el
flujo del programa continúa
ejecutando las instrucciones que
estén dentro del bloque if, las cuales se especifican y se
reconocen por estar debidamente sangradas respecto al
inicio de la palabra if. Recuerde que la sangría se establece
dejando espacios en blanco, pasando la instrucción
(palabra) if. Si la (expresión_lógica) es falsa, el flujo del
programa se continúa ignorando las instrucciones del
bloque if.
Por ejemplo, el siguiente código mayoredad.py
verifica si una persona es mayor de edad.
edad = int(input('Ingrese su edad: '))
if edad >= 18:
print ('Es mayor de edad')
# Fin del programa
input('Pulse una tecla para finalizar... ') # Pausa
Ejecute este programa, probando varias veces con valores diferentes.
100
dentro del bloque if (las cuales se especifican y se reconocen por estar debidamente sangradas
respecto al inicio de la palabra if). Si la (expresión lógica) es falsa, el flujo del programa
continúa ejecutando las instrucciones que estén dentro del bloque else (las cuales se
especifican y se reconocen por estar debidamente sangradas respecto al inicio de la palabra
else). En este caso, se garantiza que una de las dos bifurcaciones del flujo del programa se
ejecuta. Debe notarse que las instrucciones if: y else: NO están sangradas una de la otra. Es
decir, ambas instrucciones comienzan al mismo nivel en el programa (solo se sangra el
bloque de instrucciones que debe ejecutarse en caso que alguna de las condiciones se
cumpla). Cabe mencionar que mientras la instrucción if puede tener significado por sí sola,
la instrucción else NO puede aparecer de forma aislada. Siempre debe ir precedida por un if.
Por ejemplo, el siguiente código (parimpar3.py) realiza acciones distintas dependiendo de si
el número de entrada es par o impar:
edad = int(input('Ingrese su edad: '))
if edad >= 18:
print ('Es mayor de edad')
else:
print ('Es menor de edad')
101
ejecuten las instrucciones de ese bloque. A continuación, se presentan ejemplos de la
aplicación de una estructura condicional.
Ejercicio 4-1: Dado un valor real x, determine sí es positivo, negativo o cero.
Código 4-1. posneg.py
# Lectura de datos
x = float(input('Ingrese un valor x: '))
# Procesamiento de datos
if x < 0.0:
msg = 'negativo'
elif x > 0.0:
msg = 'positivo'
else:
msg = 'cero'
# Salida de datos
print ('x es ', msg)
# Procesamiento de datos
if sueldo < 1000:
tasa = 0.00
elif sueldo < 2000:
tasa = 0.05
elif sueldo < 4000:
tasa = 0.10
else:
tasa = 0.12
# Salida de datos
print ('Usted debe pagar ', tasa * sueldo, ' de impuesto')
102
input('Pulse una tecla para finalizar... ') # Pausa
Siempre sólo una de las alternativas será ejecutada. Tan pronto alguna de las
condiciones es verdadera, el resto de ellas no se evalúan.
# Procesamiento de datos
deno = a * e - b * d
if deno == 0:
# Sí el denominador es cero, no existe solución
print('No tiene solución el sistema de ecuaciones')
else:
x = (c * e - b * f) / deno
y = (a * f - c * d) / deno
# Salida de datos
print('La solución del sistema de ecuaciones planteado es')
print('X=', x)
print('Y=', y)
input('Pulse una tecla para finalizar... ') # Pausa
2) Dado un valor numérico entero, desarrolle un programa (paroimpar.py) que determine si
es par o impar.
103
else:
print(n, ' Es Par')
3) Dada la el valor numérico con que una persona indica el agrado por un determinado
producto, un valor entre 0 y 100, elabore un programa (calificación.py) que determine la
calificación del producto en base a la siguiente tabla y empleando if anidados.
Rango Calificación
0-20 Muy Malo
21-40 Deficiente
41-60 Regular
61-80 Bueno
81-100 Muy Bueno
Para plantear la solución se empieza con una decisión considerando el límite superior
del rango, si es menor o igual a ese valor está en esa calificación sino en alguna de las otras,
así se descartan una a una las posibilidades, quedando en el diagrama de flujo algo como lo
siguiente:
# Procesamiento de datos
if agrado <= 20:
msg = 'Muy Malo'
elif agrado <= 40:
msg = 'Deficiente'
elif agrado <= 60:
msg = 'Regular'
elif agrado <= 80:
msg = 'Bueno'
104
# Salida de datos
print ('La Calificación es ' + msg)
105
Unidad 4
Estructuras de Control
Estructuras Repetitivas
106
Objetivos de la Unidad:
• En esta unidad se aprenderá a utilizar las estructuras repetitivas for y while,
así como también las herramientas de programación para resolver la
diversidad de problemas que se pueden presentar en programación.
• Realizar el desglose y composición de números enteros
Estructuras Repetitivas
Estas estructuras, también denominadas ciclos o bucles, ejecutan un bloque de código
de forma repetitiva mientras se cumpla una condición asociada a la estructura. A cada una de
las ocasiones en que se ejecuta el código contenido en estas estructuras se le denomina
iteración.
Instrucción Python
Ciclo Repetitivo con while condición:
condición al inicio Instrucción(es)
Ciclo de Repetición for elemento in secuencia:
Automática Instrucción(es)
Ciclo while
La estructura repetitiva mientras (en inglés while) es
aquella en que el cuerpo del bucle o ciclo (en inglés block) se
repite mientras se cumple una determinada condición. Cuando se
ejecuta la instrucción mientras, la primera cosa que sucede es que
se evalúa la condición (una expresión booleana). Si se evalúa falsa,
no se toma ninguna acción y el programa prosigue en la siguiente instrucción del bucle. Si la
expresión booleana es verdadera, entonces se ejecuta el cuerpo del bucle, después de lo cual
se evalúa de nuevo la expresión booleana. Este proceso se repite una y otra vez mientras la
expresión booleana (condición) sea verdadera [1].
condicionales if, elif, else. Al momento de usar un ciclo while en un programa se debe ser
cuidadoso, puesto que si la expresión booleana nunca llega a ser falsa el programa puede
quedar en un ciclo infinito y no terminar el programa.
En la estructura while el bloque de la secuencia de instrucciones se repite siempre que
la condición dada por el valor de una variable o expresión booleana sea cierta (True). Hay
que recordar que en Python la secuencia de instrucciones dentro de la estructura algorítmica
debe estar sangrada.
A continuación, se presenta un ejercicio que muestra la tabla de multiplicar (Código
4-6) del número introducido por el usuario. Esto es un esquema típico de recorrido:
Código 4-6. Tabla_de_multiplicar.py
# Tabla de multiplicar (del 1 al 10) del número introducido
n = int(input('Tabla: '))
k = 1
while k <= 10:
print(n, ' * ', k, ' = ', n * k)
k = k + 1
print('Tabla de multiplicar del', n)
El programa pide al usuario un número n, se inicializa la variable k en 1 y luego se
ejecuta la iteración while 10 veces, mientras la condición k <= 10 es True. En la décima
iteración la variable k toma el valor 11 y entonces la expresión booleana k <= 10 es False y
sale del while, pasando el programa a la instrucción siguiente print().
Tabla: 7
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
7 * 10 = 70
Tabla de multiplicar del 7
El siguiente código (Código 4-7) muestra los primeros n números naturales en forma
decreciente:
Código 4-7. decreciente.py
# Mostrar los N primeros números naturales en forma descendente
n = int(input('Entra un número natural: '))
i = n
while i >= 1:
print(i, end =' ')
i = i - 1
print('\nHemos mostrado', n,'números naturales decreciendo')
Entra un número natural: 7
7 6 5 4 3 2 1
Hemos mostrado 7 números naturales decreciendo
108
Unidad IV. Estructuras de Control
Estructuras Repetitivas
Este programa no requiere buscar todos los divisores desde 2 hasta n-1. El lector
puede averiguar hasta dónde hace falta buscar posibles divisores del número que se desea
saber si es primo o no. La condición d < n del ciclo while puede cambiarse para detener la
búsqueda antes y obtener el mismo resultado.
El algoritmo de Euclides para calcular el máximo común divisor de dos números n y
m, según los siguientes pasos.
109
Estructuras Repetitivas
Ciclo for
Un for es una entidad que recorre de manera determinada los elementos de una lista
y ejecuta las instrucciones que tenga sangradas [5]. Posee la siguiente sintaxis:
110
Unidad IV. Estructuras de Control
Estructuras Repetitivas
indice = 0
while indice < len(fruta):
letra = fruta[indice]
print (letra)
indice = indice + 1
Este ciclo recorre la cadena y muestra cada letra en una línea distinta. La condición
del ciclo es indice < len(fruta), de modo que cuando indice es igual a la longitud de la cadena,
la condición es falsa y no se ejecuta el cuerpo del ciclo. El último carácter al que se accede
es el que tiene el índice len(fruta)-1, que es el último carácter de la cadena.
Es tan habitual usar un índice para recorrer un conjunto de valores, que Python facilita
una sintaxis alternativa más simple: el ciclo for:
for car in fruta:
print (car)
Cada vez que se recorre el ciclo, se le asigna a la variable car el siguiente carácter de
la cadena. El ciclo continúa hasta que no quedan caracteres.
La Función range()
Si se necesita iterar sobre una secuencia de números, es apropiado utilizar la función
incorporada range() la cual genera una lista que contiene progresiones aritméticas:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ejecución:
1
2
3
4
5
O también,
111
Estructuras Repetitivas
for i in range(4):
print(i,end=" ")
Ejecución:
0123
Obi Wan
Puede resultar sorprendente que range(a, b) incluya todos los números enteros
comprendidos entre a y b, pero sin incluir b. En realidad, la forma “natural” o más
frecuente de usar range es con un sólo parámetro: range(n) que devuelve una lista con los
n primeros números enteros incluyendo al cero (hay razones para que esto sea lo
conveniente). Como incluye al cero y hay n números, no puede incluir al propio número
n. Al extenderse el uso de range a dos argumentos, se ha mantenido la “compatibilidad”
eliminando el último elemento. Una primera ventaja es que resulta fácil calcular cuántas
iteraciones realizará un ciclo range(a, b): exactamente b - a. (Si el valor b estuviera
incluido, el número de elementos sería b - a + 1.)
Hay que ir con cuidado, pues es fácil equivocarse “por uno”. De hecho, equivocarse
“por uno” es tan frecuente al programar (y no sólo con range) que hay una expresión para
este tipo de error: un error Obi Wan (Kenobi), que es más o menos como suena en inglés
“off by one” (pasarse o quedarse corto por uno).
Hemos aprendido que el ciclo for-in utiliza una variable índice a la que se van
asignando los diferentes valores del rango. En muchos ejemplos se utiliza la variable i,
pero sólo porque también en matemáticas las sumatorias y productorias suelen utilizar la
letra i para indicar el nombre de su variable índice. Puedes usar cualquier nombre de
variable válido.
Pero que el índice sea una variable cualquiera no te da libertad absoluta para hacer
con ella lo que quieras. En un ciclo, las variables de índice sólo deben usarse para consultar
su valor, nunca para asignarles uno nuevo. Por ejemplo, este fragmento de programa es
incorrecto:
for i in range(0, 5):
i += 2 # Error
Y ahora qué sabes que los ciclos pueden anidarse, también has de tener mucho
cuidado con sus índices. Un error frecuente entre primerizos de la programación es utilizar
el mismo índice para dos ciclos anidados. Por ejemplo, estos ciclos anidados están mal:
for i in range(0, 5):
for i in range(0, 3): # Error
print (i)
112
Unidad IV. Estructuras de Control
Estructuras Repetitivas
En el fondo, este problema es una variante del anterior, pues de algún modo se está
asignando nuevos valores a la variable i en el ciclo interior, pero i es la variable del ciclo
exterior y asignarle cualquier valor está prohibido.
Recuerda: nunca debes asignar un valor a un índice de ciclo ni usar la misma
variable índice en ciclos anidados.
# Lectura de datos
n = int(input('Indique la cantidad de elementos: '))
# Inicialización de variables
suma = 0
# Procesamiento de datos
for k in range(n):
# Lectura de datos
num = int(input('Indique un valor: '))
suma = suma + num
prom = suma / n
# Salida de datos
print ('El promedio es: ', prom)
Ejecución:
113
Estructuras Repetitivas
for i in range(NUMBER_OF_TRIALS):
x = random.random() * 2 – 1
y = random.random() * 2 – 1
if x * x + y * y <= 1:
numberOfHits += 1
pi = 4 * numberOfHits / NUMBER_OF_TRIALS
114
Unidad IV. Estructuras de Control
Herramientas de programación
elif opcion == 3:
print("Hasta la próxima")
break
else:
print("Opción incorrecta. Debe ingresar 1, 2 o 3")
Herramientas de programación
Hasta este momento de la lectura los programas son una combinación de
asignaciones, condicionales y ciclos, organizados de tal manera que describan el algoritmo a
ejecutar.
Existen algunas tareas comunes y que casi siempre se resuelven de la misma manera.
Por lo tanto, es conveniente conocerlas.
En programación, se llama patrón a una solución que es aplicable a un problema que
ocurre a menudo. A continuación, se presneta algunos patrones comunes que ocurren en
programación.
115
Herramientas de programación
ciclo:
valor = ...
...
acumulador = acumulador operación valor
El cómo adaptar esta plantilla a cada situación de modo que entregue el resultado
correcto es responsabilidad del programador.
Contar sucesos
Para contar cuántas veces ocurre algo, hay que usar un acumulador, al que se le suele
llamar contador.
Tal como en el caso de la suma, debe ser inicializado en cero, y cada vez que aparezca
lo que se quiere contar, hay que incrementarlo en uno.
Por ejemplo, el siguiente programa cuenta cuántos de los números naturales menores
que mil tienen un cubo terminado en siete:
c = 0
for i in range(1000):
ultimo_digito = (i ** 3) % 10
if ultimo_digito == 7:
c = c + 1
print (c)
mayor = -1
for i in range(10):
n = int(input())
if n > mayor:
mayor = n
116
Unidad IV. Estructuras de Control
Herramientas de programación
En este caso, como todos los números ingresados son positivos, se inicializa la
variable auxiliar en -1, que es menor que todos los valores posibles, por lo que el que sea el
mayor eventualmente lo reemplazará.
¿Qué hacer cuando no exista un valor inicial que sea menor a todas las entradas
posibles? Una solución es poner un número «pequeño negativo», de tal manera que el usuario
no ingrese uno menor que él. Esta no es la mejor solución, ya que no cubre todos los casos
posibles:
mayor = -999999999
for i in range(10):
n = int(input())
mayor = max(mayor, n)
Una opción más robusta es usar el primero de los valores por examinar:
mayor = int(input()) # preguntar el primer valor
La otra buena solución es usar explícitamente el valor −∞, que en Python puede
representarse usando el tipo float de la siguiente manera:
mayor = -float('inf') # Así se asigna "infinito" en Python
for i in range(10):
n = int(input())
mayor = max(mayor, n)
Si se sabe de antemano que todos los números por revisar son positivos, simplemente
se inicializa la variable mayor en 1.
Por supuesto, para obtener el menor valor se hace de la misma manera, pero
inicializando el acumulador con un número muy grande, y actualizándolo al encontrar un
valor menor.
Generar pares
Para generar pares de elementos en un programa, es necesario usar dos ciclos
anidados (es decir, uno dentro del otro).
Ambos ciclos, el exterior y el interior, van asignando valores a sus variables de
control, y ambas son accesibles desde dentro del doble ciclo.
Por ejemplo, todas las casillas de un tablero de ajedrez pueden ser identificadas
mediante un par (fila, columna). Para recorrer todas las casillas del tablero, se puede hacer
de la siguiente manera:
for i in range(1, 9):
for j in range(1, 9):
print ('Casilla', i, j)
117
Secuencias y Series
Cuando los pares son desordenados (es decir, el par (a,b) es el mismo que el par
(b,a)), el ciclo interior no debe partir desde cero, sino desde el valor que tiene la variable de
control del ciclo interior.
Por ejemplo, el siguiente programa muestra todas las piezas de un juego de dominó:
for i in range(7):
for j in range(i, 7):
print (i, j)
Además, otros tipos de restricciones pueden ser necesarias. Por ejemplo, en un
campeonato de fútbol, todos los equipos deben jugar entre ellos dos veces, una como local y
una como visita. Por supuesto, no pueden jugar consigo mismos, por lo que es necesario
excluir los pares compuestos por dos valores iguales. El siguiente programa muestra todos
los partidos que se deben jugar en un campeonato con 6 equipos, suponiendo que los equipos
están numerados del 0 al 5:
for i in range(6):
for j in range(6):
if i != j:
print (i, j)
Otra manera de escribir el mismo código es:
for i in range(6):
for j in range(6):
if i == j:
continue
print (i, j)
Secuencias y Series
Para los estudiantes de programación, es interesante la aplicación de las técnicas de
resolución de ejercicios relacionados al cálculo de los términos de una serie o secuencia,
porque en ellas se utilizan todas las técnicas elementales de programación, tales como
acumuladores, ciclos de diferentes tipos, banderas y por supuesto expresiones de diferentes
tipos.
SUCESIÓN Y SECUENCIA: Una sucesión matemática es una función definida
sobre los enteros naturales. Una secuencia es una concatenación de símbolos obtenidos a
partir de una sucesión. Son semejantes a las sucesiones y se pueden derivar fácilmente de
éstas. Por ejemplo, la definición matemática de la secuencia de Fibonacci es:
𝑓𝑖𝑏(1) = 0 𝑃𝑎𝑟𝑎 𝑛 = 1
𝑓𝑖𝑏(𝑛) { 𝑓𝑖𝑏(2) = 1 𝑃𝑎𝑟𝑎 𝑛 = 2
𝑓𝑖𝑏 (𝑛) = 𝑓𝑖𝑏 (𝑛 − 2) + 𝑓𝑖𝑏 (𝑛 − 1) ∀𝑛 > 2
Los primeros 10 términos de esta secuencia son: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, . . . Así,
si se toma como base la secuencia de Fibonacci, es sencillo definir una nueva secuencia para
el alfabeto A = {0,1} según el siguiente método:
118
Unidad IV. Estructuras de Control
Secuencias y Series
• Los ejercicios típicos para estos casos corresponden a: [1] Determinar los primeros N
términos de la secuencia, [2] Determinar los términos de la secuencia menores que
N, [3] Determinar los términos comprendidos en el rango abierto de N y M. El
problema podría referirse a sumar los términos calculados, o determinar
promedios/porcentajes, etc.
• Para calcular, desde el segundo término en adelante, la secuencia de Fibonacci, se
requiere recordar los dos últimos términos calculados. El concepto de recordar
valores obtenidos de cálculos anteriores, se conoce como un historial y es interesante
desde el punto de vista de programación, porque requiere el uso de variables
auxiliares, asignaciones o cambios de valores adecuados.
• SERIES: Una serie es la suma de los términos de una sucesión. Se representa una
serie con términos an como se muestra a continuación:
𝑁
∑ 𝑎𝑛
𝑖=!
119
Secuencias y Series
término anterior por la transición para generar el nuevo termino. Esta técnica no es
apropiada para aquellos casos en que el término de la serie conlleva una sumatoria.
b. CON LOS ELEMENTOS QUE CONFORMAN EL TÉRMINO, en este caso se descompone
el termino en elementos básicos como sumatorias, productorias, signos alternos,
cálculos previos o internos.
Entre los elementos de programación más usados en los programas de series, se
encuentran:
120
Unidad IV. Estructuras de Control
Secuencias y Series
Algoritmo serie1
Variables diagrama de flujo
; entrada
N : entero
X : real
; proceso
A : real
P : real
F : entero
; salida
S : real
Inicio
Imprimir “# de Términos:”
Leer N
Imprimir “Valor de X:”
Leer x
; inicio contadores y acumuladores
S<-0
P<-1
A<-0
F<-1
; Ciclo para generar los términos
Para I<- 1 hasta N hacer
; elementos del término
P <- p * x
A <- A + P
F <- F * (2 * i)*(2 * i -1)
; TÉRMINO
Termino <- A/F
; Uso EL TÉRMINO
S <- S + termino
Finpara
Imprimirln” La suma de los primeros “, N,
“términos de la
serie es “, S
Fin
Ejercicio 4-7: Dados los valores de X y R, elabore el Diagrama de Flujo de un
𝒙𝟐
−( )
programa que determine el valor aproximado de 𝒆 𝟐 según el desarrollo de los primeros
R términos, empleando el método de Taylor, el cual se muestra a continuación,
𝑥2 𝑥2 𝑥4 𝑥6 𝑥8
−( )
𝑒 2 = 1− + − + −⋯
2 ∗ 1! 4 ∗ 2! 6 ∗ 3! 8 ∗ 4!
Análisis del Problema:
121
Secuencias y Series
Algoritmo serie2
Variables
; entrada
N : entero
R : real
; proceso
Signo : real
Par : real
Potx : real
; salida
S : real
Inicio
Imprimir “# de Términos:”
Leer N
Imprimir “Valor de X:”
Leer x
S<-0
signo <-1
par <-0
potx <-1
fact <- 1
Para i <- 1 hasta N hacer
termino <- potx /(par*
fact)
S<-s + termino
signo <- - signo
potx <- potx * x * x
fact <- fact * i
Finpara
Imprimirln ” La suma de los
primeros “, N, “terminos de la
serie es “, S
Fin
122
Unidad IV. Estructuras de Control
Secuencias y Series
denominador
fact
par
i
'''
n = int(input("n: "))
x = float(input("x: "))
# Proceso
for i in range(n):
# Calcular cada elemento del termino
if i == 0:
termino = 1
else:
signo = (-1) ** i
numerador = x ** (2 * i)
fact *= i
par = 2 * i
denominador = par * fact
# Calcular el termino
termino = signo * numerador / denominador
# Sumar el termino
suma += termino
print("Termino (" , i , ") = ", termino)
# Impresión de resultado
print("Suma=", suma)
123
Secuencias y Series
124
Unidad IV. Estructuras de Control
Composición y descomposición de un número.
# Lecturas correspondientes
# Se leen los valores de número de variable de la serie (h) y términos (m)
# Inicializaciones correspondientes
suma = 0
signo = -1
suma_impares = 0
suma_pares = 0
denominador = factorial
# Se imprime la suma
print("La suma de los ", m, " primeros términos es: ", suma)
Ejecución del programa serie1.py:
125
Composición y descomposición de un número.
2, 3, 4, 5, 6, 7, 8, 9), un sistema de base dos utiliza 2 símbolos (0, 1), un sistema de base
cuatro utiliza 4 símbolos (0, 1, 2, 3). Desde hace años, el hombre utiliza como sistema de
numeración el sistema decimal, derivado del sistema numérico indo-arábigo y muy
posiblemente fundamentado en los diez dedos de las manos.
Los sistemas de numeración actuales son sistemas posiciónales, en los que el valor
que representa cada símbolo o cifra depende de su valor absoluto y de la posición relativa
que ocupa la cifra con respecto al resto. Siendo entonces el digito menos significativo aquel
ubicado en la posición relativa de menor valor; y el digito más significativo aquel ubicado en
la posición relativa de mayor valor. Para un número entero de cinco dígitos: el digito menos
significativo es el digito ubicado en la posición relativa: unidad y el dígito más significativo
es el digito en la posición relativo: decena de miles. Por ejemplo: para el numero: 1 2 3 4 5
el dígito menos significativo es: 5 y el digito más significativo es: 1
Las tareas más comunes para la manipulación de dígitos que conforman un número
son: (1) Componer un número a partir de sus dígitos; (2) Determinar la cantidad de dígitos
que conforman un número; (3) Desglosar un número en sus dígitos; entre otras.
Otro Forma es partir de la unidad, pero considerando que el número tiene por lo
menos un dígito, se compara con el valor de la Unidad *10:
UNIDAD
NUMERO Observe que al
SEGUIDA n>=u*10 cd CÓDIGO
(n)
DE CEROS (u ) finalizar el proceso
58975 1 Si 2 u=1 u contiene la
1 * 10 Si 3 cd = 1 misma cantidad
10 * 10 Si 4 mientras n >= u * 10 de dígitos que el
100 * 10 Si 5 u = u * 10 número original
1000 * 10 No cd = cd + 1
126
Unidad IV. Estructuras de Control
Composición y descomposición de un número.
Note que este algoritmo descompone el número desde el digito menos significativo al digito más
significativo: 7 9 8 5 4
127
Composición y descomposición de un número.
Note que este algoritmo compone el número a partir del digito menos significativo al digito más
significativo: 79854.
Nota: Para el ejemplo se leen los dígitos, pero pueden provenir
de otro proceso, en cuyo caso no se leerían.
Note que este algoritmo compone el número a partir del digito menos significativo al digito más
significativo: 45897.
Nota: Para el ejemplo se leen los dígitos, pero pueden provenir
de otro proceso, en cuyo caso no se leerían.
Ejercicio 4-9: Escribir un programa que solicite números positivos al usuario.
Mostrar el número cuya sumatoria de dígitos fue mayor y la cantidad de números cuya
sumatoria de dígitos fue menor que 10.
Código 4-16. dígitos_suma_cant.py
cantidad = 0
mayor = -1
numero = int(input("Número positivo: "))
128
Unidad IV. Estructuras de Control
Glosario
Glosario
anidamiento: Una estructura de programa dentro de otra; por ejemplo, una sentencia
condicional dentro de una o ambas ramas de otra sentencia condicional.
bloque: Grupo de sentencias consecutivas con el mismo sangrado.
condición: La expresión booleana de una sentencia condicional que determina qué
rama se ejecutará.
cuerpo: En una sentencia compuesta, el bloque de sentencias que sigue a la cabecera
de la sentencia.
expresión booleana: Una expresión que es cierta o falsa.
operador de comparación: Uno de los operadores que comparan dos valores: ==.
!=, >, <. >= y <=.
operador lógico: Uno de los operadores que combinan expresiones booleanas: and,
or y not.
operador módulo: Operador, señalado con un signo de tanto por ciento (que trabaja
sobre enteros y devuelve el resto cuando un número se divide entre otro.
sentencia compuesta: Estructura de Python que está formado por una cabecera y un
cuerpo. La cabecera termina en dos puntos (:). El cuerpo tiene una sangría con respecto a la
cabecera.
sentencia condicional: Sentencia que controla el flujo de ejecución de un programa
dependiendo de cierta condición.
Resumen
129
Recomendaciones para la escritura de código limpio.
Para poder tomar decisiones en los programas y ejecutar una acción u otra, es
necesario contar con una estructura condicional.
Las condiciones son expresiones booleanas, es decir, cuyos valores pueden ser
verdadero o falso, y se escriben mediante operadores entre distintos valores.
Mediante expresiones lógicas es posible modificar o combinar expresiones
booleanas.
La estructura condicional puede contener, opcionalmente, un bloque de código que
se ejecuta si no se cumplió la condición.
Es posible anidar estructuras condicionales, colocando una dentro de otra.
También es posible encadenar las condiciones, es decir, colocar una lista de posibles
condiciones, de las cuales se ejecuta la primera que sea verdadera.
En esta unidad también se ha utilizado las dos estructuras de control que permiten
repetir instrucciones.
Además de los ciclos definidos, en los que se sabe cuáles son los posibles valores que
tomará una determinada variable, existen los ciclos indefinidos, que se terminan cuando no
se cumple una determinada condición.
Se utiliza la función range() para generar una lista de valores automática que nos
facilitó el uso de for, aunque su uso no es exclusivo de este contexto.
La condición que termina el ciclo puede estar relacionada con una entrada de usuario
o depender del procesamiento de los datos.
Se utiliza el método del centinela cuando se quiere que un ciclo se repita hasta que el
usuario indique que no quiere continuar.
Además de la condición que hace que el ciclo se termine, es posible interrumpir su
ejecución con código específico dentro del ciclo.
130
Unidad IV. Estructuras de Control
Recomendaciones para la escritura de código limpio.
total += 6
5. Dejar la sangría con 4 espacios; evita usar la tecla tabuladora. Ejemplo:
if nombre == 'Ángel':
print('Hola', nombre)
input()
6. Escriba la expresión lógica de forma clara, sencilla y de forma positiva, es decir, que se
debe cumplir para ejecutar el bloque de instrucciones.
7. No escriba condiciones innecesarias, en algunos casos puede hacer analogía con
inecuaciones o conjuntos, evalúe la posibilidad de utilizar el descarte como parte de la
condición.
8. Si la expresión lógica es muy compleja, puede utilizar una variable para almacenar dicha
expresión.
9. Las variables se escriben en minúscula y en caso de estar formadas por varias palabras,
éstas van unidas por guiones bajos. Ejemplo: velocidad, altura_inicial
10. Declarar las variables con el tipo de dato adecuado, escribiendo en minúscula dicho tipo
de dato. Ejemplo:
nombre: str
contador_alumnos: int
11. Declarar las variables mediante identificadores adecuados. No utilizar identificadores
que carezca de significado descriptivo. Con un código legible y nombres significativos,
el código se va auto documentado.
12. Ser consistente al momento de utilizar un estándar para nombres largos, por ejemplo,
para una variable que almacena cantidad de alumnos 'contador_alumnos'
13. Declarar variables en líneas separadas, posibilitando agregar una descripción de cada
variable mediante comentarios.
14. Declare las variables en orden, recomendablemente: primero las variables de entrada,
luego las variables de salida y finalmente las variables de proceso. Para realizar esto:
a. Identifique las variables de entrada en el enunciado o planteamiento del
problema.
b. Identifique las variables de salida, las cuales corresponden a las preguntas en el
enunciado.
c. Para identificar las variables de proceso, lógicamente tendrá que analizar cómo
obtener las variables de salida, entonces debe ir pregunta por pregunta
analizando como resolver, por ejemplo: si se le solicita determinar el promedio
de estudiantes aprobados, como es el cálculo de un promedio, necesitará un
acumulador y un contador, estas son dos variables que debe declarar en la
sección de variables de proceso. Otro ejemplo: para determinar el alumno con
la mayor nota, requerirá de una bandera, una variable para comparar la mayor
nota y al menos una variable que guarde el nombre del estudiante, esto
dependerá de la pregunta del enunciado que indicará cuáles datos se requerirán
de ese estudiante.
15. Inicializar las variables que así lo requieren, en especial: variables de tipo cadena (str),
contadores, acumuladores, productorias, entre otras.
131
Recomendaciones para la escritura de código limpio.
a = True
b = False
c = False
d = False
132
Unidad IV. Estructuras de Control
Recomendaciones para la escritura de código limpio.
elif condición2:
...
24. No Repita Instrucciones Innecesariamente dentro de los bloques de la estructura
condicional, sí esto sucede evalúe la posibilidad de que dicha instrucción se escriba fuera
de la estructura, por ejemplo:
En vez de escribir está estructura:
if condición:
...
num = a + b
den = a * b
t = num / den
else:
...
num = c + d
den = c * d
t = num / den
Escríbalo de esta manera:
if condición:
...
num = a + b
den = a * b
else:
...
num = c + d
den = c * d
t = num / den # Esta instrucción estaba repetida en la estructura
# condicional anterior, por lo tanto,
# se escribe fuera de la estructura.
25. Utilice los operadores lógicos adecuadamente; por ejemplo, si se requiere la condición
para los valores de x entre 0 y 5:
cond = 0 < x < 5
26. Con el fin de evitar errores de ejecución, realice la validación de las fórmulas o
ecuaciones en los casos de que exista la posibilidad de una indeterminación, como es el
caso de promedio, porcentaje, o en series numéricas. Por ejemplo, si se calcula el
promedio de notas de aprobados como: prom_aprob = suma_notas_aprob / cant_prob,
resultaría infinito si cant_aprob es cero, es una posibilidad remota; pero puede suceder,
para ello se debe programar de la siguiente manera:
if cant_prob == 0:
print("No hubo aprobados")
else:
prom_aprob = suma_notas_aprob / cant_prob
print(f"El Promedio de Aprobados es = {prom_aprob:.2f}")
De esta manera, se captura un posible error de ejecución en caso de que no haya
estudiantes aprobados.
27. Utilice la estructura repetitiva adecuada, sí conoce la cantidad de veces a ejecutar el
ciclo, utilice for, si las iteraciones dependen de una condición determinada, utilice while.
133
Recomendaciones para la escritura de código limpio.
134
Referencias