Sei sulla pagina 1di 77

Centro de Enseñanza Asistida por Computador - CENEAC

Programación con

Curso Programación con Python


Centro de Enseñanza Asistida por Computador - CENEAC

Índice

1. LENGUAJE DE PROGRAMACIÓN PYTHON 1

2. CONCEPTOS BÁSICOS SOBRE CONSTRUCCIÓN DE PROGRAMAS 2


Computador u Ordenador 2
Hardware 2
Software 2
Software de Aplicación 3
Software Utilitario 3
Lenguajes de Programación: 3
Algoritmo (algorithm) 3
Pseudo-código (pseudo-code) 4
Lenguaje de programación (programming language) 4
Programa (program) 4
Programación (programming) 4
Aspectos que miden la Calidad en un programa 5
Capacidad de Abstracción 5
Enfoques para solucionar un problema 5
Fases en la resolución de Problemas 5
Ciclo de Vida de Desarrollo del Software y sus fases o etapas más usuales 5
Datos 6
Tipo de Dato 6
Variable 7
Constante 7
Operaciones de los tipos de datos elementales 7
Palabras reservadas (keywords) 7
Operadores 8
Delimitadores 8
Funciones integradas (built-in functions) 8
Precedencia 9
Expresiones 10
Secuenciamiento 10
Operación de Asignación 11
Operación de Lectura o Entrada Simple ( Leer – read ) 11
Operación de Escritura o Salida Simple ( Escribir – write ) 11
Conversión de Tipos 12

Curso Programación con Python


Centro de Enseñanza Asistida por Computador - CENEAC

3. ESTRUCTURAS DE CONTROL CONDICIONAL 15


3.1 CONDICIONAL SIMPLE: Si – Entonces – Fsi ( If – Then – EndIf ) 15
3.2 CONDICIONAL COMPUESTO: Si – Entonces – Sino – Fsi ( If – Then – Else – EndIf ) 15
3.3 CONDICIONAL ANIDADO 16
3.4 SELECCIÓN MÚLTIPLE: Selección – Sino – FSelección ( Select – End Select ) 17

4. ESTRUCTURAS DE CONTROL ITERATIVO O CICLOS 19


4.1 Bucles o Ciclos 19
4.2 Estructura Iterativa Para ... FinPara ( For ... Next ... End For ) 20
4.3 Estructura iterativa Mientras – hacer – FinMientas ( While ... Do ... EndWhile ) 21

5. PROCEDIMIENTOS 23
5.1 Acciones 24
5.2 Funciones 25
5.3 Tipos de Parámetros y Pase de Parámetros 26

6. Tipos de Datos Estructurados (TDE) 28


6.1 Arreglos 28
6.2 Registros 31
6.3 Archivos 32
Tipos de datos estructurados en Python 34

7. PROGRAMACIÓN ORIENTADA A OBJETOS (POO) 39


7.1 Objeto 39
7.2 Clase 40
7.3 Relación entre Clase y Objeto 41
7.4 Atributo 41
7.5 Método 41
7.6 Mensaje 42

ENTORNOS DE PROGRAMACIÓN (IDE’S) PARA PYTHON 2

LISTA DE EJEMPLOS RESUELTOS: 3

LISTA DE EJERCICIOS PARA CONSOLIDAR: 4

Curso Programación con Python


Centro de Enseñanza Asistida por Computador - CENEAC

II. ASPECTOS BÁSICOS DE LA PROGRAMACIÓN Y


DEL LENGUAJE PYTHON

1. LENGUAJE DE PROGRAMACIÓN PYTHON


Python es un lenguaje de programación desarrollado como proyecto de código abierto. Fue creado por Guido
van Rossum y su nombre se debe a la afición de su creador a los humoristas británicos Monty Python. Se trata
de un lenguaje de programación en scripts, competencia directa de Perl. Su desarrollo y documentación es
guiado por la Python Software Foundation.
Python es un lenguaje de programación de alto nivel, interpretado y multipropósito. En los últimos años su
utilización ha ido constantemente creciendo y en la actualidad es uno de los lenguajes de programación más
empleados para el desarrollo de software. Al ser un lenguaje interpretado, permite ahorrar el proceso de
compilado. Puede ser utilizado en diversas plataformas y sistemas operativos, entre los que podemos destacar
los más populares, cómo Windows, Mac OS X y Linux. Pero, además, Python también puede funcionar en
teléfonos inteligentes (smartphones), Nokia desarrolló un intérprete de esté lenguaje para su sistema operativo
Symbian.
Python comenzó a concebirse a finales de los 80 y su implementación fue iniciada en diciembre de 1989 por
Guido van Rossum en el CWI en Países Bajos, como un sucesor al lenguaje de programación ABC, capaz de
manejar excepciones e interactuar con el sistema operativo Amoeba.
Python 2.0 fue lanzado el 16 de octubre de 2000, con grandes cambios y características como un recolector
completo de basura y soporte para Unicode. Con el lanzamiento de esta versión, el proceso de desarrollo
cambió y se volvió más transparente y más apoyado en su comunidad de desarrolladores. Python 3 (también
llamado Python 3.0, Python 3000 o py3k), fue lanzado -tras un largo período de prueba- el 3 de diciembre de
2008; se volvió incompatible hacia atrás.
Entre las aplicaciones y software escritos en Python destacan:
- Aplicaciones: BitTorrent, Blender 3D, Calibre, Dropbox, MusicBrainz Picard, Ubuntu Software Center,
YUM, etc.
- Aplicaciones web: GNU Mailman, OpenERP.
- Videojuegos: Civilization IV, Disney Toontown Online, Battlefield 2, Vega Strike.
Python es un lenguaje de programación fácil de aprender que tiene eficaces estructuras de datos de alto nivel y
una solución de programación orientada a objetos simple pero eficaz. La elegante sintaxis de Python, su
gestión de tipos dinámica y su naturaleza interpretada hacen de él el lenguaje ideal para guiones (scripts) y
desarrollo rápido de aplicaciones, en muchas áreas y en la mayoría de las plataformas.
Permite dividir el programa en módulos reutilizables desde otros programas Python. También tiene con una
gran colección de módulos estándar que proporcionan E/S de ficheros, llamadas al sistema, sockets, interfaces
GUI, etc.
El intérprete de Python y la extensa biblioteca estándar están disponible libremente, en forma de fuentes o
ejecutables, para las plataformas más importantes en la sede web de Python, http://www.python.org , y se
pueden distribuir libremente.
El intérprete Python se puede ampliar con nuevas funciones y tipos de datos implementados en C y C++ (u
otros lenguajes a los que se pueda acceder desde C). Python es también adecuado como lenguaje de extensión

Curso Programación con Python 4


Centro de Enseñanza Asistida por Computador - CENEAC

para aplicaciones adaptables al usuario. Esta guía presenta informalmente al lector los conceptos y
características básicos del lenguaje y sistema Python. Es conveniente tener a mano un intérprete para hacer
experimentos, pero todos los ejemplos son autosuficientes, así que la guía se puede leer sin estar conectado.
Para obtener descripciones de módulos y objetos estándar, consulta el documento Referencia de las
bibliotecas. El Manual de Referencia de Python ofrece una definición más formal del lenguaje. Para escribir
extensiones en C o C++, lee los manuales de Extensión e incrustación y Referencia de la API Python/C. Estos
recursos están disponibles en el sitio web oficial https://docs.python.org/3/ y en el sitio web de la Comunidad
Python de Argentina http://www.python.org.ar/ entre otros.

2. CONCEPTOS BÁSICOS SOBRE CONSTRUCCIÓN DE PROGRAMAS

Computador u Ordenador
Dispositivo electrónico utilizado para procesar datos en forma automática y obtener resultados los cuales
pueden a su vez ser organizados y analizados para producir información. El computador está conformado por
una parte física llamada hardware y por una parte lógica o de programas llamada software.

Hardware
En un computador se refiere a todos los componentes físicos que lo conforman, los aparatos propiamente
dichos.
Como ejemplo tenemos los chips de los procesadores (CPU, procesadores matemáticos, procesadores de
video), las tarjetas (la tarjeta madre, las tarjetas de memoria como la memoria RAM, las tarjetas de video, red,
sonido), las unidades de almacenamiento (disco duro, disquete, cd, dvd, pen drive), los dispositivos periféricos
(ratón, teclado, monitor, impresora)

Software
Son los programas que permiten utilizar los recursos del computador. Programación, soporte lógico, parte no-
mecánica o no-física de un sistema. Es un conjunto de programas y procedimientos que se incluyen en un
computador o equipo con el fin de hacer posible el su uso eficaz de dicha máquina. Son las instrucciones
responsables de que el hardware (la máquina) realice su tarea.
Como ejemplo tenemos los sistemas operativos, el software de aplicación, el software utilitario y los lenguajes
de programación.
Sistema Operativo: Software básico encargado de controlar diferentes procesos en el computador mediante
tres grandes funciones:
• Coordinar y manipular el hardware del computador: como los procesadores, la memoria, las impresoras, las
unidades de almacenamiento, el monitor, el teclado o el ratón;
• Organizar los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, cds;
• Gestionar los errores de hardware y la pérdida de datos.

Software de Aplicación

Curso Programación con Python 5


Centro de Enseñanza Asistida por Computador - CENEAC

Programa informático diseñado para facilitar al usuario la realización de un determinado tipo de trabajo.
Algunas son aplicaciones desarrolladas 'a la medida' que ofrecen una gran potencia y soluciones eficientes ya
que están exclusivamente diseñadas para resolver un problema específico. Son ejemplos de este tipo de
software los programas que realizan tareas concretas como manejo de nómina, análisis de estadísticas, manejo
de almacén, etc.

Software Utilitario
Son programas que facilitan el uso del computador como herramienta para solucionar actividades generales
como la edición de textos o la digitalización de materiales. En muchos casos los programas utilitarios son
agrupados en paquetes integrados de software, por ejemplo el Microsoft Office o el OpenOffice, donde se
ofrece soluciones más generales, pero se incluyen varias aplicaciones (procesador de textos, de hoja de cálculo,
manejador de base de datos, correo electrónico, visor de imágenes, etc.).

Lenguajes de Programación:
Sirven para escribir programas que permitan la comunicación usuario/máquina y la soluciones de problemas
utilizando las ventajas, poder de cálculo, procesamiento y almacenamiento del computador.
Diferencias entre los tipos software
El software de aplicación se diferencia de un sistema operativo (que hace funcionar al ordenador), de una
utilidad (que realiza tareas de mantenimiento o de uso general) y de un lenguaje (con el cual se crean los
programas informáticos), en que suele resultar una solución informática para la automatización de tareas en
un área determinada (procesamiento de texto, edición de imágenes, estadística, manejo de correspondencia,
etc).

Algoritmo (algorithm)
Es un conjunto bien definido de procedimientos lógicos o matemáticos que se pueden seguir para resolver un
problema en un número finito de pasos.
Es una lista finita de pasos que plantean una solución a un problema, preferiblemente pasos los más cortos y
simples posibles. Para un mismo problema pueden existir muchos algoritmos que conducen a su solución. La
elección del mejor algoritmo está guiada por criterios de eficiencia y eficacia, entre otras características
deseables.
Elementos de un algoritmo:
• Datos de entrada
• Proceso o pasos que resuelven el problema
• Datos de salida

Características de un algoritmo:
• Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
• El resultado del algoritmo debe estar definido. Si se sigue un algoritmo dos veces con los mismos datos de
entrada, se debe obtener el mismo resultado cada vez.

Curso Programación con Python 6


Centro de Enseñanza Asistida por Computador - CENEAC

• Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento, es decir, se debe
tener un número finito de pasos.

Pseudo-código (pseudo-code)
En un algoritmo expresado de manera más formal. Se utiliza como una representación intermedia, antes de
traducirlo o codificarlo con un lenguaje de programación. En las clases de Algoritmo y Programación
utilizaremos el pseudo-código para expresar las soluciones algorítmicas creadas.

Lenguaje de programación (programming language)


En computación es cualquier lenguaje artificial que puede utilizarse para definir una secuencia de
instrucciones, a fin de que puedan ser procesadas por un computador.
Conjunto de caracteres, reglas, palabras reservadas y operaciones con significados previamente asignados y
que permiten escribir programas.
La definición de un lenguaje de programación cubre tres aspectos:
1. Léxico: definen los símbolos que sirven para la redacción de un programa y las reglas para la formación de
palabras en el lenguaje. Por ejemplo, 10 es un número entero
2. Sintaxis: conjunto de reglas que permiten organizar las palabras del lenguaje en frases, por ejemplo, la
operación de división se define como Dividendo/Divisor
3. Semántica: definen las reglas que dan sentido a una frase
Los principales tipos de lenguajes de programación utilizados en la actualidad son:
• Lenguajes de máquina
• Lenguajes de bajo nivel y traductores (lenguaje ensamblador, compiladores, intérpretes)
• Lenguajes de alto nivel (C++, C#, Visual Basic, Java, Turbo Pascal, Prolog, SQL, HTML, JavaScript, VBScript,
PHP, VB.Net, Fortran, Delphi, etc.)

Programa (program)
En Computación, es el conjunto de instrucciones que definen la secuencia de eventos que un computador debe
ejecutar para llevar a cabo una tarea, realizando cálculos y suministrando resultados.
Grupo de instrucciones compuestas con la finalidad de resolver un problema específico mediante el uso de un
computador. Un programa está codificado en un lenguaje que la máquina es capaz de entender y procesar.
Es la traducción de un algoritmo o de un pseudo-código utilizando un lenguaje de programación.

Programación (programming)
Proceso que comprende el análisis del problema, diseño de la solución, escritura o desarrollo del programa,
prueba del programa y su corrección.
Es la disciplina de la Computación que trata el desarrollo de programas.

Aspectos que miden la Calidad en un programa

Curso Programación con Python 7


Centro de Enseñanza Asistida por Computador - CENEAC

Algunos aspectos que se consideran para medir la calidad de un programa, también llamados características
deseables en un programa, son:
• Legibilidad • Robustez • Eficacia • Eficiencia • Adaptabilidad
• Portabilidad • Reusabilidad del software • Usabilidad • Accesibilidad

Capacidad de Abstracción
Mecanismo intelectual principal en la actividad de la programación, el cual durante la etapa de análisis del
problema permite la separación de los aspectos relevantes de los irrelevantes en el contexto estudiado. Por
ejemplo, si el problema consiste en determinar cuál es la persona más alta del salón, lo relevante es la estatura
de cada persona, y no color de ojos, talla de calzado, etc.

Enfoques para solucionar un problema


1. Programación Modular. Ejemplo, cálculo de la superficie (S = PI*R^2) y longitud (L = 2*PI*R) de la
circunferencia
4. Enfoque Divide y Vencerás. Ejemplo, sistema de manejo de almacén.
5. Diseño Descendente (top-down). Ejemplo, para el problema de indicar los pasos para ver una película en el
cine se podría considerar en un primer nivel los siguientes pasos: 1) Ir al cine, 2) Comprar una entrada, 3)
Ver la película 4) Regresar a casa. Luego cada uno de estos pasos pueden subdividirse en otros niveles
donde las instrucciones sean cada vez más específicas.

Fases en la resolución de Problemas


Resolver problemas a través de un computador se basa principalmente en analizar, diseñar, escribir y ejecutar
un programa con pasos orientados a solucionar el problema. Podemos considerar como fases de resolución de
un problema las siguientes:
1. Análisis del problema
2. Diseño del algoritmo, utilizando pseudo-código
3. Codificación, traducción del algoritmos a un lenguaje de programación, esto nos permite crear el programa
4. Ejecución del código del programa
5. Verificación del programa
6. Documentación
7. Depuración de errores
8. Mantenimiento y mejora del programa

Ciclo de Vida de Desarrollo del Software y sus fases o etapas más usuales
1. Análisis. El problema se analiza teniendo en cuanta los requerimientos o necesidades expresadas por el
cliente, la empresa o las personas que utilizaran el programa.
6. Diseño. Una vez analizado el problema se diseña una solución que conduce a un algoritmo general que
resuelve los elementos más significativos del programa. Este algoritmo puede ser escrito utilizando
pseudocódigo.

Curso Programación con Python 8


Centro de Enseñanza Asistida por Computador - CENEAC

7. Codificación (implementación). La solución expresada en pseudocódigo se traduce a un programa que el


computador pueda procesar utilizando un lenguaje de programación de alto nivel.
8. Compilación, Ejecución y Verificación. El programa se ejecuta (corre) y se verifica para eliminar errores de
programación o de lógica.
9. Documentación. Se agrega al código del programa línea de texto que ayudan al programador y a las
personas que a futuro harán mantenimiento al software a entender su estructura y comportamiento. La
documentación también incluye escribir informes en donde se describe cómo se realizaron las diferentes
fases del ciclo de vida del software (en especial los procesos de análisis, diseño, codificación y prueba), se
agregan manuales de usuario y de referencia, así como normas para el mantenimiento.
10. Depuración y Mantenimiento. El programa se actualiza y modifica en la medida en que sea necesario de
manera que cumpla con las necesidades de los usuarios las cuales también cambian en el tiempo.

Datos
Es una representación de hechos, conceptos o instrucciones, organizados de manera que se puedan procesar,
interpretar o comunicar por medios humanos o automáticas. Los datos, son por ejemplo, representaciones de
las características de una persona, objeto, concepto o hecho.
Los datos se pueden introducir en el computador como entrada y se procesan para producir resultados e
información de salida.

Tipo de Dato
• Define el conjunto de valores que un elemento o un objeto (una variable, constante, expresión o función) de
dicho tipo puede asumir y las operaciones asociadas a tales valores.
• Es un conjunto de entidades o de objetos y las operaciones definidas sobre ellos.
Posible Clasificación de los Tipos de Datos
Tipos de datos primitivos o elementales: tipos básicos incluidos en cada lenguaje de programación.
En el lenguaje de programación Java, también son llamados tipos integrados
Tipos de datos estructurados: tipos basados o construidos a partir de tipos de datos primitivos (por ejemplo,
arreglo, registro, archivo, conjunto).
Tipos de datos abstractos (TDA): tipos de datos definidos por el usuario y las operaciones abstractas aplicadas
sobre ellos. Los TDA apoyan el concepto de ocultamiento de la información. Esconden los detalles de la
representación y permiten el acceso a los objetos sólo a través de sus operaciones, son ejemplos las
representaciones de los TDA Lista, Cola, Pila, Árbol y la representación que hace el Enfoque Orientado a Objeto
mediante atributos y métodos.

Tipos de datos en Python


int: una variable de tipo integer o entero sólo puede guardar números enteros, es decir, sin parte
decimal.

Curso Programación con Python 9


Centro de Enseñanza Asistida por Computador - CENEAC

float: una variable de tipo float sólo puede almacenar números decimales. Tomar en cuenta que en
Python, los números decimales se escriben con punto en lugar de coma.
chr: una variable de tipo character sólo puede guardar un carácter, un solo símbolo tipográfico que
puede ser una letra, un número, un espacio, una símbolo, entre otros.
str: una variable de tipo string o cadena sólo puede almacenar una cadena de caracteres, pueden
ser letras y números, puntos, comas, espacios, etc.
bool: una variable booleana sólo puede guardar uno de dos valores: True (verdadero) o False
(falso). En Python una variable con valor cero (0) es falso y una variable con cualquier valor distinto
de cero es verdadero.

Variable
Nombre asignado a una entidad que puede adquirir un valor cualquiera dentro de un conjunto de valores. Es
decir, una entidad cuyo valor puede cambiar a lo largo del programa. En un programa de computador se puede
asumir que una variable es una posición de memoria donde los valores asignados pueden ser reemplazados o
cambiados por otros valores durante la ejecución del programa.

Constante
Nombre asignado a una entidad al cual se asigna un valor que mantiene sin cambios durante el programa.

Operaciones de los tipos de datos elementales


Operación: Acción por medio de la cual se obtiene un resultado de un operando. Ejemplos: sumar, dividir, unir,
restar.
Operando: número, texto, valor lógico, variable o constante sobre la cual es ejecutada una operación.
Operador: símbolo que indica la operación que se ha de efectuar con el operando, por ejemplo, + / - * > ==
≠ ≥ =

Palabras reservadas (keywords)


Las palabras reservadas forman el núcleo del lenguaje Python, por lo tanto no pueden utilizarse para nombrar
otros elementos (variables, funciones, etc.), aunque pueden aparecer en cadenas de texto. Son las siguientes:
False class finally is return
None continue for lambda try
True def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise

Operadores

Curso Programación con Python 10


Centro de Enseñanza Asistida por Computador - CENEAC

Los operadores son los caracteres que definen operaciones matemáticas (lógicas y aritméticas), en Python son
los siguientes:
+ - * ** / // % @
<< >> & | ^ ~
< > <= >= == !=

Delimitadores
Los delimitadores son los caracteres que permiten delimitar, separar o representar expresiones, en Python son
los siguientes:
' " # \
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=

Funciones integradas (built-in functions)


Una función es un bloque de instrucciones agrupadas, que permiten reutilizar partes de un programa. Python
incluye las siguientes funciones de forma predeterminad, es decir, son funciones ya están disponibles en el
lenguaje:
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() import()
complex() hasattr() max() round()
delattr() hash() memoryview() set()

Estas palabras pueden utilizarse para nombrar variables, pero entonces las funciones ya no están disponibles
en el programa. Si se eliminan las variables, las funciones vuelven a estar disponibles.

Precedencia

Curso Programación con Python 11


Centro de Enseñanza Asistida por Computador - CENEAC

Prioridad definida entre los operadores. Indica en qué orden debe aplicarse diferentes operaciones sobre un
conjunto de valores. Permiten aplicar los operadores en el orden correcto.
Algunos comentarios sobre tipos de datos y precedencia:
• Los lenguajes C, C++ y Java requieren que todas las variables tengan un tipo asociado antes de que puedan
ser usadas en un programa. Los lenguajes con esta propiedad son llamados lenguajes de tipos estrictos.
• En el lenguaje de programación Python no es requisito declarar el tipo de dato de una variable, se asocia al
momento de asignarle el primer valor.
• A diferencia de C y C++, los tipos primitivos de Java son portátiles entre todas las plataformas que reconocen
a Java. Esto permite a los programadores Java escribir los programas una sola vez sin saber ni preocuparse
en cuál plataforma de computadora se ejecutará el programa. Por el contrario, los programadores en C y C++
a menudo tenían que escribir varias versiones de los programas para trabajar con las diversas plataformas de
computadoras por que no se garantizaba que los tipos de datos primitivos fueran idéntico o se
representaran igual en todas las computadoras.
• Como los diseñadores de Java querían que fuera un lenguaje portátil o transportable, decidieron usar
estándares internacionales reconocidos para los formatos de caracteres (char, estándar Unicode) y para los
números de punto flotante (flot, IEEE 754)
• Los operadores de expresiones contenidas dentro de pares de paréntesis () se evalúan primero. Así el
programador puede usar paréntesis para obligar a una evaluación en el orden que desee.
• Si una expresión contiene varias operaciones de multiplicación, división o residuo, o varias operaciones de
suma o resta, los operadores se aplican de izquierda a derecha (asociatividad). Entre ellos tienen el mismo
nivel de precedencia.

Precedencia de operadores en Python:

• La siguiente lista define el orden de precedencia de los operadores para Python, desde la más alta prioridad
a la más baja:
Operador Descripción
() Los paréntesis se usan para agrupar expresiones y anulan la precedencia por
defecto, a fin de que se ejecute antes una operación de menor precedencia, por
ejemplo una suma, antes que una operación de mayor precedencia, por ejemplo
una multiplicación.
** Exponenciación o potencia
~ + - Operadores unarios interactúan con un sólo valor o variable
* / % // Multiplicación, división, módulo o resto de la división y división entera
+ - Adición y sustracción
<< >> Desplazamiento a la izquierda y a la derecha en modo bit a bit
& And (y) en modo bit a bit
^ Xor (o exclusivo) en modo bit a bit
| Or (o) en modo bit a bit
< > <= >= == != Operadores de comparación, igualdad y desigualdad

Curso Programación con Python 12


Centro de Enseñanza Asistida por Computador - CENEAC

is, is not es, no es, operadores de identidad o de evaluación de identificación


in, not in está en, no está en, operadores de membresía
not No lógico
and Y lógico
or O lógico

Expresiones
Son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones o
acciones. Cada expresión toma un valor que se determina evaluando los valores de sus variables, constantes y
operadores.
Una expresión consta de operandos y operadores.
Las expresiones se pueden clasificar en Aritméticas, Lógicas o Carácter. Así tenemos:
• Una expresión aritmética, arroja resultados de tipo numérico (entero o real)
• Una expresión relacional o una expresión lógica, arrojan resultados de tipo lógico (booleanos)
• Una expresión carácter, arroja resultados de tipo carácter (caracteres simples o string)

Secuenciamiento
Consiste en presentar un conjunto de instrucciones en un orden. Las instrucciones se realizan en el mismo
orden en que son escritas. El símbolo ; se utiliza para separar una instrucción de otra.
Notaciones algorítmicas (sintaxis):
Notación 1:
<instrucción 1>;
< instrucción 2>;

< instrucción n>;
Notación 2:
< instrucción 1>; < instrucción 2>; … < instrucción n>;
Comportamiento: el secuenciamiento representa las acciones del algoritmo y el orden en que se realizarán.

Secuenciamiento de instrucciones en Python:


Es equivalente al resto de los lenguajes pero NO se utiliza el punto y coma (;) como operador de
secuenciamiento para separar instrucciones, sino que se colocan una en cada línea del programa.

Operación de Asignación

Curso Programación con Python 13


Centro de Enseñanza Asistida por Computador - CENEAC

Es el modo de darle un valor a una variable, el cual puede ser una constante, otra variable o el resultado de una
expresión. En pseudocódigo la operación de asignación se representa mediante el símbolo u operador = para la
asignación.
En el contexto de un lenguaje de programación, a la operación de asignación se le llama instrucción o sentencia
de asignación y modifica el estado de la variable.
La notación algorítmica (sintaxis) que utilizaremos para la asignación es:
<nombre de variable> = < constante o variable o expresión >

Operación de Lectura o Entrada Simple ( Leer – read )


La operación de lectura o de entrada de datos permite leer valores y asignarlos a constantes o a variables.
Almacena en una variable un valor extraído desde un dispositivo externo, del cual hacemos abstracción aunque
generalmente es el teclado cuando se está programando. En pseudocódigo usamos la acción Leer para obtener
los datos que nos suministra el usuario del algoritmo, datos necesarios para el procesamiento o cálculo
posterior.
Los datos de entrada se introducen en el computador mediante dispositivos de entrada (teclado, pantalla,
unidades de disco, escáneres, entre otros). Los datos de salida pueden aparecer en un dispositivo de salida
(pantalla, impresora, cornetas, entre otros).
Comportamiento: La acción elemental Leer cambia el valor en la variable o variables que se está usando en la
instrucción de lectura. Luego de leer un valor, el valor de la variable cambia en forma similar a si se hiciera una
asignación.
Notación algorítmica (sintaxis): Leer(<Nombre de variable>);

Notación en Python:
input() nombre = input()

Operación de Escritura o Salida Simple ( Escribir – write )


Permite mostrar el valor de una variable, constante o expresión. Cuando estamos programando la acción
Escribir trasmite un valor a un dispositivo externo, por ejemplo lo muestra por la pantalla del computador. En
pseudocódigo la acción Escribir nos permite mostrar mensajes o mostrar los resultados al usuario del
algoritmo.
Comportamiento: muestra mensajes y resultados almacenados en variables, constantes o expresiones.
Notación algorítmica (sintaxis): Escribir(< Nombre Variable, Constante o Expresión>);

Notación en Python:
print("¿Cúal es su nombre por favor?")
print("resultado es: ", i)

Conversión de Tipos

Curso Programación con Python 14


Centro de Enseñanza Asistida por Computador - CENEAC

La conversión de tipos es el proceso de cambiar un valor de un tipo de dato a otro. Por ejemplo, el string o
cadena "1579874" se puede convertir a un número entero, o se puede cambiar un número real a un String o a
un Entero.
Las conversiones de tipo pueden ser de ampliación o de restricción:
Las conversiones de ampliación transforman un valor de un tipo de dato a otro más grande, por ejemplo
transforman un valor entero (conjunto más pequeño) a un número real (que es un conjunto más grande). Estas
conversiones no producen desbordamiento o pérdida de datos.
Las conversiones de restricción permiten transformar un valor de un conjunto de datos más grande a uno más
pequeño, por ejemplo, transformar un número real a un entero o transformar una cadena a carácter. Si
transformamos el valor X = 23,14587 a entero obtendríamos como resultado 23, lo cual significa pérdida de
información ya que se pierde la precisión de los decimales; transformar el string m = ”casa” a carácter
significaría quedarnos solo con el carácter ‘c’ del inicio de la cadena. Estos tipos de transformación son poco
convenientes ya que pueden implicar pérdida de información y solo deben ser usados cuando sea
estrictamente necesario.
Las conversiones por ampliación o por restricción pueden a su vez ser explícitas o implícitas.
Las conversiones con pérdida de información tienen lugar cuando el tipo de datos original no tiene un análogo
en el tipo de destino de la conversión. Por ejemplo, la cadena "Pedro" no se puede convertir en un número. En
estos casos, algunos lenguajes de programación devuelven un valor predeterminado cuando se usa la función
de conversión de tipo, por ejemplo el valor NaN o el número cero, indicando con estos valores que la
conversión de tipos falló.
Algunos tipos de conversiones, como de una cadena a un número, tardan bastante tiempo. Cuantas menos
conversiones utilice el programa, más eficaz será.
Conversión implícita
La mayoría de las conversiones, como la asignación de un valor a una variable, se producen automáticamente.
El tipo de datos de la variable determina el tipo de datos de destino de la conversión de expresión. En otros
casos, la conversión implícita viene dada tanto por los tipos de datos como por los operadores utilizados.
Conversión explícita
Para convertir explícitamente una expresión a un tipo de datos concreto, se utilizan funciones que se asumen
predefinidas y disponibles en el pseudocódigo, colocando entre paréntesis el dato, variable o expresión que se
va a convertir. Las conversiones explícitas requieren más escritura que las implícitas, pero proporcionan más
seguridad con respecto a los resultados. Además, las conversiones explícitas pueden controlar conversiones
con pérdida de información.
El comportamiento de la conversión explícita depende del tipo de datos originales y del tipo de datos de
destino.

Conversión de tipos en Python


En este lenguaje no existe la necesidad de declarar las variables con un tipo de dato en específico ya que
Python trabaja de un modo "genérico" y procesa las variables con el tipo de dato con el que se encuentren. Sin
embargo, la conversión de tipo de datos se utiliza frecuentemente con la entrada de datos, es decir, cuando
utilizamos la función 'raw_input()'. Recordemos que 'raw_input()' asigna a cierta variable una cadena que el

Curso Programación con Python 15


Centro de Enseñanza Asistida por Computador - CENEAC

usuario ingresó, así, si el usuario ingresa 123, Python lo interpreta como una cadena de caracteres que tienen
los símbolos '1', '2' y '3' y en realidad habría ingresado la cadena "123".
Python cuenta con la conversión de tipo de datos (comúnmente llamada cast o casting) para especificar
explícitamente el tipo de dato con el que deseamos trabajar.
Para hacer castings en la entrada de datos, debemos colocar el tipo de dato que deseemos manejar (int, str,
float, etc.) y entre paréntesis la variable que va a ser convertida.

Conversiones de datos en Python:


int
Python convierte cualquier número sin coma en un entero en forma automática
int(12.35) = 12
De esta forma convertimos un número decimal en un entero, utilizando el punto en lugar de la coma para
escribir un número decimal.
int("325 . ") = 325
No se pueden convertir algunas cadenas, de caracteres o textos a un entero, por ende int("hola") arroja un
error, mientras que int("123") = 123

float
Python convierte cualquier número con punto en un float o decimal en forma automática.
Python puede convertir algunas cadenas en un dato de tipo float, por ejemplo:
float("325") = 325.0
siempre y cuando la cadena no contenga solo caracteres alfabéticos o mezclas alfanuméricas.

chr
En informática, un caracter o character, representa al código correspondiente a una de las teclas en el teclado
de la computadora, por eso, nos imprime 'Z' ya que el caracter 90 del teclado es la letra Z.
print chr(128) = �
ya que el carácter 128 corresponde en el teclado al símbolo �
De modo que, un caracter es cualquier signo tipográfico, puede ser una letra, un número, un signo de
puntuación, un espacio, etc.
Para hacer lo contrario, utilizamos la función ord(), que a partir de un carácter, nos devuelve su código en
carácter o chr.
chr(90) = 'Z'
ord("Z") = 90
str
str(150) = '150'

Curso Programación con Python 16


Centro de Enseñanza Asistida por Computador - CENEAC

str(150.25) = '150.25'
str(1500) + " Km" = '1500 Km'
Un string es una cadena de caracteres, pudiendo incluir expresiones alfanuméricas. Python cuenta con una
clase especial para manejar cadenas de caracteres, como muchos otros lenguajes.

bool
a = bool(1)
print a
True
En Python, sólo 0 es False, todo lo demás es True. Cual variable que no esté vacía es True.
a = bool("x")
print a
True

a = "hola que tal?"


b = bool(a)
print a
hola que tal?
print b
True

En Python, cualquier variable vacía es False.


a = ""
b = bool(a)
print a
print b
False

Curso Programación con Python 17


Centro de Enseñanza Asistida por Computador - CENEAC

3. ESTRUCTURAS DE CONTROL CONDICIONAL

3.1 CONDICIONAL SIMPLE: Si – Entonces – Fsi ( If – Then – EndIf )


El condicional simple Si – Entonces – FSi ejecuta un conjunto de instrucciones si cumple la condición evaluada
en el Si.
Sintaxis y Comportamiento:
En la instrucción Si <condición> Entonces <instrucciones S1>; FSi; se evalúa la <condición> y:
• Si la condición es verdadera, ejecutan o realizan las instrucciones del bloque S1
• Si la condición es falsa, no se realiza ninguna instrucción del Si
Recomendación: Cuando escribas las instrucciones en los algoritmos utiliza indentación o sangría para mostrar
los niveles de anidación en las instrucciones. En este caso agregar un sangrado a la derecha para el bloque de
acciones a fin de diferenciarlo de las instrucciones Si - Entonces - FSi
Ejemplo 1: Escribir un algoritmo que aumenta Bs. 150 al sueldo de las personas que ganan hasta Bs. 605
Algoritmo Principal
// Procedimiento para calcular el monto de un aumento de sueldo
Real S;
Escribir(“Suministre el del sueldo de la persona”); // se pide el valor del sueldo al usuario
Leer(S); // lee en S el sueldo actual del empleado
Si S ≥ 0 y S ≤ 605 Entonces // el condicional compara el sueldo del
empleado
S = S + 150; // aumenta el sueldo del empleado
Escribir( “El nuevo sueldo es: ” + S ); // mensaje con el resultado
Fsi;
FinAlgoritmo Principal; // Fin de la secuencia de instrucciones

3.2 CONDICIONAL COMPUESTO: Si – Entonces – Sino – Fsi ( If – Then – Else – EndIf )


Permite elegir entre dos opciones o alternativas posibles, en función de que se cumpla o no la condición
expresada en el Si.
Sintaxis y Comportamiento:
En la instrucción Si <condición> Entonces <instrucciones S1>; Sino <instrucciones S2>; FSi; se evalúa la
<condición> y:
• Si la condición es verdadera, ejecutan o realizan las instrucciones del bloque S1
• Si la condición es falsa, se ejecutan o realizan las instrucciones del bloque S2
Recomendación: utilizar indentación o sangría en los algoritmos y códigos.

Ejemplo 2: Escribe una secuencia de instrucciones que te permitan aumentar Bs. 150 al sueldo de las personas
que ganan Bs. 605 o menos, y aumentar en Bs. 100 a las personas que ganan más de Bs. 605

Curso Programación con Python 18


Centro de Enseñanza Asistida por Computador - CENEAC

Algoritmo Principal
// Procedimiento para calcular un aumento de acuerdo al sueldo del empleado
Real S;
Escribir(“Suministre el monto del sueldo de la persona”);
Leer(S);
Si S ≤ 605 Entonces S = S + 150;
Sino
S = S + 100;
FSi;
Escribir(“El nuevo sueldo del empleado es: ” + S); // se escribe mensaje y el nuevo
sueldo
FinAlgoritmo Principal; // Fin de la secuencia de instrucciones

3.3 CONDICIONAL ANIDADO


Permite incluir dentro del cuerpo de la instrucción Si a otras instrucciones Si simples o compuestas. Se utiliza
para elegir entre varias opciones o alternativas en función del cumplimiento o no de las diferentes condiciones
que se van verificando en cada instrucción Si.
Comportamiento: en cada condicional se cumple el mismo comportamiento que se ha indicado para el
condicional simple o anidado.
Recomendación: utilizar indentación o sangría en los algoritmos y códigos. En este caso agregar sangría para
diferenciar el nivel de las instrucciones de cada bloque SI.
Ejemplo 3: Crea un algoritmo que calcule el monto de un aumento a partir del sueldo del empleado y su
antigüedad (cantidad de años trabajados en la empresa). Para las personas que ganan hasta Bs. 500, se les
aumenta 15% si tienen menos de 5 años de antigüedad en la empresa y 20% si tienen 5 o más años. Para los
que ganan más de Bs. 500 y hasta 2.500 se les aumenta 5% por cada 5 años de antigüedad.
Algoritmo Principal
// Procedimiento para aumentar el sueldo según el monto del sueldo actual y los años de
servicio
Real S, Aumento; Entero Años, Aux;
Escribir(“Suministre el sueldo y los años de antigüedad”); Leer(S, Años); //solicitan y leen
datos
Si S < 0 o Años < 0 Entonces // los valores de entrada son inválidos
Escribir (“Verifique el sueldo o los años de servicio, ambos deben ser valores
positivos”);
Sino
Si S ≤ 500 Entonces // contempla sueldo menores o iguales a 500
// este SI anidado contempla la antigüedad para los que ganan hasta Bs. 500
Si Años < 5 Entonces // trabajadores con menos de 5 años
Aumento = S * 0,15; // se calcula el monto del aumento, usando 15%
Sino
Aumento = S * 0,20; // se calcula el monto del aumento, usando 20%
Fsi;
Sino // contempla los que ganan más de 500
Si S > 500 y S≤ 2.500 Entonces // ganan más de 500 y hasta 2.500

Curso Programación con Python 19


Centro de Enseñanza Asistida por Computador - CENEAC

Aux = Años div 5; // calcula cuantas veces se le aplicará el aumento


del 5%
Aumento = S * (Aux * 5) / 100; // se calcula el monto del
aumento
Sino
Aumento = 0; // no se contempla aumento para los que ganan más de
2.500 FSi;
FSi;
FSi; // cerrando si de la validación

Si Aumento == 0 Entonces
Escribir(“Sueldo actual: ” + S + “ gana más de 2.500, no le aplica aumento”);
Sino
Escribir(“Sueldo anterior: ” + S + “ y tiene una antigüedad de: ” + Años );
Escribir(“Recibe aumento de: ” + Aumento + “ y su nuevo sueldo es: ” + (Sueldo +
Aumento) );
FSi;
FinAlgoritmo Principal; // Fin de la secuencia de instrucciones

Ejemplo del uso y notación en Python del Condicional Si:


x = int(input("Ingresa un entero, por favor: "))
Ingresa un entero, por favor: 42
if x < 0:
x = 0
print('El número era Negativo y fue cambiado a 0)
elif x == 0:
print('El número es 0)
elif x == 0:
print('El número es 1)
else:
print('El número positivo y mayor que 1')

Puede haber cero o más bloques elif, y el bloque else es opcional. La palabra reservada 'elif' es una abreviación
de 'else if', y es útil para evitar un excesivo uso de sangrías. Una secuencia if ... elif ... elif ... sustituye las
sentencias de selección o switch … case encontradas en otros lenguajes.
Observe que el if no utiliza llaves {} en Python, el nivel de anidamiento de las instrucciones se indican por la
sangría que se agrega a la izquierda. También observe que luego de las sentencias if, elif y else se coloca el
símbolo :

3.4 SELECCIÓN MÚLTIPLE: Selección – Sino – FSelección ( Select – End Select )


La selección múltiple permite evaluar una condición o expresión que puede tomar muchos valores distintos. Se
ejecutaran las instrucciones correspondientes al caso que se cumple. La principal ventaja de la estructura
Selección es que permite crear algoritmos que sean legibles y evitar la confusión creada por el anidamiento de
muchos bloques SI.

Curso Programación con Python 20


Centro de Enseñanza Asistida por Computador - CENEAC

Comportamiento: se evalúa cada condición de la selección y se realiza el bloque de instrucciones


correspondientes a la condición que se cumple.
Ejemplo 4: Una librería ofrece descuentos en libros con fecha de publicación del año 2009 o anterior. Para
aquellos libros entre 2009 y 2005 se da un descuento del 10%, para los que están entre 2004 y 2000 descuento
del 22%, para los que están entre 1999 y 1994 descuento del 35,5%, para los que están entre 1993 y 1985
descuento del 50%, para los anteriores a 1985 se da 70% de descuento. Crea una secuencia de instrucciones
que a partir del año de publicación y el precio del libro permita saber el monto del descuento y el precio final
de venta. Todos los libros pagan un IVA de 1%. Considera también que los precios no pueden ser negativos y
que la librería no tiene libros anteriores a 1975 (estos casos serían considerados errores).

Algoritmo Principal
// Procedimiento para calcular el descuento aplicado a un libro según el año de publicación
String Nombre; // guardará el nombre del libro
Real Precio, PorcentajeDesc, MontoDesc, MontoIVA, PrecioFinal; // variables para el precio y
Entero AñoPub; // año de publicación del libro;
Escribir(“Suministre el nombre del libro, su precio y año de publicación”);
Leer(Nombre, Precio, AñoPub); // se solicitaron y ahora leyeron los datos de entrada

Si Nombre == “” o Precio < 0 o AñoPub < 1975 o AñoPub > 2009 Entonces // validación
de datos
Escribir(“Error en datos de entrada, el nombre, precio o año de publicación son
inválidos”);
Sino // se determina el porcentaje de descuento para los libros publicados entre 1975 y el
2009
Selección
AñoPub > 2009: PorcentajeDesc = 0%;
AñoPub ≥ 2009 y AñoPub ≤ 2005: PorcentajeDesc = 10%;
AñoPub ≥ 2004 y AñoPub ≤ 2000: PorcentajeDesc = 22%;
AñoPub ≥ 1999 y AñoPub ≤ 1994: PorcentajeDesc = 35,5%;
AñoPub ≥ 1993 y AñoPub ≤ 1985: PorcentajeDesc = 50%;
AñoPub ≥ 1975 y AñoPub < 1985: PorcentajeDesc = 70%;
FSelección;

// se calculan el descuento, el impuesto y el precio final


MontoDesc = Precio * PorcentajeDesc; MontoIVA = ( Precio - MontoDesc ) * 1%;
PrecioFinal = ( Precio - MontoDesc ) + MontoIVA;

// se muestran los resultados o datos de salida del algoritmo


Escribir(“Libro vendido: ” + Nombre +
“El precio inicial del libro es Bs.: ” + Precio + “ y es del año: ” + AñoPub +
“Porcentaje de descuento: ” + PorcentajeDesc +
“Monto descuento Bs.: ” + MontoDesc +
“Monto del IVA Bs.: ” + MontoIVA +
“Precio final del libro Bs.: ” + PrecioFinal );
FSi;
FinAlgoritmo Principal;

Curso Programación con Python 21


Centro de Enseñanza Asistida por Computador - CENEAC

¿Python incluye una estructura equivalente a la Selección o el Switch?


Este lenguaje Python no incluye las sentencias switch … case, como tampoco incluye el ciclo do …
while, la cual si está incluida en lenguajes basados en C (C++, C#, Java, JavaScript, entre otros) y
lenguajes como Pascal, Ada, Perl, PHP, Ruby que incluyen instrucciones equivalentes.

4. ESTRUCTURAS DE CONTROL ITERATIVO O CICLOS

4.1 Bucles o Ciclos


Un bucle, lazo, ciclo o loop (en inglés) es un segmento de algoritmo o programa (una secuencia de
instrucciones) que se repiten un determinado número de veces mientras se cumple una determinada
condición, en otras palabras, un bucle o ciclo es un conjunto de instrucciones que se repiten mientras una
condición es verdadera o existe.
A cada repetición del conjunto de acciones se denomina iteración.
Para que un bucle no se repita indefinidamente debe tener una condición de parada o de fin. Esta condición de
parada o de fin se verifica cada vez que se hace una iteración. El ciclo o loop llega a su fin cuando la condición
de parada se hace verdadera.
La condición de parada puede estar al principio de la estructura repetitiva o al final.
Al igual que las estructuras de selección simple o compuesta (los bloques si – entonces – sino – fsi), en un
algoritmo pueden utilizarse varios ciclos. Estos ciclos pueden ser independientes (una a continuación de otro) o
anidados (ciclos dentro de ciclos).
Para representar los bucles o lazos se utilizan en pseudo-código las estructuras de control Para, Repetir y
Mientras. En Python solo se utilizan las sentencias for y while.

Características de los ciclos:


Los ciclos o procesos repetitivos de instrucciones son procedimientos fundamentales en el uso de las
computadoras y por lo tanto en muchos algoritmos y programas. Vamos a utilizar ciclos cuando:
• Necesitemos REPETIR INSTRUCCIONES un determinado número de veces, mientras se cumpla una condición,
mientras un hecho sea verdadero o hasta cuando se alcance un determinado valor o condición.
• Cuando necesitemos CONTAR un determinado número de elementos o de acciones, por ejemplo contar las
sílabas de un texto, los elementos de una secuencia que verifican una determinada condición o contar el
número de personas que cumplen ciertas características. En este caso se incluirán contadores dentro del
bucle.
Los contadores son variables (generalmente de tipo Entero) que tienen un valor inicial y que se incrementan
o decrementan en un valor constante cada vez que ocurre una iteración. Cuando los contadores se
decrementan se habla de descontar, en lugar de contar.
• También usaremos ciclos cuando necesitemos ACUMULAR o TOTALIZAR terminados valores cada vez que se
realiza una iteración. Los acumuladores también son variables (generalmente de tipo Entero, Real o String),
que almacenan valores variables resultantes de las operaciones que se realizan en cada ciclo.

Curso Programación con Python 22


Centro de Enseñanza Asistida por Computador - CENEAC

Por ejemplo, podemos usar para ir sumando los precios de varios vehículos y luego calcular el precio
promedio general (con una variable acumulador de tipo real), para calcular la potencia o el factorial de un
número a través de multiplicaciones sucesivas (un acumulador de tipo entero o real) o para ir agregando a
una cadena de caracteres, letras o sílabas que construirán un mensaje (una variable acumulador del tipo
string)

4.2 Estructura Iterativa Para ... FinPara ( For ... Next ... End For )
Es una estructura iterativa que es controlada por una variable (llamada también variable índice), la cual se
incrementa o decrementa hasta llegar a un valor límite o valor final que representa la condición de parada.
La estructura Para comienzan con un valor inicial de la variable índice, las acciones especificadas para el ciclo se
ejecutan un número determinado de veces, a menos, que el valor inicial de la variable índice sea mayor que el
valor límite que se quiere alcanzar.
SE RECOMIENDA USARLO: la estructura Para es recomendada cuando se conoce el número de veces que se
deben ejecutar las instrucciones del ciclo, es decir, en los casos en que el número de iteraciones es fijo y
conocido.
El incremento o decremento de la variable_índice suele ser de 1 en 1, salvo cuando se indica lo contrario. La
variable índice suele ser de tipo Entero y se utilizan comúnmente nombres como i, j o k (no importa si en
mayúsculas o minúsculas)
SINTAXIS del Para:
Para variable_índice = valor1 hasta valor2 en inc/dec hacer
<instrucción 1>;

< instrucción n>;
FinPara;
En este ciclo la variable_índice se inicializa con valor1. El ciclo continuará hasta que la variable_índice
sobrepase a valor2; la variable inc es la unidad en que se incrementa o decrementa la variable_índice
(generalmente el incremente es en 1).

Notación del for en Python


La sentencia for en Python difiere un poco de lo que uno puede estar acostumbrado en lenguajes
como C o Pascal. En lugar de siempre iterar sobre una progresión aritmética de números (como en
Pascal) o darle al usuario la posibilidad de definir tanto el paso de la iteración como la condición de fin
(como en C), la sentencia for de Python itera sobre los ítems de cualquier secuencia (una lista o una
cadena de texto), en el orden que aparecen en la secuencia. Por ejemplo:
>>> for i in range(5):
print(i)
# resultados
0
1
2
3

Curso Programación con Python 23


Centro de Enseñanza Asistida por Computador - CENEAC

>>> # Midiendo cadenas de texto


palabras = ['gato', 'ventana', silla]
>>> for p in palabras:
print(p, len(p))
# resultados
gato 4
ventana 7
silla 5

4.3 Estructura iterativa Mientras – hacer – FinMientas ( While ... Do ... EndWhile )
Es una estructura iterativa que permite verificar la condición de entrada al ciclo antes del cuerpo de
instrucciones a repetir.
Como la evaluación de la condición de entrada se realiza al inicio del bloque Mientras, puede ocurrir que las
instrucciones del ciclo no se realicen ni siquiera 1 vez, a diferencia del Repetir, donde el bloque de
instrucciones se realiza al menos 1 vez porque la condición de parada se verifica al final. Las instrucciones del
Mientras se pueden realizar 0 o más veces antes de que se cumpla la condición de terminar el ciclo.
El conjunto de instrucciones dentro del Mientras – FinMientras se ejecuta cuando la condición de entrada del
principio se cumple (es verdadera). Dicho de otro modo, el ciclo de instrucciones dentro del Mientras se va a
detener cuando la condición se haga falsa.
SE RECOMIENDA USARLO: la estructura Mientras es recomendada cuando tienes que verificar la condición de
entrada al inicio y si se cumple, entonces, entrar al ciclo y realizar sus instrucciones.
SINTAXIS del Mientras:
Mientras <expresión_condición_de_entrada> hacer
<instrucción 1>;
....
< instrucción n>;
<actualización variable(s) usada(s) en la condición de entrada>;
FinMientras;

Ejemplo 5: Se desea conocer cuántas veces se repiten en un texto que el usuario suministra letra por letra y
que termina con ‘ * ’
Algoritmo Principal
// instrucciones para contar las vocales en una
// secuencia de letras
Entero cantA, cantE, cantI, cantO, cantU;
Caracter letra; // se inicializan las variables contador

Curso Programación con Python 24


Centro de Enseñanza Asistida por Computador - CENEAC

cantA=0; cantE=0; cantI=0; cantO=0; cantU=0;


Escribir (“suministre la primera letra”); Leer(letra);
Mientras letra != ‘*’ hacer
Selección
letra =’a’: cantA = cantA + 1;
letra=’e’: cantE = cantE + 1;
letra=’i’: cantI = cantI + 1;
letra=’o’: cantO = cantO + 1;
letra=’u’: cantU = cantU + 1;
fSelección;

// actualizo la variable de la condición de parada


Escribir (“suministre próxima letra”); Leer(letra);
FMientras;

Escribir(“La cantidad de vocales A es: ” + cantA);


Escribir(“La cantidad de vocales E es: ” + cantE);
Escribir(“La cantidad de vocales I es: ” + cantI);
Escribir(“La cantidad de vocales O es: ” + cantO);
Escribir(“La cantidad de vocales U es: ” + cantU);
FinAlgoritmo Principal;

Notación del while en Python


El bucle while se ejecuta mientras la condición sea verdadera. En Python, como en C, cualquier
entero distinto de cero es verdadero; cero es falso. La condición también puede ser una cadena de
texto o una lista, de hecho cualquier secuencia; cualquier cosa con longitud distinta de cero es
verdadero, las secuencias vacías son falsas. Los operadores estándar de comparación se escriben
igual que en C: < (menor qué), > (mayor qué), == (igual a), <= (menor o igual qué), >= (mayor o igual
qué) y != (distinto a).
El cuerpo dentro de los bucles for y while están sangrados: la sangría es la forma que usa Python
para agrupar declaraciones.

Ejemplo: muestra los resultados de sumar los valores de a y b y los asigna a b, mientras b < 1000
>>> a, b = 0, 1
>>> while b < 1000:
print(b, end=',')
a, b = b, a+b
...
# resultados
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

Curso Programación con Python 25


Centro de Enseñanza Asistida por Computador - CENEAC

Ejemplo: solicita letras hasta que se lee una ‘a’ o se llega a las 30 repeticiones

cont = 0
letraA = "aAáÁ"

print("Suministre la primera letra ")


letra = input()

while letra not in letraA and cont < 30:


cont += 1 # se incrementa la variable que cuenta las iteraciones
print("\n\nEstamos en la iteración " , cont)

print("Suministre la siguiente letra ")


letra = input()

if letra in letraA:
print("\n\nSe encontró la letra A en la iteración " , cont)
elif cont == 30:
print("se llegó a las 30 iteraciones sin leer una la letra A")

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

5. PROCEDIMIENTOS
La definición de procedimientos permite asociar un nombre a un bloque de instrucciones. Luego podemos usar
ese nombre para indicar en algún punto de un algoritmo que vamos a utilizar ese bloque de instrucciones, pero
sin tener la necesidad de repetirlas, sólo invocando al procedimiento por su nombre.
Los procedimientos pueden ser clasificados en acciones o funciones. Las acciones se caracterizan por no
retornar valores al algoritmo que las llama, mientras que las funciones retornan un valor. Sin embargo, aunque
las acciones no retornan valores, si pueden informar al algoritmo que las llamó (a veces llamado algoritmo
principal) de cambios realizados por sus instrucciones en algunos valores a través de una herramienta que se
llama pase de parámetros. Los parámetros permiten utilizar la misma secuencia de instrucciones con diferentes
datos de entrada. Utilizar parámetros es opcional.
Cuando entre las instrucciones de un algoritmo vemos el nombre de un procedimiento (acción o función),
decimos que estamos llamando o invocando al procedimiento.
Los procedimientos facilitan la programación modular, es decir, tener bloques de instrucciones que escribimos
una vez pero que podemos llamar y utilizar muchas veces en varios algoritmos. Una vez terminada la ejecución

Curso Programación con Python 26


Centro de Enseñanza Asistida por Computador - CENEAC

de un procedimiento (acción o función), se retorna el control al punto de algoritmo donde se hizo la llamada,
para continuar sus instrucciones.
En el próximo tema, Programación Orientada a Objetos, veremos que los procedimientos son denominados
Métodos.

5.1 Acciones
Conjunto de instrucciones con un nombre que pueden ser llamadas a ejecución cuando sea necesario. No
retornan valores.
Sintaxis de la definición formal de la Acción
Acción <Nombre> [ (lista parámetros formales) ]
// comentario sobre lo que la acción hace
< definición de variables locales >
< instrucción 1 de la acción >
...
< instrucción n de la acción >
FAcción <Nombre>;

Donde:
• Acción … FAcción delimitan el inicio y fin de la acción.
• <Nombre> es el identificar de la acción.
• [ <lista de parámetros formales> ] son objetos o variables que utilizan las instrucciones dentro de la acción,
pero que no tienen valor hasta que la acción no es llamada y utilizada. Esta lista es opcional por eso aparece
entre corchetes.
• <definición de las variables locales> es el conjunto de valores que se usan dentro de la acción.
• <instrucciones> a veces también llamadas simplemente acciones, es la secuencia de instrucciones a ser
ejecutadas por la acción.

Ejemplo 6: Acción sin pase de parámetros


Acción CalcularPrecio
// a partir de un precio neto suministrado por el usuario, calcula e informa el monto del IVA y el
precio final
String Nombre; Real Precio, MontoIva, PrecioFinal;
Escribir(“indique el nombre y el precio neto del artículo”); Leer(Nombre, Precio);
MontoIva = Precio * 0,14; PrecioFinal = Precio + MontoIva;
Escribir(“Artículo: ” + Nombre);
Escribir(“Precio Bs. ” + Precio + “ IVA Bs. “ + MontoIva + “ Precio Final Bs. “ + PrecioFinal);
FAcción CalcularPrecio;

5.2 Funciones

Curso Programación con Python 27


Centro de Enseñanza Asistida por Computador - CENEAC

Al igual que las acciones con conjuntos de instrucciones con un nombre, pero se caracterizan por retornar
(enviar o devolver) un valor al algoritmo que la llama.
Como el resultado de la función es retornado al algoritmo principal, debe usarse una variable para almacenar
este resultado, es decir, en una variable del algoritmo principal se “captura” el valor retornado por la función.
Luego el valor almacenado en la variable puede ser utilizado por el algoritmo que llama a la función.
Sintaxis de la definición formal de la Función:
Función <Nombre> [(lista parámetros formales) ] : <tipo dato retorno>
// comentario sobre lo que la función hace
< definición de variables locales >;
< instrucciones de la función >;
retornar (<variable, constante o expresión compatible
con el tipo de retorno >);
FFunción <Nombre>; Dónde:

• Función … FFunción delimitan el inicio y fin de la función.


• <Nombre> es un identificador (nombre) válido
• : operador usado para expresar que la función retornará un valor del tipo de dato que se indica luego.
• [(lista parámetros formales) ] Esta lista es opcional por eso aparece entre corchetes.
• <tipo de dato de retorno> indica el tipo de dato del valor que la función retornará al algoritmo que la llamó
(por ejemplo, podría retornar un entero, ó un string, ó un objeto, etc.)
• retornar instrucción predefinida utilizada para indicar el lugar y el valor a retornar por parte de la función.

Ejemplo 7: Función sin pase de parámetros


Función CantidadPalabrasLos : Entero
// solicita al usuario palabras, verifica si se suministra la palabra “los” y en ese caso se cuenta.
// el algoritmo termina cuando se lea la palabra “fin”
String palabra; Entero CantLos;
CantLos = 0;
Escribir(“A continuación se le solicitarán palabras. Suministre la palabra fin, para terminar el
algoritmo”);
Repetir
Escribir(“Suministre una palabra”); Leer(palabra);
Si palabra == “los” Entonces
CantLos = CantLos + 1;
FSi;
Hasta palabra == “fin”;
Retornar(CantLos);
// esta instrucción retorna o devuelve la cantidad de palabras al algoritmo que llamo a esta
función
FinFunción CantidadPalabrasLos;

Curso Programación con Python 28


Centro de Enseñanza Asistida por Computador - CENEAC

5.3 Tipos de Parámetros y Pase de Parámetros


Parámetros actuales
Son los valores indicados en la llamada a la acción o función en el algoritmo principal. Son los valores que se
desean pasar desde el algoritmo principal a las instrucciones de la acción o función.
Parámetros formales
Son los nombres dados a los parámetros en la definición formal de la acción o función. Con estos nombres se
conocerán a los valores de los parámetros dentro de la acción o función y funcionan como variables locales
dentro de ellos.
Sintaxis de los parámetros formales en la cabecera de la acción o función:
Acción <Nombre> ([Var] TipodeDato NombreParámetro; …) // para las acciones
Variable_retorno = Función <Nombre> ([Var] TipodeDato NombreParámetro; …) // para las
funciones

En la definición formal debe especificarse por los parámetros el tipo de sustitución (por valor o por referencia),
su tipo de dato y su nombre. Si el tipo de sustitución es por referencia se indica con la palabra Var (también se
estila en algunos lenguajes usar Ref en lugar de Var) antes del tipo de dato, si es por valor, no se coloca nada. Si
varios parámetros tienen el mismo tipo de dato y todos son pasados por valor puede escribirse el Tipo de dato
una sola vez y luego la lista de los nombres de los parámetros separadas por coma, por ejemplo, Entero x, y, z
Pase de parámetros por valor
El parámetro actual no es modificado si se modifica el parámetro formal dentro del procedimiento, ya que
ambos parámetros ocupan posiciones diferentes en memoria. Esto se debe a que el parámetro actual se evalúa
y el resultado se copia en el correspondiente parámetro formal, que ocupa otra posición en memoria. Por ello,
cuando se regresa de la acción o función al algoritmo desde donde se hace la llamada los parámetros actuales
mantienen su valor original.
Pase de parámetros por referencia
El parámetro actual sufre los mismos cambios que el parámetro formal. El parámetro actual no puede ser ni
una constante ni una expresión. Ambos parámetros ocupan la misma posición en memoria. Por ello, cuando se
regresa de la acción/función al algoritmo desde donde se hace la llamada los parámetros actuales han
cambiado.
Llamada (o invocación) de las acciones o funciones
La llamada a una acción o función es una instrucción que permite la ejecución de la secuencia de sus
instrucciones. Consiste en indicar el nombre y los parámetros actuales que van a ser utilizados.
Los parámetros actuales que se indican en la llamada de la acción (por ejemplo en el algoritmo principal),
deben corresponderse con los parámetros formales de la definición de la acción o /función. Por ello, la
cantidad de parámetros actuales debe ser igual a la cantidad de parámetros formales y del mismo tipo de dato.
Sintaxis de la llamada a la acción o función:
<Nombre_Acción> ([lista de valores de los parámetros actuales]) // llamada para las acciones
Variable = <Nombre_Función> ([lista de valores de los parámetros actuales]) // llamada para las
funciones

Curso Programación con Python 29


Centro de Enseñanza Asistida por Computador - CENEAC

Uso de procedimientos en Python


En este lenguaje no se utilizan acciones, solo funciones.
La función es un bloque de código que puede ser ejecutado cuando y cuantas veces se requiera y
son de gran ayuda cuando se necesita que un programa ejecute cierta operación muchas veces.
Existen dos tipos de funciones, las creadas por el programador (nosotros), la cuales incluyen el
código que se desea ejecutar para resolver un problema, y las que vienen incluidas con Python, las
cuales sirven para realizar procedimientos básicos, como por ejemplo convertir un Integer en un string
o saber cuál es el tamaño de dicho string.
Para definir una función en Python se usa la palabra clave def y luego colocar el nombre que le
queremos dar a la función, en este caso totalizarCompra. Luego, se agrega la lista de parámetros
entre paréntesis y finalmente agregamos dos puntos. El código de la función debe estar indentado o
con sangría, al igual que con los if, while, etc. Para poder ejecutar la invoca indicando su nombre
seguido de la lista de parámetros actuales entre paréntesis (p.e., totalizarCompra()).

Ejemplo: función que muestra los divisores de un número entero suministrado por el usuario
# - - - - - - - - - -
# Creado por Yusneyi Carballo Barrera, CENEAC-UCV, ver: Jun.2016
# más información en:
# http://docs.python.org.ar/tutorial/3/
# http://docs.python.org.ar/tutorial/3/controlflow.html#definiendo-funciones
# - - - - - - - - - -

# sección de declaración formal de las funciones y sus parámetros

def divisores(n):
""" Retorna una cadena con los divisores del número n."""
divis = ""
for i in range(1,n):
if n % i == 0:
divis += str(i) + ", " # secuencia de divisores,

divis = divis.strip(', ') # elimina la última como y espacio de la secuencia


return divis

# cuerpo principal del programa con las invocaciones a librerías y a las funciones

print("Suministre un valor entero para el cual se mostrarán sus divisores")


num = int(input())
print("\n Lista de divisores de ", num, " es: " , divisores(num))
# invocación a la función con el parámetro actual num

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python 30


Centro de Enseñanza Asistida por Computador - CENEAC

6. Tipos de Datos Estructurados (TDE)


Los tipos de datos estructurados son herramientas de la programación que permiten almacenar información
estructurada o conformada por varios elementos en la memoria del computador y manipularlos en forma
sencilla. Las estructuras de datos están formadas por más de un elemento, que pueden ser todos del mismo
tipo de dato (estructuras de datos homogéneas como los arreglos y los archivos) o de tipos de datos diferentes
(estructuras de datos heterogéneas, como los registros y los objetos o instancias de clases).
Las estructuras de datos permiten el almacenamiento de información de manera organizada en la memoria
principal del computador o en algún dispositivo externo (memoria auxiliar).

Tipo de Componentes
.- Entero .- Real
Número de
Componentes .- Carácter .- String .- Lógico
Elemental .- Enumerado .- Subrango
1
Tipo Tipo de Componentes
n
Homogéneos: .- Arreglos .- Archivos
Estructurado (todos sus elementos tienen el mismo tipo de datos)

Heterogéneos: .- Registros
(elementos pueden tener tipos de datos diferentes)

6.1 Arreglos
Estructuras de datos conformada por una sucesión de celdas, que permite almacenar en la memoria principal
del computador un conjunto finito de elementos (hay un número máximo conocido) que tienen el mismo tipo
de dato (son homogéneos).
Para hacer referencia a cualquiera de las celdas del arreglo es necesario el nombre del arreglo y el valor de uno
de los elementos perteneciente al conjunto de índices asignado, lo que permite tener acceso aleatorio.
Características básicas de los Arreglos
• Homogéneo: los elementos del arreglo son todos del mismo tipo de dato
• Ordenado: cada elemento del arreglo puede ser identificado por el índice que le corresponde. El índice no es
más que un entero que pertenece a un intervalo finito y determina la posición de cada elemento dentro del
arreglo.
• Acceso Secuencial o Directo: El acceso a cada elemento del arreglo se realiza recorriendo los anteriores
según el orden en que están almacenados o de manera directa (operación selectora), indicando el valor del
índice del elemento requerido.
• Sus elementos son tratados como variables simples: Una vez seleccionado algún elemento del arreglo este
puede ser utilizado en acciones de asignación, como parte de expresiones o como parámetros al llamar a
acciones o funciones como si se tratara de una variable del tipo de dato simple declarado para todos los
elementos del arreglo.

Curso Programación con Python 31


Centro de Enseñanza Asistida por Computador - CENEAC

• Uso de índice: El índice es un valor de tipo entero (número entero o carácter con un código entero
equivalente) que determina la posición de cada elemento en el arreglo. La cantidad de índices determina las
dimensiones del arreglo. Así un arreglo unidimensional tiene un índice, un arreglo bidimensional tiene dos
índices y uno n-dimensional tiene n índices.
Declaración de los arreglos
Para declarar un arreglo se debe indicar:
• El nombre del arreglo
• El tipo base: tipo de dato de todos los componentes del arreglo
• El tipo índice: intervalo de valores que podrá tomar el índice del arreglo, indicando el límite inferior (Li) y el
límite superior (Ls) del rango
Operaciones generales con arreglos
• Operación constructora
• Operación selectora
• Recorridos, entre otros, el secuencial para inicializar el arreglo o para listar sus valores
• Búsqueda
• Ordenamiento o Mezclas
Cualquier proceso de selección de un valor, recorrido o búsqueda que queramos realizar sobre un arreglo
unidimensional involucra usar un índice, en un arreglo bidimensional involucra usar dos subíndices, y así
generalmente. En el caso de los recorridos en un arreglo bidimensional se usan, frecuentemente, dos ciclos
anidados para recorrer toda la matriz.

a. Arreglos Unidimensionales (o Vectores)


Tipos de Datos Estructurados (TDE) donde todos 1 2 3 … n-1 n  índice
sus elementos pertenecen al mismo tipo y existe
ser hola oh ojo cas bie  contenido
una correspondencia uno a uno de cada elemento a n celda
con un subconjunto de los enteros (índices).

Declaración de Arreglos Unidimensionales


Se declara la variable tipo arreglo como si se tratara de una variable de tipo de dato simple. La sintaxis a utilizar
en pseudo-código podría ser:
Arreglo <identificador> de <tipo de dato> [Li .. Ls];
Dónde: Li es el límite inferior del arreglo, Ls es el límite superior del arreglo
Ejemplos:
Arreglo A de Entero [1..5]; // arreglo de 5 enteros
Arreglo B de Lógico [-5..5]; // arreglo de 11 lógicos
Arreglo NOMBRE de String [0..99]; // arreglo de 100 palabras
Arreglo NOTAS de Entero [1..n]; // arreglo de n notas

Curso Programación con Python 32


Centro de Enseñanza Asistida por Computador - CENEAC

b. Arreglos Bidimensionales (Matrices o Tablas)


Un arreglo bidimensional (tabla o matriz) es un arreglo que tiene dos índices. Para localizar o almacenar un
valor en el arreglo se deben especificar dos subíndices (dos posiciones), uno para la fila y otro para la columna.
Los diferentes tipos de índices no necesitan ser subrangos del mismo tipo.
Los elementos se referencian con el formato:
<identificador>[ 3,4 ] donde: identificador, es el nombre del arreglo o de la variable
[ 3,4 ] indica el elemento de la fila 3 y columna 4

Declaración de Arreglos Bidimensionales


Al igual que en los arreglos unidimensionales, los arreglos bidimensionales también se pueden crear con
declaraciones de variable o de tipo, el cambio, es que se debe indicar dos intervalos de índices: uno para las
filas y otro para las columnas. Estos intervalos o subrangos no tienen que ser de la misma dimensión.
La sintaxis a utilizar en pseudo-código podría ser:
Arreglo <identificador> de <tipo de dato> [Lifila .. Lsfila , Licol .. Lscol];
Dónde: Li es el límite inferior del arreglo, Ls es el límite superior del arreglo, usados en el rango de filas y de
columnas
Ejemplo: Arreglo Montos de Real [1...10 , 1…25];

Recorrido de todos los elementos del arreglo bidimensional:


El recorrido puede realizarse por fila o por columna, involucrando el uso de dos índices. A continuación ejemplos de los
algoritmos generales de recorrido:
Sean las variables
Entero Fila, Columna;

Recorrido por filas Recorrido por columnas


Para Fila = 1 hasta 10 en 1 hacer Para Columna = 1 hasta 25 en 1 hacer
Para Columna = 1 hasta 25 en 1 hacer Para Fila = 1 hasta 10 en 1 hacer
Escribir(A[Fila, Columna]); Escribir(A[Fila, Columna]);
FPara; FPara;
FPara; FPara;

Algoritmos de búsqueda:
La búsqueda de un elemento, es una operación muy frecuente en cuanto a programación se trata, ya que
permite verificar la existencia de un elemento dentro de una estructura de datos. En el caso de los arreglos
unidimensionales, una operación de búsqueda puede implicar recorrer, de manera secuencial, desde 1 hasta N
elementos.
El resultado de un algoritmo de búsqueda puede ser:
• Un lógico indicando que sí existe (Verdadero) o no existe (Falso) el elemento buscado.

Curso Programación con Python 33


Centro de Enseñanza Asistida por Computador - CENEAC

• Un número entero que indique la posición o índice donde está el elemento en el arreglo. Si no existe
devuelve -1, 0 o cualquier valor fuera del intervalo definido para el arreglo.
• Un número entero, que indique la cantidad de veces que se encuentra el elemento buscado (0 o más
repeticiones), devuelve cero (0) si el elemento no existe.

Los algoritmos básicos de búsqueda son:


• Búsqueda lineal: consiste en comparar de manera secuencial, cada elemento del arreglo con el elemento
clave (o buscado). Es eficiente cuando el arreglo es pequeño y no necesariamente está ordenado.
• Búsqueda binaria: es un algoritmo que se emplea de manera eficiente cuando se tiene un arreglo que ya
está ordenado. Sus pasos generales son:
 Verificar el valor clave (elemento a buscar) contra el elemento que está justo en el centro del
arreglo.
 Si es mayor, el algoritmo buscará solo en la mitad superior del arreglo, si es menor buscará en la
mitad inferior, si es igual retorna la posición encontrada.
 Si busca en alguna de las mitades del arreglo, el algoritmo aplicará nuevamente los pasos a y b, y así
sucesivamente hasta que la clave sea igual al elemento que está justo en la mitad del subarreglo, ó,
el subarreglo se convierta en un arreglo de 1 elemento el cual es distinto a la clave o elemento
buscado.

Algoritmos de ordenamiento:
El ordenamiento es una de las tareas que se efectúa con más frecuencia cuando se desarrollan programas de
tratamiento de información estructurada. Sin embargo esta tarea puede llegar a consumir mucho tiempo de
ejecución. Por esta razón, muchos investigadores de la computación han desarrollado cientos de algoritmos de
ordenamiento que buscan hacer más eficiente el proceso.
Los algoritmos básicos de ordenamiento son:
• Selección directa (ripple sort): consiste en el ordenamiento ascendente de un arreglo unidimensional
(vector) de N elementos, basándose en buscar el elemento más pequeño del arreglo y colocarlo de primero,
luego, buscar el segundo más pequeño y colocarlo en la segunda posición y así sucesivamente.
• Intercambio (burbuja o bubble sort): consiste en el ordenamiento ascendente de un arreglo (vector) de N
elementos. Consiste en insertar un elemento del vector en una parte ya ordenada y comenzar de nuevo con
los elementos restantes. Se basa en comparaciones y desplazamientos sucesivos.

6.2 Registros
Estructura de datos formada por una colección finita de elementos llamados campos, no necesariamente
homogéneos (del mismo tipo) y que permiten almacenar una serie de datos relacionados entre sí bajo un
nombre y una estructura común.
Características básicas de los Registros
• Permiten almacenar un grupo de elementos bajo un nombre y un estructura común

Curso Programación con Python 34


Centro de Enseñanza Asistida por Computador - CENEAC

• Los elementos (campos) de un registro no tienen que ser homogéneos, de hecho, generalmente son de
diferentes tipos
• No están disponibles en todos los lenguajes de programación, razón por la cual muchas veces es necesario
simularlo o definirlo.
Cada campo del registro se comporta como una variable simple, de manera que puede ser usado en una
expresión de asignación, como parte de otra expresión, en operaciones o como parámetro al invocar una
acción o función.
Declaración de registros
A. Declaración por Variable: se declara la variable de tipo registro identificándola a través de su nombre, se
indica la estructura del registro suministrando la definición de sus campos mediante sus tipos de dato y sus
nombres
La sintaxis a utilizar para declarar un registro será:
Registro <identificador> = // se indica el nombre del registro
<Tipo de dato>1 <Identificador>1 // tipo de dato y nombre del campo 1
<Tipo de dato>2 <Identificador>2 // tipo de dato y nombre del campo 2

<Tipo de dato>N <Identificador>N // tipo de dato y nombre del campo N
Fregistro;

6.3 Archivos
Un archivo puede definirse como una secuencia de elementos del mismo tipo, que residen generalmente en
memoria auxiliar. Los archivos son utilizados cuando el volumen de datos a procesar es grande y no cabe en la
memoria central del computador. Adicional a la memoria principal, los archivos pueden ser almacenados en
dispositivos de memoria auxiliar como discos, disquetes, cintas, cartuchos zip, cd, pen drive o memory flash,
discos externos rígidos o flexibles, entre otros.
Características básicas de los Archivos
Los archivos son utilizados cuando se desea que los datos puedan recuperarse aún después de haber apagado
la máquina y también cuando se manejan grandes volúmenes de información.
Residen en memoria auxiliar, la cual generalmente, es más económica, grande, pero lenta que la memoria
principal del computador.
Los elementos que almacena un archivo pueden ser elementales (texto, números) o estructurados (arreglos,
registros). Para propósitos del curso, sólo se puede leer un archivo elemento por elemento.
La cantidad de componentes que constituyen el archivo, es en teoría, ilimitada (no se conoce a priori). Si tiene
cero elementos se dice que es un archivo vacío.
Cuando la estructura de un archivo no parece contener elementos de un solo tipo, si decimos que todos los
elementos del archivo es un gran registro, no rompe la definición anterior (es un caso particular de un archivo
con un solo elemento de tipo registro).

Curso Programación con Python 35


Centro de Enseñanza Asistida por Computador - CENEAC

Los archivos más comunes son los archivos secuenciales. Los elementos de un archivo secuencial están
dispuestos uno tras otro, y para acceder un elemento en particular, hay que pasar por todos los anteriores. Por
esos se les llama de acceso secuencial, a diferencia de los arreglos que son de acceso aleatorio. Sin embargo,
los elementos del archivo también puedes ser extraídos de manera directa, pero este objetivo escapa del
alcance del curso.

Declaración de Archivos
Consiste en indicar el nombre de la variable que será utilizada en el algoritmo para hacer Referencia al archivo.
A. Declaración por Variable: se declara la variable tipo archivo como si se tratara de una variable de tipo de
dato simple.
Archivo <Identificador>A; # se indica el nombre del archivo
Ejemplos: Archivo A; Archivo Ar, X;

B. Declaración por Tipo: al igual que los arreglos y los registros, se antecede la palabra reservada Tipo a la
declaración y luego se declaran las variables del tipo.
Tipo Archivo <Identificador_Tipo>;
<Identificador_Tipo> <Identificador>A;
Ejemplos: Tipo Archivo A; A Ar, X;

Operaciones básicas en Archivos Secuenciales


Estas operaciones se consideran operaciones primitivas y reservadas del pseudo-código.

A. Abrir el archivo: Ubica y prepara el archivo para poder trabajar con él.
Acción AbrirArchivo (Ref Archivo A; String <ruta_del_archivo>, <Argumentos>)

Donde:
<ruta_del_archivo> indica la ruta en memoria o al menos el nombre del archivo con el cual se va a trabajar, por
ejemplo, C/Mis documentos/datosprueba.txt o DatosParticipantes.doc
<Argumentos> es uno o más de las siguientes palabras reservadas:
Escritura: indica que el archivo se abre de solo escritura
Lectura: indica que el archivo de abre de solo lectura
Añadir: indica que el archivo se abre de escritura pero todo lo que se escriba se añade al final del archivo
Texto: indica que el archivo a abrir es un archivo de texto
Binario: indica que el archivo a abrir es un archivo binario (un archivo diferente a un archivo de texto).
Los argumentos pueden ser combinados con el operador lógico y.
Por ejemplo: AbrirArchivo(A, ‘prueba.txt’, Lectura y Texto)

Curso Programación con Python 36


Centro de Enseñanza Asistida por Computador - CENEAC

En el parámetro argumentos, normalmente se indica como mínimo, uno de los tipos de archivo (lectura,
escritura, añadir) y uno de los tipos de datos para sus elementos (texto, binario). Los argumentos también son
llamados flags.
NOTA: El archivo se abre una sola vez en el algoritmo, al principio del mismo y debe ser cerrado al finalizar el
mismo

B. Cerrar el archivo: Cuando se desea dejar de trabajar con un archivo, debe cerrarse para que esté disponible
para otras aplicaciones. Sólo los archivos que están abiertos pueden cerrarse. Si un archivo no se cierra se
puede perder información en el mismo.
Acción CerrarArchivo(Ref Archivo A)

C. Fin de archivo (FDA, EOF): indica si no hay más elementos para leer en el archivo. Sólo se usa para archivos
de lectura. Retorna verdadero si se alcanzó el fin del archivo y falso en caso contrario.
Función FDA(Ref Archivo A) : lógico

D. Leer del archivo: Lee un elemento. Aunque una lectura no modifica el archivo físicamente en disco, la
variable Archivo si es modificada (por ejemplo, cambia la posición actual del cursor del archivo), por lo tanto
debe pasarse por Referencia.
Acción LeerArchivo(Ref Archivo A, Ref <elemento_tipo> x)

E. Escribir en el archivo: escribe un elemento en el archivo.


Acción EscribirArchivo(Ref Archivo A, <elemento_tipo> x)

Tipos de datos estructurados en Python


Cadenas de texto | Listas | Tuplas | Conjuntos | Diccionarios
El lenguaje incluye diversas estructuras de datos, entre otras: 1

CADENAS DE TEXTO (ARREGLOS DE TEXTO) encerradas en comillas simples o dobles, por ejemplo: 'huevos y
pan' o "La casa rosa". No hay un tipo de dato para los caracteres, como en otros lenguajes que existe el tipo
char, un carácter es simplemente una cadena de longitud uno.

Algunas características de las cadenas de texto:


 Las cadenas de texto se pueden indexar (subíndices), el primer carácter de la cadena tiene el índice
0, la forma de consultar un carácter específico de una cadena, por ejemplo en una variable pal =
'Lenguajes', sería pal[i], donde i es la posición o índice del elemento a consultar. En el ejemplo
pal[2] será 'n' y pal[0] sería 'L'.

1
Fuentes: Guido van Rossum. 2015. “El tutorial de Python”. Comunidad Python Argentina. www.python.org.ar y Tutorial
de Python 3.5.1: http://docs.python.org.ar/tutorial/3/datastructures.html

Curso Programación con Python 37


Centro de Enseñanza Asistida por Computador - CENEAC

 Los índices pueden ser números negativos, lo cual permite recorrer desde la derecha, por ejemplo
pal[-1] consulta el último carácter de la cadena, en el ejemplo, pal[-1] sería 's'.
 En Python las cadenas de texto también se pueden consultar en un subrango de valores, indicando
la posición de inicio y la posición de fin de la subcadena, tome en cuenta que en Python la posición
inicial es incluida pero la posición final no, por lo tanto para el ejemplo, pal[0:2] daría como
resultado 'Le' en lugar de 'Len' ya que se excluye el carácter de la posición 2. Indicar pal[:2] = 'Le'
 Las cadenas una vez creadas no pueden ser modificadas, son inmutables, por lo tanto tratar de
asignar un nuevo valor a una posición de la cadena de texto arroja un error.
 Las cadenas soportan la operación de concatenación o unión (+), la operación de repetición (*) y la
operación de consulta de longitud (len).

LISTAS DE ÍTEMS (list) separados por comas y entre corchetes, por ejemplo, vocales = ['a', 'e', 'i', 'o',
'u'] o cubos = [3, 1, 8, 27, 64]

Algunas características de las cadenas de texto:


 Permiten la consulta de un valor en una posición específica y también de un subrango, como las
cadenas de texto.
 Las listas si permiten la asignación de valores o modificación de sus valores luego de creadas, es
decir no son inmutables como las cadenas de texto, por ejemplo, vocales[1:3] = ['E', 'I', 'O'] daría
como resultado ['a', 'E', 'I', 'O', 'u'].
 Se pueden eliminar elementos de una lista o borrar la lista completa, por ejemplo, vocales[1:2] = []
daría como resultado ['a', 'O', 'u'], mientras que vocales[:] = [] reemplazaría todos los elementos de
la lista vocales por una lista vacía.
 Las listas se pueden anidar, es decir, crear listas que contienen otras listas, por ejemplo, sean las
listas l1 = ['la', 'al', 'lo'] y l2 = [11, 12, 13], la lista resultante de la anidación:
l3 = [l2, l1] sería l3 = [ [11, 12, 13], ['la', 'al', 'lo'] ], donde l3[0] sería [11, 12, 13] y l3[1][2] sería 'lo'.
 Principales métodos para uso de listas en Python:
o list.append(x): Agrega un elemento (ítem) al final de la lista list. Equivale a realizar:
a[len(a):] = [x], es decir, agregar en la posición final (len(a)) de la lista a al elemento x
almacenado en una lista ([x]).
o list.extend(L): Extiende la lista list, agregándole todos los ítems de la lista dada L.
Equivale a a[len(a):] = L.
o list.insert(i, x): Inserta un ítem x en una posición i dada. El primer argumento es el
índice del ítem (i) delante del cual se insertará, por lo tanto a.insert(0, x) inserta al principio
de la lista a, mientras que a.insert(len(a), x) equivale a utilizar a.append(x).
o list.remove(x): Quita el primer ítem de la lista cuyo valor sea x. Es un error si no existe
el elemento x en la lista list.
o list.pop(): Quita y devuelve el último ítem de la lista. Cuando se especifica una
posición, por ejemplo list.pop(i) entonces se quita el ítem en la posición dada de la lista, y
lo devuelve.
o list.clear(): Quita todos los elementos de la lista.

Curso Programación con Python 38


Centro de Enseñanza Asistida por Computador - CENEAC

o list.index(x): Devuelve el índice en la lista del primer ítem cuyo valor sea x. Es un error
si no existe el elemento x.
o list.count(x): Devuelve el número de veces que x aparece en la lista.
o list.sort(key=None, reverse=False): Ordena los ítems de la lista, el argumento
reverse en True se utiliza para ordenar descendentemente.
o del: Quita un elemento de la lista según la posición o rango indicado, por ejemplo, para la
lista l2 = [11, 12, 13, 14, 15, 16]:
del l2[1] daría como resultado l2 = [11, 13, 14, 15, 16]
del l2[2:4] daría como resultado l2 = [11, 13, 16] // recuérdese que el Ls no se incluye
del l2[:] daría como resultado la lista l2 vacía, l2 = []

TUPLAS o secuencias de valores (no necesariamente del mismo tipo) separados por comas, por ejemplo,
t1 = 12, 100, 'a', 'casa' o t2 = 'a', 1, 'b', 2

Algunas características de las tuplas:


 Permiten la consulta de un valor en una posición específica, por ejemplo, t1[1] sería 100.
 Al igual que las cadenas de texto son inmutables, es decir, no se les puede asignar valores para
modificarlas una vez creadas, por ejemplo t[0] = 20 daría un error.
 Se puede crear tuplas anidadas, resultantes de la combinación de otras tuplas, por ejemplo, t3 = t1,
t2, (1, 2, 3) daría como resultado la tupla t3 = ( (12, 100, 'a', 'casa'), ('a', 1, 'b', 2), (1, 2, 3) )
 Sin embargo, se pueden crear tuplas de listas que sí son objetos que pueden mutables y cuyos
valores se indican entre [], por ejemplo, t4 = ( ['c1', 'c2', 'c3'], ['Caracas', 'Los Teques', ' Maracay'] ).
 Las tuplas suelen usarse para representar entre () secuencias de elementos heterogéneos, las listas
suelen utilizarse para representar entre [] secuencias de elementos homogéneos. Vale destacar
que una tupla puede crearse sin usar los ()
 La tupla vacía se construye asignado un par de paréntesis vacío, por ejemplo t = (), mientras que
una tupla de un solo elemento se construye asignado un solo valor seguido de una coma, , por
ejemplo t1 = 'casa',
 Cuando en una tupla es creada con una secuencia de valores heterogénea se denomina
“empaquetado de tuplas”, por ejemplo, dir = 'Carlos', 04141227811, 'Ana', 02128941257, mientras
que la operación inversa se denomina “desempaquetado” y es equivalente a asignar a varias
variables los valores de la tupla, donde la cantidad de valores a la izquierda debe ser igual al
tamaño de la secuencia, por ejemplo, p1, t1, p2, t2 = dir, dejando en las cuatro variables de la
izquierda cada valor de la tupla dir.

CONJUNTOS o colecciones no ordenadas y sin elementos repetidos de valores separados por coma y entre
llaves {}

Algunas características de los conjuntos:


 Si la secuencia de los elementos del conjunto incluye valores repetidos, la operación de creación
automáticamente los elimina, por ejemplo, para el conjunto primos = { 2, 3, 5, 7, 5, 11, 13, 2 },
hacer un print de la variable primos daría como resultado el conjunto { 2, 3, 5, 7, 11, 13 }.

Curso Programación con Python 39


Centro de Enseñanza Asistida por Computador - CENEAC

 Pueden crearse utilizando las {} o la operación set(). El conjunto vacío debe crearse utilizando la
operación set(), no sirve utilizar solo llaves vacías {}, ya que el uso de {} crearía otra estructura de
datos llamada diccionario.
 Principales operaciones sobre conjuntos en Python, dados los conjuntos c1 = {1, 2, 3, 4, 5, 6} y c2 =
set(2, 4, 6, 8, 10) y c3 = {3, 10}:
o pertenencia (in, not in): retorna True o False luego de evaluar si un elemento pertenece al
conjunto, por ejemplo, 3 in c1 retornaría True, mientras que 3 in c2 retornaría False, 2 not
in c3 retornaría True.
o unión (|): la unión de dos conjuntos retorna como resultado un conjunto con los
elementos que están en uno, en otro o en ambos. Por ejemplo:
c1 | c2 daría como resultado {1, 2, 3, 4, 5, 6, 8, 10}
c1 | c2 | c2 daría como resultado {1, 2, 3, 4, 5, 6, 8, 10} ya que no se repiten elementos
también puede usarse c1.union(c2)
o intersección (&): retorna el conjunto de elementos que están en ambos. Por ejemplo:
c1 & c2 daría como resultado {2, 4, 6}
c1 & c2 & c3 retorna el conjunto vacío o set() ya que ningún elemento de uno de los
conjunto está también en los otros dos
también puede usarse c1.intersection(c2. intersection(c3))
o diferencia (-): retorna el conjunto de elementos que están en el primer conjunto pero no
están en el segundo. Por ejemplo:
c2 – c3 daría como resultado {2, 4, 6, 8}
c1 – c2 daría como resultado {1 , 3, 5}
también puede usarse c2.difference(c3)
o diferencia simétrica o unión exclusiva (^): retorna el conjunto de elementos que
están en el primer conjunto o en el segundo conjunto, pero no en ambos. Por ejemplo:
c1 ^ c2 daría como resultado {1, 3, 5, 8, 10}
también puede usarse c1.symmetric_difference(c3)

DICCIONARIOS o arreglos asociativos, conformados por un conjunto de pares del tipo clave: valor, separados
por coma y entre llaves {}

Algunas características de los diccionarios:


 Las claves deben ser únicas dentro de un diccionario en particular.
 Un diccionario vacío se crea utilizando un par de llaves vacías: {}
 Para crear un diccionario se indica entre llaves una secuencia de pares valor: clave, separador por
coma, por ejemplo, agenda = { 'Luis': 04141227811, 'Ana': 02125004489, 'Alex': 04162389478,
'Marcos': 04144668974 }
 Sus valores se indexan mediante las claves, que pueden ser cualquier tipo inmutable, incluyendo
cadenas y números. No se indexan mediante un rango numérico, como se hace en las secuencias.

Curso Programación con Python 40


Centro de Enseñanza Asistida por Computador - CENEAC

Para consultar o indexar un valor en un diccionario se utiliza la clave asociada, por ejemplo,
agenda['Ana'] daría como resultado 02125004489
 Si se utiliza una clave ya existente en el diccionario con un nuevo valor, se pierde o sobre-escribe el
valor anterior, por ejemplo, agenda['Luis'] = 02564590011 sustituiría el número anterior
04141227811.
 Es un error tratar de extraer un valor cuya clave no existen en el diccionario.
 Principales operaciones sobre diccionarios en Python, considerando el diccionario notas = { 'Luis':
16, 'Ana': 14, 'Alex': 18, 'Marcos': 17 }:
o dict(): operación de construcción, puede usarse indicando las claves entre comillas
simples o sin ella cuando scon cadenas de una sola palabra, por ejemplo, d = dict( 1: 'a', 2:
'e', 3: 'i'), en este diccionario las claves son los valores 1, 2 y 3.
o del: permite borrar un par clave: valor, por ejemplo, del notas['Ana'] daría como resultado
notas = { 'Luis': 16, 'Alex': 18, 'Marcos': 17 }
o listar claves o list( d.keys() ): devuelve una lista de todas las claves usadas en el
diccionario en su orden original, por ejemplo, list(notas.keys()) luego de eliminar a Ana,
devuelve la lista ['Luis', 'Alex', 'Marcos']
o listar claves ordenadas o sorted( d.keys() ): devuelve una lista de las claves del
diccionario ordenadas ascendentemente, por ejemplo, sorted(notas.keys()), devuelve la
lista ['Alex', 'Luis', 'Marcos']
o pertenencia (in, not in): retorna True o False si la clave está en el diccionario, por ejemplo,
'Marcos' in notas retornaría True, 'Martha' not in notas también retornaría True.
o creación por compresión: permite indicar expresión arbitrarias de clave: valor para la
generación de los elementos del diccionario, por ejemplo:
{ x: x /2 for x in (2, 4, 6) } crearía por compresión un diccionario con los valores
{ 2: 1, 4: 2, 6: 3} las claves son los valores de la lista (2, 4, 6) y los valores los
resultados de la operación x/2
o iteración o recorrido: para recorrer un diccionario se utilizan los métodos ítems() para
obtener al mismo tiempo la clave y su valor; enumerate() para obtener el índice de
posición y el valor; zip() para emparejar o relacionar dos secuencias al mismo tiempo;
reversed() para iterar en una secuencia en orden inverso; sorted() para devolver e
iterar en una secuencia ordenada creada a partir de la original, ya que ésta se queda
intacta, se ordena sobre la copia.

ARCHIVOS en Python este tipo de dato estructurado se representa mediante una clase, con atributos y
métodos propios para declarar una instancia tipo file, abrirlo (open), leer sus datos (read, readline, print),
escribir una cadena de texto en el archivo (write) y cerrar el archivo (close), entre otros métodos de la clase.

Más adelante se indicará en un ejemplo cuáles son las principales operaciones en Python para procesar datos
en Archivos o files.

Curso Programación con Python 41


Centro de Enseñanza Asistida por Computador - CENEAC

7. PROGRAMACIÓN ORIENTADA A OBJETOS (POO)


La programación Orientada a Objetos es una metodología que basa la estructura de los programas en torno a
los objetos. Los lenguajes de POO ofrecen medios y herramientas para describir los objetos manipulados por
un programa. Más que describir cada objeto individualmente, estos lenguajes proveen una construcción (Clase)
que describe a un conjunto de objetos que poseen las mismas propiedades.

7.1 Objeto
Es una entidad (tangible o intangible) que posee características y acciones que realiza por sí solo o
interactuando con otros objetos.
Un objeto es una entidad caracterizada por sus atributos propios y cuyo comportamiento está determinado por
las acciones o funciones que pueden modificarlo, así como también las acciones que requiere de otros objetos.
Un objeto tiene identidad e inteligencia y constituye una unidad que oculta tanto datos como la descripción de
su manipulación. Puede ser definido como una encapsulación y una abstracción: una encapsulación de
atributos y servicios, y una abstracción del mundo real.
Para el contexto del Enfoque Orientado a Objetos (EOO) un objeto es una entidad que encapsula datos
(atributos) y acciones o funciones que los manejan (métodos). También para el EOO un objeto se define como
una instancia o particularización de una clase.
Los objetos de interés durante el desarrollo de software no sólo son tomados de la vida real (objetos visibles o
tangibles), también pueden ser abstractos. En general son entidades que juegan un rol bien definido en el
dominio del problema. Un libro, una persona, un carro, un polígono, son apenas algunos ejemplos de objeto.
Cada objeto puede ser considerado como un proveedor de servicios utilizados por otros objetos que son sus
clientes. Cada objeto puede ser a la vez proveedor y cliente. De allí que un programa pueda ser visto como un
conjunto de relaciones entre proveedores clientes. Los servicios ofrecidos por los objetos son de dos tipos:
1.- Los datos, que llamamos atributos.
2.- Las acciones o funciones, que llamamos métodos.
Características Generales
• Un objeto se identifica por un nombre o un identificador único que lo diferencia de los demás. Ejemplo: el
objeto Cuenta de Ahorros número 12345 es diferente al objeto Cuenta de Ahorros número 25789. En este
caso el identificador que los hace únicos es el número de la cuenta.
• Un objeto posee estados. El estado de un objeto está determinado por los valores que poseen sus atributos
en un momento dado.
• Un objeto tiene un conjunto de métodos. El comportamiento general de los objetos dentro de un sistema se
describe o representa mediante sus operaciones o métodos. Los métodos se utilizarán para obtener o
cambiar el estado de los objetos, así como para proporcionar un medio de comunicación entre objetos.
• Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores que determinan el
estado del objeto durante su tiempo de vida. Se implementan con variables, constantes y estructuras de
datos (similares a los campos de un registro).
• Los objetos soportan encapsulamiento. La estructura interna de un objeto normalmente está oculta a los
usuarios del mismo. Los datos del objeto están disponibles solo para ser manipulados por los propios
métodos del objeto. El único mecanismo que lo conecta con el mundo exterior es el paso de mensajes.

Curso Programación con Python 42


Centro de Enseñanza Asistida por Computador - CENEAC

• Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza. Para ser utilizado en
un algoritmo el objeto debe ser creado con una instrucción particular (New ó Nuevo) y al finalizar su
utilización es destruido con el uso de otra instrucción o de manera automática.

7.2 Clase
La clase es la unidad de modularidad en el EOO. La tendencia natural del individuo es la de clasificar los objetos
según sus características comunes (clase). Por ejemplo, las personas que asisten a la universidad se pueden
clasificar (haciendo abstracción) en estudiante, docente, empleado e investigador.
La clase puede definirse como la agrupación o colección de objetos que comparten una estructura común y un
comportamiento común.
Es una plantilla que contiene la descripción general de una colección de objetos. Consta de atributos y métodos
que resumen las características y el comportamiento comunes de un conjunto de objetos.
Todo objeto (también llamado instancia de una clase), pertenece a alguna clase. Mientras un objeto es una
entidad concreta que existe en el tiempo y en el espacio, una clase representa solo una abstracción.
Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten el mismo conjunto de
atributos y métodos. Todos los objetos de una clase tienen el mismo formato y comportamiento, son
diferentes únicamente en los valores que contienen sus atributos. Todos ellos responden a los mismos
mensajes.
Su sintaxis algorítmica es:
Clase <Nombre de la Clase>

FClase <Nombre de la Clase>;

Características Generales
• Una clase es un nivel de abstracción alto. La clase permite describir un conjunto de características comunes
para los objetos que representa. Ejemplo: La clase Avión se puede utilizar para definir los atributos (tipo de
avión, distancia, altura, velocidad de crucero, capacidad, país de origen, etc.) y los métodos (calcular
posición en el vuelo, calcular velocidad de vuelo, estimar tiempo de llegada, despegar, aterrizar, volar, etc.)
de los objetos particulares Avión que representa.
• Un objeto es una instancia de una clase. Cada objeto concreto dentro de un sistema es miembro de una
clase específica y tiene el conjunto de atributos y métodos especificados en la misma
• Las clases se relacionan entre sí mediante una jerarquía. Entre las clases se establecen diferentes tipos de
relaciones de herencia, en las cuales la clase hija (subclase) hereda los atributos y métodos de la clase padre
(superclase), además de incorporar sus propios atributos y métodos.
Ejemplos, Superclase: Clase Avión
Subclases de Avión: Clase Avión Comercial, Avión de Combate, Avión de Transporte
Los nombres o identificadores de las clases deben colocarse en singular (clase Animal, clase Carro, clase
Alumno).

7.3 Relación entre Clase y Objeto

Curso Programación con Python 43


Centro de Enseñanza Asistida por Computador - CENEAC

Algorítmicamente, las clases son descripciones netamente estáticas o plantillas que describen objetos. Su rol
es definir nuevos tipos conformados por atributos y operaciones.
Por el contrario, los objetos son instancias particulares de una clase. Las clases son una especie de molde de
fábrica, en base al cual son construidos los objetos. Durante la ejecución de un programa sólo existen los
objetos, no las clases.
La declaración de una variable de una clase NO crea el objeto.
La asociación siguiente: <Nombre_Clase> <Nombre_Variable>; (por ejemplo, Rectángulo R), no genera o no
crea automáticamente un objeto Rectángulo. Sólo indica que R será una referencia o una variable de objeto de
la clase Rectángulo.
La creación de un objeto, debe ser indicada explícitamente por el programador, de forma análoga a como
inicializamos las variables con un valor dado, sólo que para los objetos se hace a través de un método
Constructor (ver punto Métodos).

7.4 Atributo
Son los datos o variables que caracterizan al objeto y cuyos valores en un momento dado indican su estado.
Un atributo es una característica de un objeto. Mediante los atributos se define información oculta dentro de
un objeto, la cual es manipulada solamente por los métodos definidos sobre dicho objeto
Un atributo consta de un nombre y un valor. Cada atributo está asociado a un tipo de dato, que puede ser
simple (entero, real, lógico, carácter, string) o estructurado (arreglo, registro, archivo, lista, etc.)
Su sintaxis algorítmica es: <Modo de Acceso> <Tipo de dato> <Nombre del Atributo>;
Los modos de acceso son:
 Público: Atributos (o Métodos) que son accesibles fuera de la clase. Pueden ser llamados por cualquier
clase, aun si no está relacionada con ella. Este modo de acceso también se puede representar con el
símbolo +
 Privado: Atributos (o Métodos) que sólo son accesibles dentro de la implementación de la clase.
También se puede representar con el símbolo –
 Protegido: Atributos (o Métodos) que son accesibles para la propia clase y sus clases hijas (subclases).
También se puede representar con el símbolo #

7.5 Método
Son las operaciones (acciones o funciones) que se aplican sobre los objetos y que permiten crearlos, cambiar su
estado o consultar el valor de sus atributos.
Los métodos constituyen la secuencia de acciones que implementan las operaciones sobre los objetos. La
implementación de los métodos no es visible fuera de objeto.
La sintaxis algorítmica de los métodos expresados como funciones y acciones es:
Para funciones se pueden usar cualquiera de estas dos sintaxis:
<Modo de Acceso> Función <Nombre> [(Lista Parámetros)]: <Descripción del Tipo de
datos>
Para acciones:

Curso Programación con Python 44


Centro de Enseñanza Asistida por Computador - CENEAC

<Modo de Acceso> Acción <Nombre> [(Lista Parámetros)] donde los parámetros son
opcionales
Ejemplo: Un rectángulo es un objeto caracterizado por los atributos Largo y Ancho, y por varios métodos, entre
otros Calcular su área y Calcular su perímetro.

Características Generales
• Cada método tiene un nombre, cero o más parámetros (por valor o por referencia) que recibe o devuelve y
un algoritmo con el desarrollo del mismo.
• En particular se destaca el método constructor, que no es más que el método que se ejecuta cuando el
objeto es creado. Este constructor suele tener el mismo nombre de la clase/ objeto, pero aunque es una
práctica común, el método constructor no necesariamente tiene que llamarse igual a la clase (al menos, no
en pseudo-código). Es un método que recibe cero o más parámetros y lo usual es que inicialicen los valores
de los atributos del objeto.
• En lenguajes como Java y C++ se puede definir más de un método constructor, que normalmente se
diferencian entre sí por la cantidad de parámetros que reciben.
• Los métodos se ejecutan o activan cuando el objeto recibe un mensaje, enviado por un objeto o clase externo
al que lo contiene, o por el mismo objeto de manera local.

Creación de Objetos y Métodos Constructores:


Cada objeto o instancia de una clase debe ser creada explícitamente a través de un método u operación
especial denominado Constructor. Los atributos de un objeto toman valores iniciales dados por el constructor.
Por convención el método constructor tiene el mismo nombre de la clase y no se le asocia un modo de acceso
(es público).
Algunos lenguajes proveen un método constructor por defecto para cada clase y/o permiten la definición de
más de un método constructor.

Método de Destructores de objetos:


Los objetos que ya no son utilizados en un programa, ocupan inútilmente espacio de memoria, que es
conveniente recuperar en un momento dado. Según el lenguaje de programación utilizado esta tarea es dada
al programador o es tratada automáticamente por el procesador o soporte de ejecución del lenguaje.
En la notación algorítmica NO tomaremos en cuenta ese problema de administración de memoria, por lo tanto
no definiremos formas para destruir objetos. En cambio al utilizar lenguajes de programación si debemos
conocer los métodos destructores suministrados por el lenguaje y utilizarlos a fin de eliminar objetos una vez
no sean útiles.

7.6 Mensaje
Es la petición de un objeto a otro para solicitar la ejecución de alguno de sus métodos o para obtener el valor
de un atributo público.
Estructuralmente, un mensaje consta de 3 partes:

Curso Programación con Python 45


Centro de Enseñanza Asistida por Computador - CENEAC

• Identidad del receptor: Nombre del objeto que contiene el método a ejecutar.
• Nombre del método a ejecutar: Solo los métodos declarados públicos.
• Lista de Parámetros que recibe el método (cero o más parámetros)
Su sintaxis algorítmica es: <Variable_Objeto>.<Nombre_Método> ( [<Lista de Parámetros> ]
);
Cuando el objeto receptor recibe el mensaje, comienza la ejecución del algoritmo contenido dentro del método
invocado, recibiendo y/o devolviendo los valores de los parámetros correspondientes, si los tiene ya que son
opcionales: ( [ ] )

Ejemplo: Definición de la Clase Rectángulo

Clase Rectángulo;
// Atributos Rectángulo
Privado: Privado Real Largo
Real Largo, Ancho; Privado Real Ancho
Constructor Acción Rectángulo(lar, anc)
Público Función Área: Real
// Métodos
Público Función Perímetro: Real
// método constructor
Acción Rectángulo(Real lar, anc);
largo = lar;
ancho = anc;
FAcción;

Público Función Área: Real


// Retorna el área o superficie ocupada por el rectángulo
retornar(largo * ancho);
FFunción Área;

Público Función Perímetro: Real


// Retorna el perímetro del rectángulo
retornar(2 * (largo + ancho));
FFunción Perímetro;

FClase Rectángulo;

// Uso de la clase rectángulo


Acción Principal
Rectángulo R; // se declara una variable de tipo objeto Rectángulo, a la cual llamaremos R
Real L, A; // se declaran las variables reales L y A para largo y ancho del rectángulo
Escribir(“Suministre a continuación los valores para el largo y el ancho”);
Leer(L); Leer(A);

Curso Programación con Python 46


Centro de Enseñanza Asistida por Computador - CENEAC

R.Rectángulo(L, A);
Escribir(“Resultados de los cálculos:”);
Escribir(“Área: ”+ R.Área + “ - Perímetro ” + R.Perímetro);
FAcción Principal;

Programación Orientada a Objetos en Python


Fuente: http://docs.python.org.ar/tutorial/3/classes.html
Comparado con otros lenguajes de programación, el mecanismo de clases de Python agrega clases
con un mínimo de nuevos elementos de sintaxis y semántica. Es una mezcla de los mecanismos de
clases encontrados en C++ y Modula-3. Las clases de Python proveen todas las características
normales de la Programación Orientada a Objetos: el mecanismo de la herencia de clases permite
múltiples clases base, una clase derivada puede sobreescribir cualquier método de su(s) clase(s)
base, y un método puede llamar al método de la clase base con el mismo nombre. Los objetos
pueden tener una cantidad arbitraria de datos de cualquier tipo. Igual que con los módulos, las clases
participan de la naturaleza dinámica de Python: se crean en tiempo de ejecución, y pueden
modificarse luego de la creación.
En terminología de C++, normalmente los miembros de las clases en Python (incluyendo los
miembros de datos) son públicos (excepto para las variables privadas), y todas las funciones
miembro son virtuales. Como en Modula-3, no hay atajos para hacer referencia a los miembros del
objeto desde sus métodos: la función método se declara con un primer argumento explícito que
representa al objeto (self), el cual se provee implícitamente por la llamada. Como en Smalltalk, las
clases mismas son objetos. Esto provee una semántica para importar y renombrar. A diferencia de
C++ y Modula-3, los tipos de datos integrados pueden usarse como clases base para que el usuario
las extienda. También, como en C++ pero a diferencia de Modula-3, la mayoría de los operadores
integrados con sintaxis especial (operadores aritméticos, de subíndice, etc.) pueden ser redefinidos
por instancias de la clase.

Ejemplo 1: clase que representa alumnos


# - - - - - - - - - -
# Creado por Yusneyi Carballo Barrera, CENEAC, ver: Jul.2016
# ejemplo 10, Programación Orientada a Objetos, clase Alumno
#
# más información en:
# http://docs.python.org.ar/tutorial/3/classes.html
# http://python-para-impacientes.blogspot.com/2014/02/programacion-orientada-objetos.html
# - - - - - - - - - -

class Alumno:
'Clase para alumnos'
numalumnos = 0
sumanotas = 0

def __init__(self, nombre, nota):


self.nombre = nombre
self.nota = nota

Curso Programación con Python 47


Centro de Enseñanza Asistida por Computador - CENEAC

Alumno.numalumnos += 1
Alumno.sumanotas += nota

def mostrarNombreNota(self):
return(self.nombre, self.nota)

def mostrarNumAlumnos(self):
return(Alumno.numalumnos)

def mostrarSumaNotas(self):
return(Alumno.sumanotas)

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# CUERPO PRINCIPAL del programa
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# creando las instancias u objetos de la clase Alumno


alumno1 = Alumno("María", 8)
alumno2 = Alumno("Carlos", 6)

# consultando los valores de los atributos de la clase


print("Parámetro nombre en el objeto alumno1 es: ", alumno1.nombre) # María
print("Parámetro nota en el objeto alumno1 es: ",alumno1.nota) # 8

# invocando métodos de la clase


print("Nombre y nota del alumno1:",alumno1.mostrarNombreNota())
print("Nombre y nota del alumno2:",alumno2.mostrarNombreNota())

# accediendo a las variables de la clase y a métodos


print("Cantidad de alumnos: ", Alumno.numalumnos)
print("Suma de las notas de los alumnos: ", Alumno.sumanotas)

# -- evita que se cierre la ventana de ejecución


print("\n\n\nPulse cualquier tecla para terminar")
fin = input()

Herencia Simple
Fuente: https://www.codejobs.biz/es/blog/2013/05/13/herencia-simple-y-multiple-en-python
La herencia simple consiste en que una clase hereda únicamente de una superclase o clase padre.
La relación de herencia hace posible utilizar, desde la instancia, los atributos de la clase padre. En
Python, al definir una clase, indicaremos entre paréntesis cuál es la clase de dónde hereda.
En el siguiente ejemplo, se crea una clase padre llamada Figura y luego una clase hija llamada
Rectangulo, de quien hereda una tercera clase llamada Cuadrado:

Curso Programación con Python 48


Centro de Enseñanza Asistida por Computador - CENEAC

# - - - - - - - - - -
# Creado por Yusneyi Carballo Barrera, CENEAC, ver: Jul.2016
# ejemplo Programación Orientada a Objetos, clase Movil y subclases
#
# más información en:
# http://docs.python.org.ar/tutorial/3/classes.html#
# https://www.codejobs.biz/es/blog/2013/05/13/herencia-simple-y-multiple-en-python
# https://pythonr2.wordpress.com/2008/08/26/herencia-en-python/
#

# - - - - - - - - - -
# sección de declaración de clases y sus métodos

class Figura():
""" Superclase o clase padre """
def __init__(self, b, a):
self.base = b
self.altura = a
print("\nEste es el constructor de la figura geométrica en la clase padre")

def metodo(self):
print("\nEjecutando método de clase padre, soy una figura")

def consultarBase(self):
return(self.base)

def consultarAltura(self):
return(self.altura)

class Rectangulo(Figura):
""" Subclase o clase hija de Figura """

def metodoRectangulo(self):
print("\n\nMétodo en la clase hija, soy un rectángulo")

def area(self):
return (self.base * self.altura)

class Cuadrado(Rectangulo):
""" Subclase o clase hija de Rectangulo """

def metodoCuadrado(self):
print("\n\nMétodo en la clase hija de Rectángulo, soy un cuadrado")
# - - - - - - - - - -
# CUERPO PRINCIPAL PROGRAMA, creando instancias e invocando a los métodos de las clases
# - - - - - - - - - -

# a continuación se crea la instancia u objeto r de la clase Rectángulo

Curso Programación con Python 49


Centro de Enseñanza Asistida por Computador - CENEAC

r = Rectangulo(3,2) # como Rectangulo no tiene método constructor se usa el método init


heredado de Figura
r.metodo() # se invoca al metodo heredado de Figura
r.metodoRectangulo() # se invoca al método en la clase Rectángulo

# se consultan los valores de los atributos con métodos de la clase padre y se invoca a un
método de cálculo en la clase hija
print("\nPara un rectángulo con base", r.consultarBase() , "y altura" ,
r.consultarAltura(), "el área es:" , r.area())

c = Cuadrado(2,2) # como Cuadrado no tiene método constructor, y Rectangulo tampoco, se


usa el método init heredado de Figura
c.metodoCuadrado() # se invoca al método en la clase Cuadrado

# se consultan los valores de los atributos con métodos de la clase padre y se invoca a un
método de cálculo en la clase hija
print("\nPara un cuadrado con base y altura", c.consultarBase(), "el área es:" , c.area())

# -- evita que se cierre la ventana de ejecución


print("\n\n\nPulse cualquier tecla para terminar")
fin = input()

Herencia Múltiple
Python soporta la herencia múltiple, del mismo modo que C++. Otros lenguajes cómo Java y Ruby no
la soportan, pero implementan otras técnicas para conseguir la misma funcionalidad. En el caso de
Java se cuenta con las clases abstractas y las interfaces, y en Ruby se tienen los mixins.
La herencia múltiple es similar en comportamiento a la herencia simple (o de una sola superclase),
con la diferencia que una clase hija tiene una o más clases padre. En Python, basta con separar con
comas los nombres de las clases en la definición de la misma. En el siguiente ejemplo la clase Móvil
tiene una herencia múltiple, ya que hereda de las clases Teléfono, Cámara y Reproductor, ya que en
un dispositivo móvil hay incorporadas funcionalidades o herramientas de estos tres aparatos:

# - - - - - - - - - -
# Creado por Yusneyi Carballo Barrera, CENEAC, ver: Jul.2016
# ejemplo 10-b, Programación Orientada a Objetos, clase Teléfono y subclases
#
# más información en:
# http://docs.python.org.ar/tutorial/3/classes.html
# http://python-para-impacientes.blogspot.com/2015/06/programacion-orientada-objetos-
ii.html
class Telefono:
'Clase teléfono. SOLO SE PUEDE AGREGAR UNA (1) LÍNEA DE DOCUMENTACIÓN EN LA CLASE'
def __init__(self):
pass
def telefonear(self):

Curso Programación con Python 50


Centro de Enseñanza Asistida por Computador - CENEAC

print("llamando")
def colgar(self):
print("colgando")

class Camara:
'Clase camara fotográfica'
def __init__(self):
pass
def fotografiar(self):
print('fotografiando')

class Reproductor:
'Clase Reproductor Mp3'
def __init__(self):
pass
def reproducirmp3(self):
print('reproduciendo mp3')

def reproducirvideo(self):
print('reproduciendo video')

# Clase que tiene herencia múltiple con las clases Telefono, Camara, Reproductor'
class Movil(Telefono, Camara, Reproductor):
def __del__(self):
print('Móvil apagado')

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# CUERPO PRINCIPAL del programa
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

movil1 = Movil() # se crea un objeto o instancia de la clase Movil, que tiene herencia
múltiple
print(dir(movil1)) # lista todos los métodos a los cuales puede acceder el objeto movil1
movil1.reproducirmp3() # la instancia movil1 invoca un método de la clase Reproductor
movil1.telefonear() # la instancia movil1 invoca un método de la clase Teléfono
movil1.fotografiar() # la instancia movil1 invoca un método de la clase Cámara
del movil1 # se elimina la instancia de la clase Movil

# -- evita que se cierre la ventana de ejecución


print("\n\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python 51


Centro de Enseñanza Asistida por Computador - CENEAC

Programación con

Entorno de Programación
Ejemplos y Ejercicios

Curso Programación con Python e52


Centro de Enseñanza Asistida por Computador - CENEAC

II. PROGRAMACIÓN CON PYTHON


INSTALACIÓN Y CONFIGURACIÓN DEL ENTORNO DE PROGRAMACIÓN (IDE)

ENTORNOS DE PROGRAMACIÓN (IDE’S) PARA PYTHON


1. Ejemplos de Entornos de Desarrollo o IDE’s para Python:
 NotePad++, https://notepad-plus-plus.org/download/
 JetBrains PyCharm Community Editor, https://download.jetbrains.com/python/pycharm-community-
2016.1.4.exe y descargar intérprete para lenguaje Python, https://www.python.org/downloads/
 NetBeans, https://netbeans.org/features/index.html
 Sublime Text 3, https://www.sublimetext.com/3

2. Agregar complemento a NetBeans:


 Activación del plugin en NetBeans: Tools >> Plugins >> Available Plugins >> Python >> clic en Install
 Descargar complemento para distintas versiones desde el sitio web de Netbeans:
http://plugins.netbeans.org/PluginPortal/

3. Agregar paquetes en Sublime Text 3:


 Instalación de la opción “Package Control”, https://packagecontrol.io/installation
 Descargar el el IDE para Python Anaconda e instalar el paquete Anaconda en Sublime Text:
http://damnwidget.github.io/anaconda/
 Instalar el paquete Sublime REPL para mostrar la consola para Python:
https://www.youtube.com/watch?v=JyL6dLynx68

4. Tutoriales:
 Python Software Foundation, tutorial según versión, http://docs.python.org.ar/tutorial/3/index.html
 Comunidad Python Argentina, recursos en español: http://www.python.org.ar/
 Traducción al español del Tutotial de Python de Guido van Rossum:
http://docs.python.org.ar/tutorial/pdfs/TutorialPython3.pdf
 Python Software Foundation, Grupo Python Argentina, tutorial en español:
http://docs.python.org.ar/tutorial/3/index.html
 Carlos Pica, CODEHERO, tutorial Python desde cero: http://codehero.co/series/python-desde-cero.html

Curso Programación con Python e53


Centro de Enseñanza Asistida por Computador - CENEAC

III. EJEMPLOS Y EJERCICIOS PARA PROGRAMAR

LISTA DE EJEMPLOS RESUELTOS:


1. Solicitar el nombre del usuario y mostrar un saludo personalizado
2. Solicitar el nombre y año de nacimiento de una persona e indicar su edad aproximada
3. Sea un número entero positivo dado por el usuario, determinar si es par o impar
4. Usar varias funciones incorporadas a Python (built-in functions) para realizar cálculos con un número entero
n suministrado por teclado:
 Si el número es negativo: calcular su valor absoluto y calcular su cubo o n3
 Si el número es positivo: mostrar su inverso, calcular su raíz cuadrada (redondeando el resultado a 2
dígitos) e indicar la cantidad de dígitos de n
 Si el número es cero, solicitar una frase al usuario, mostrar la cantidad de caracteres que contiene y la
frase en orden inverso de sus caracteres
5. Solicitar una frase al usuario, contar sus vocales, consonantes y espacios, además de realizar sustituciones
varias, usando variables tipo string, tipo lista y los ciclos for y while
6. Dado cinco números enteros positivos, almacénelos en un arreglo y luego calcule el factorial de n1, e ^ n2
(en2), el coseno de n3, la raíz cuadrada de n4 y la suma de los valores * P. Luego ordene y muestre los
valores del arreglo ascendente y descendentemente, además de indicar es el mayor valor y el menor valor.
Utilice funciones de la Librería Math para Python.
7. Dado un número entero n, calcular la Serie de Fibonacci, Fib(n), la suma de los valores de los dígitos de n, la
lista de sus divisores y si es un número primo, utilizando llamadas a funciones con pase de parámetro.
8. Procese un conjunto de precios de unos productos almacenados en un archivo, indicando: cantidad de
productos almacenados, mayor precio y menor precio. Crear un archivo de salida con los precios ordenados
descendentemente.
9. Defina una agenda de contactos con números de teléfono. Solicite al usuario el nombre de una persona y
verifique si se encuentra en la agenda.
10. Programe una clase en Python que implemente las principales funciones para el manejo de fracciones de
números enteros (fracción = num / den).
11.

Curso Programación con Python e54


Centro de Enseñanza Asistida por Computador - CENEAC

LISTA DE EJERCICIOS PARA CONSOLIDAR:


PARTE 1. Sentencias básicas, uso de métodos de la Biblioteca Estándar y Estructuras
de Control Condicional
1. Intercambiar el contenido de dos variables de tipo caracter.
2. Dado un número entero, suministrado por teclado, indicar si es positivo, negativo o nulo (0). Si es positivo
calcular su raíz cuadrada, si es negativo calcular su módulo (usar funciones de la librería Math)
3. Indicar el mínimo valor entre 3 números enteros, usando condicional simple (Si o if).
4. Dado un número entero de 3 dígitos significativos, es decir en el rango [100 … 999], indicar la suma de los
dígitos en posición par y la suma de los dígitos en posición impar.
5. Solicitar un valor entero positivo correspondiente a una cantidad en segundos y calcular a que cantidad de
horas, minutos y segundos corresponde, mostrar el resultado en el formato hh:mm:ss

PARTE 2. Estructuras de Control Iterativo o Ciclos


6. Mostrar la tabla de multiplicar de un número N, dado por el usuario.
7. Indicar para una secuencia de notas definitivas correspondientes a los alumnos de una sección, cuántos
alumnos aprobaron, cuántos reprobaron, cual es la nota máxima y cuál es la nota mínima. El usuario le
indicará previamente cuántos alumnos hay en la sección. Utilice un ciclo Para y tome en cuenta que se
aprueba con una nota ≥ 9,5 puntos.
8. Dada una secuencia de valores enteros que se corresponde con edades de un grupo de personas, calcular el
promedio general. La secuencia termina cuando se lee el valor 0.

PARTE 3. Modularización: Procedimientos, Pase de Parámetros, Paquetes


9. Llamar a un procedimiento que calcule el Impuesto al Valor Agregado (IVA) del precio neto de un producto.
Tanto el precio neto como el porcentaje de IVA se pasa por parámetro al procedimiento
calcularImpuesto(precio, imp)
10. Solicite una secuencia de valores de tipo entero al usuario y llame a funciones a las cuales se les pasa por
parámetro cada valor num leído con el fin de:
10.1. Indicar la categoría del número: si es positivo, negativo o nulo (0)
10.2. Calcular la suma de los dígitos de num
10.3. Mostrar todos los divisores del valor num, retornándolos en un mensaje almacenado en un string
10.4. Si num es positivo, indicar si es un número primo , llamando a función esPrimo(num)
10.5. Si num es negativo, calcular su módulo o valor absoluto y luego calcular su factorial, usando la
función math.factorial(num)
Considere en su programa:

Curso Programación con Python e55


Centro de Enseñanza Asistida por Computador - CENEAC

 La secuencia termina cuando el usuario suministra el valor 0


 Los resultados se deben retornar al bloque principal, en donde serán mostrados al usuario
11. Dada una secuencia de valores, correspondiente a un valor real de una temperatura, la escala en que está
medida y la escala a la cual quiere transformar, llamar a acciones o funciones que realicen transformaciones
a la escalas:
Fahrenheit (°F) - Celcius (°C) - Kelvin (°K) - Rankine (°Ra) - Réaumur (°Re)
Considere en su programa: la secuencia termina cuando el usuario indica que no hay más temperaturas para
procesar; las principales transformaciones son:

De Fahrenheit a Celsius De Celsius a Kelvin De Celsius a Rankine De Réaumur a Celsius

Más información en:


http://www.elosiodelosantos.com/sergiman/div/formulas_conversion_de_temperaturas.htm
http://www.taringa.net/post/apuntes-y-monografias/4917728/Conversiones-de-Temperatura.html

PARTE 4. Estructuras de Datos


IMPORTANTE:
 Utilice un tamaño para la cantidad de filas (n) o columnas (m) pequeño ( ≤ 5 ) de manera que no tenga
que transcribir tantos datos de entrada, o genérelos en forma aleatoria
 Recuerde que en lenguajes como Python, Java, Pascal, PHP y C++, los arreglos inician en la posición 0, no
en la posición 1

Arreglos
12. Dado un arreglo datos de enteros con N elementos de tipo real suministrados por el usuario, se quiere:
12.1. Solicitar al usuario cada uno de los N valores del arreglo.
12.2. Calcular la suma de los valores del arreglo.
12.3. Calcular la media de los valores del arreglo.
12.4. Calcular la cantidad de números impares y números pares.
12.5. Calcular cuántos números son mayores que la media y cuántos son menores.
13. Leer una secuencia de valores que representan estaturas, almacenarlas en un arreglo o lista llamada temp y
calcular: estatura máxima, estatura mínima, promedio general de estatura, cuántas estaturas están por
encima de 1,70 mts. Se suministran estaturas hasta que el usuario indica que no hay más datos para
procesar (utilizar una bandera en la condición de parada o variable centinela).
14. Declare una matriz llamada ventas que guardará valores reales, con 2 filas y n columnas. Las filas
corresponden montos en Bs vendidos de gasolina de 91 octanos (fila 1) y 95 octanos (fila 2). Las n columnas
corresponden a la cantidad de estaciones de servicio. Se recomienda utilizar un n ≤ 4.
Se desea que elabore un programa en donde se calcule e informe:
14.1. El total de ventas y el promedio de ventas para cada octanaje.

Curso Programación con Python e56


Centro de Enseñanza Asistida por Computador - CENEAC

14.2. La estación o estaciones en donde se vendió el máximo de gasolina de 91 octanos.


14.3. Indicar cual octanaje se vendió más.

Archivos
15. Modifique el ejemplo 6, a fin de procesar un archivo llamado entrada.txt con edades de personas (entre 0 y
120 años) e indicar:
15.1. Cuántas son menores de edad (≤18 años)
15.2. Cuántas son candidatas a jubilación (≥60 años)
15.3. Cuántas personas están en un rango de edad Li .. Ls indicado por el usuario
16. Modifique el ejemplo 6, a fin de procesar un archivo llamado notas (entre 0 y 20 puntos) indicar:
16.1. Cantidad de reprobados (nota < 9,5 puntos) y
16.2. Cantidad de aprobados (nota ≥ 9,5 puntos)
16.3. Promedio general de notas, promedio de notas de reprobados y promedio de notas de aprobados
16.4. Cantidad de alumnos
17. Utilice los ejemplos 6 y 7 para procesar un archivo llamado temperaturas.txt e indicar cuántas son mayores a
un valor T dado por el usuario. En un archivo llamado salida.txt se deben almacenar en tres líneas los
siguientes resultados:
17.1. “Cantidad de temperaturas procesadas: ” + contT
17.2. “Máximo valor de temperatura: ” + maxT + “ °C”
17.3. “Mínimo valor de temperatura: ” + minT + “ °C”
17.4. “Cantidad de temperaturas mayores a ” + T + “ °C es: ” + contT2

Curso Programación con Python e57


Centro de Enseñanza Asistida por Computador - CENEAC

IV. EJEMPLOS DE PROGRAMAS EN PYTHON

Preliminares:
1. Iniciar el IDE o aplicación a utilizar para programar con Python
2. Crear en Mis Documentos una carpeta con el nombre cursoPython
3. Si está trabajando en NetBeans, Sublime Text o PyCharm, puede crear un proyecto con el nombre
pryPython que apunte a la carpeta cursoPython, si trabajas con NotePad++ simplemente guardaremos lor
archivos en la carpeta cursoPython
4. Crear un archivo nuevo y guardarlo en la carpeta o en el proyecto del curso, con la extensión .py
5. Guarde constantemente los avances realizados en sus programas (Archivo >> Guardar o Control + S)

Ej. 1. Solicitar nombre y mostrar saludo personalizado.


{ nombre del archivo: ej1.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC-UCV, ver: Jun.2016
# ejemplo 1, estructura básica de un programa en Python, comentarios, lectura y escritura
#----------

print("¿Cúal es su nombre por favor?")


nombre = input()
# print permite mostrar un mensaje en consola
# input permite leer un dato dado por el usuario

print("Me alegro de conocerte ", nombre)

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e58


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 2. Solicitar el nombre y año de nacimiento e indicar la edad aproximada


{ nombre del archivo: ej2.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC-UCV, ver: Jun.2016
# ejemplo2, operaciones matemáticas y conversión explícita de tipos de datos
#----------

print("Indique su nombre:")
nombre = input()
print("Indique el año de su nacimiento:")
agno = input() # toda valor leído con input es una cadena o string

# para poder calcular la edad se requiere una conversión explícita de datos

edad = 2016 - int(agno) #conversión de la variable agno a entero, para realizar la operación
matemática
print(nombre, "tiene aproximadamente", edad, "años")

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Ej. 3. Sea un número entero positivo dado por el usuario, determinar si es par o impar
{ nombre del archivo: ej3.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC-UCV, ver: Jun.2016
# ejemplo 3, uso de condicionales y división entera (%, mod o resto)
#----------

print("Suministre un número entero: ")


n = int(input()) # realizamos la lectura del valor como un string y conversión explícita del dato a
entero
if n%2 == 0: # calculamos el resto o mod de la división entre 2 utilizando el operador %
print(n, " es par")
else:
print(n, " es impar")

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e59


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 4. Uso de funciones incorporadas según el valor de un número entero


{ nombre del archivo: ej4.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC, ver:Jun.2016
# ejemplo 4, uso de funciones incorporadas (built-in functions) e importación de clases
#----------
print("Suministre un número entero: ")
n = int(input())
if n<0: # verifica si el número es negativo
print(n, " es negativo")
aux=abs(n)
print("\nEl valor absoluto de " , n , "es: " , aux)
aux=pow(n, 3) # pow calcula la potencia de n (n^a)
print("El cubo de " , n , " es: " , aux)

elif n>0: # equivalente abreviado a colocar un else y en la siguiente línea un if (n>0)


print(n, " es positivo")
aux = str(n)
print("\nEl inverso de " , n , "es: " , aux[::-1] ) # cuando a una lista se aplica ::-1 se invierte
aux2=pow(n, 0.5) # la raíz b de un número n es equivalente a calcular n ^ (1/b)
print("La raíz cuadrada de " , n ," es: " , aux2)
print("La raíz cuadrada de " , n ," redondeada a 2 dígitos es: ", round(aux2, 2) )
print("La cantidad de dígitos de n es: ", len(aux) )
else:
print(n, " es cero")
print("\nIndique una frase")
f = input()
long = len(f)
print("La frase <<" , f ,">> tiene ", long , " caracteres y su inverso es: \n")
print(f[::-1])

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e60


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 5. Solicitar una frase al usuario, contar sus vocales, consonantes y espacios,
además de realizar sustituciones varias
{ nombre del archivo: ej5.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC, ver:Jun.2016
# ejemplo 5, mostrar los caracteres de una frase, clasificar sus caracteres y realizar sustituciones
# se utiliza una variables tipo string y lista (cadenas de caracteres)
# y las estructuras de control condicional if y los ciclos for y while
#----------

print("Suministre una frase que incluya varias palabras, espacios y acentos")


# por ejemplo: la casa está húmeda y entristece el corazón

frase = input()
contV = contC = contE = 0
vocales = "aeiouAEIOUáéíóúÁÉÍÓÚ"
numeros = ['1', '2', '3', '4', '5']

for c in frase: # recorre la cadena frase, consultando cada elemento o caracter c


if c in vocales:
contV += 1
elif c == ' ':
contE += 1
else:
contC += 1

print("La cantidad de caracteres de la frase es " , len(frase))


print("Tiene " , contV , " vocales, " , contC, " consonantes y ", contE, " espacios")
# sustitución de elementos en la frase utilizando concatenación de cadenas
# las vocales se sustituyen por su correspondiente en número, los espacios por _
# y las consonantes se sustituyen por su equivalente en mayúscula

i=cont=0
frase2=""

while i < len(frase):


c = frase[i]
if c == ' ':
frase2 += "_" #se concatena en la nueva cadena el caracter _, sustituyendo el espacio
cont += 1
elif c in vocales:
cont += 1
if c in "aAáÁ":
frase2 += numeros[0] #se sustituye la vocal a por el 1
elif c in "eEéÉ":
frase2 += numeros[1] #se sustituye la vocal e por el 2
elif c in "iIíÍ":
frase2 += numeros[2] #se sustituye la vocal i por el 3
elif c in "oOóÓ":

Curso Programación con Python e61


Centro de Enseñanza Asistida por Computador - CENEAC

frase2 += numeros[3] #se sustituye la vocal o por el 4


else:
frase2 += numeros[4] #se sustituye la vocal u por el 5
else:
frase2 += c.upper() #transforma a mayúscula
#.lower() transforma a minúscula, .swapcase() de mayúscula a minúsculas o viceversa
# más información en:
# http://librosweb.es/libro/python/capitulo_6/metodos_de_formato.html
# http://www.openbookproject.net/thinkcs/archive/python/spanish2e/cap07.html

i += 1 # se incrementa la variable índice y de parada de while

print("Luego de la sustitución la frase codificada es " , frase2, " y se hicieron " , cont , "
sustituciones")

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e62


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 6. Dado cinco números enteros positivos, almacenarlos en un arreglo, realizar


cálculos utilizando funciones de la librería Math y ordenarlos en el arreglo
{ nombre del archivo: ej6.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC, ver:Jun.2016
# ejemplo 6, uso de listas y de la librería Math, con funciones matemáticas definidas en el lenguaje
C
# más información en: https://docs.python.org/3/library/math.html
# https://docs.python.org/3.5/library/math.html
#----------

datos=[] # declaramos la variable datos de tipo arreglo y vacío (=[])

# se solicitan los datos para inicializar el arreglo


print("Suministre 5 valores enteros sobre los cuales se realizarán operaciones matemáticas")
for i in range(5): #este ciclo solicita 5 valores, con i de 0 a 4
print("valor ", i+1 , ": ", end='') # end='' evita el salto de línea
datos.append(int(input())) # se concatena cada valor al arreglo datos, transformándolo a entero

# se listan los valores del arreglo


print("\n Los valores suministrador fueron: ")
for i in range(5):
print("datos[", i , "]: ", str(datos[i]))

# uso de funciones de la Librería Standard Math


# el coseno de n3, la raíz cuadrada de n4 y la suma de cinco valores * Pi,
# finalmente muestre los datos ordenados en forma ascendente y descendente,
# así como menor y mayor valor.

# importando la librería math


#!/usr/bin/python
import math # equivalente a: from math import *
# también se puede importar una función específica, p.e., from math import sqrt

print("\n") # salto de línea


print("\nEl factorial de ", str(datos[0]), " es:", math.factorial(datos[0]), end='')
print("\nEl exponencial de ", str(datos[1]), " es:", math.exp(datos[1]), end='')
print("\nEl coseno de ", str(datos[2]), " es:", math.cos(datos[2]), end='')
print("\nLa raíz cuadradad de ", str(datos[3]), " es:", math.sqrt(datos[3]), end='')

suma = 0
n = len(datos) # cuenta los valores de la lista o arreglo datos
for i in range(n): # equivalente a recorrer de 1 a 5 o 5 veces
suma += datos[i]
print("\nLa suma de los " , n , " valores del arreglo es:", suma, end='')
print("\nSuma * Pi es:", suma * math.pi, end='') # la constante Pi debe escribirse en minúscula:
math.pi
# ordenando ascendentemente los valores de la lista

Curso Programación con Python e63


Centro de Enseñanza Asistida por Computador - CENEAC

datos_asc = datos[:] # se copian los elementos de la lista datos, es equivalente a usar lista.copy()
datos_desc = datos[:]
datos_asc.sort() # ordena la lista ascendentemente
datos_desc.sort(reverse=True) #ordena la lista descendentemente o en orden reverso
print("\n") # salto de línea
print("Los datos ordenados ascendente y descendentemente son: ")

for i in range(n):
print(datos_asc[i], " - ", datos_desc[i])

print("\n") # salto de línea


print("Menor valor: " , datos_asc[0]) # menor valor es el primero
print("Mayor valor: " , datos_asc[n-1]) # mayor valor es el último

# más información sobre funciones en:


# https://docs.python.org/3/library/index.html
# http://jarroba.com/list-python-ejemplos/

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e64


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 7. Definición y uso de funciones y de parámetros, cálculo de la serie de Fibonacci


{ nombre del archivo: ej7.py }
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC, ver: Jun.2016
# ejemplo 7, definición y uso de funciones y parámetros
#
# más información en:
# http://docs.python.org.ar/tutorial/3/
# http://docs.python.org.ar/tutorial/3/controlflow.html#definiendo-funciones
#----------

#----------
# sección de declaración formal de las funciones y sus parámetros

def fib(n):
""" Muestra la serie de Fibonacci hasta el valor n."""
# la cadena anterior se llama docstring y es conveniente que la usemos para documentar
# funciones o métodos. Debido a su formato 3 comillas al inicio, al final y . en la última palabra,
el
# docstring es reconocido automáticamente por editores como documentación de los
procedimientos

# el parámetro formal n en la función fib recibe el valor del parámetro actual num que
# se usó en la llamada a la función
# F(0)=0; F(1)=1; F(n) = F(n-1) + F(n-2), n>1, por ejemplo, F(5) = 0,1,1,2,3, Total serie F(5)=12

a, b = 0, 1 # equivalente a inicializar: a = 0, b = 1
while a < n:
print (a, ' ', end='') # end='' evita el salto de línea
a, b = b, a+b # equivalente a usar: a = b, b = a+b

print()
print("la suma de la serie de Fibonacci(", n, ") es:", b)

def suma_cuenta_digitos(n):
""" Cuenta y suma los valores de los dígitos de n."""
# esta función retornará 2 resultados (SÍ DOS!!, a diferencia de otros lenguajes), en las variables
cont y sum

sum = cont = 0
while n > 0:
cont += 1 # se incrementa el contador de dígitos
d = n % 10 # se calcula el dígito de la unidad o de la derecha de n
sum += d # se actualiza el acumulador o suma de los dígitos
n = n // 10 # se calcula el div de n, así se actualiza eliminándole el dígito de la unidad
hasta llegar a 0

Curso Programación con Python e65


Centro de Enseñanza Asistida por Computador - CENEAC

return cont, sum #Python permite retornar más de un valor en sus funciones, en este caso una
tupla

def es_primo(n):
""" Retorna verdadero si el número solo tiene 1 o 2 divisores (es primo), falso si tiene más de
2."""

if (n == 1 or n == 2):
return True

for i in range(2,n):
if n % i == 0:
return False
return True

def divisores(n):
""" Retorna una cadena con los divisores del número n."""

divis = ""
for i in range(1,n):
if n % i == 0:
divis += str(i) + ", " # construye la cadena con la secuencia de divisores,
# separándolos con una coma y un espacio

divis = divis.strip(', ') # elimina la última como y espacio de la secuencia de divisores

return divis

#----------
# cuerpo principal del programa con las invocaciones a librerías y a las funciones
#!/usr/bin/python
import math # equivalente a: from math import *

print("Suministre un valor entero al cual se calculará el Fibonacci, sus divisores y la suma de sus
dígitos")
num = int(input())

# por conveniencia se calcula el valor absoluto del número


num = abs(num) #equivalente a math.abs(num)

# invocación o llamada a las funciones


print() # deja una línea en blanco, equivalente a usar \n
print("Serie de Fibonacci para ", num, "es:")
fib(num) # invocación a una función sin valor de retorno (es decir una acción) que mostrará
# la serie de fibonacci del parámetro actual num

c, s = suma_cuenta_digitos(num) # invocación a la función que suma y cuenta los dígitos de num,


se reciben los 2 resultados

Curso Programación con Python e66


Centro de Enseñanza Asistida por Computador - CENEAC

# Python permite que una función retorne más de un valor, utilizando para ello tuplas o listas de
resultados
print("\n -- La suma de sus dígitos es: ", s , " y tiene:", c, "dígitos")
es = es_primo(num)

if (es): # invocación a la función que verifica si en número es primo


print("\n -- El número", num , " es primo")
else:
print("\n -- El número", num , " no es primo, sus divisores son: ", divisores(num))
# divisores es una función que retorna en una cadena (string) todos los divisores de num

# --------------- VER -------------------


# http://docs.python.org.ar/tutorial/3/controlflow.html#mas-sobre-definicion-de-funciones
# http://codehero.co/python-desde-cero-funciones/

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e67


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 8. Procesar datos almacenados en un archivo


{ nombre del archivo: ej8.py }
Ejercicio:
En el directorio D, crear una nueva carpeta llamada datos. Crear en el Block de Notas un archivo nuevo,
guardarlo en la carpeta datos con el nombre datosProductos.txt y la codificación ANSI, y agregarle información
de un grupo de productos: código, nombre y precio en Bs, con datos separados por comas, un producto por
línea, por ejemplo:
J-1021, Tijeras jardinería, 1580
P-1622, Brocha 2cm, 350
P-1623, Juego brochas madera, 3600
E-205, Cable de 2mm, 80.5
E-203, Cable de 5mm, 91
C-1589, Taladro Bosch 5100, 18300
C-0189, Juego de mechas para taladro, 7500
C-1586, Taladro InElectricM, 18300

Procesar los datos del archivo para indicar la cantidad de productos almacenados, el producto(s) de mayor
precio y el producto(s) de menor precio.
Crear un archivo de salida llamado listaProductos.csv (archivo separado por comas) también en la carpeta
datos, con los códigos, nombres y precios de los productos que se encuentran en un rango de precios indicado
por el usuario. Listar los datos del archivo listaProductos.csv ordenados por nombre de producto.

#----------
# Creado por Yusneyi Carballo Barrera, CENEAC, ver: Jul.2016
# ejemplo 8, acceso y procesamiento de datos en archivos
# más información en:
#
http://librosweb.es/libro/algoritmos_python/capitulo_11/ejemplo_de_procesamiento_de_archivos.html
# https://amatellanes.wordpress.com/2013/05/06/lectura-y-escritura-de-ficheros-en-python/
# https://www.python.org/dev/peps/pep-0263/
# http://www.forosdelweb.com/f130/problema-para-ordenar-listas-python-1025961/
#----------

#---------- ---------- ---------- ----------


# sección de declaración formal de las funciones y sus parámetros
#---------- ---------- ---------- ----------

def listarProductos(ruta, archivo, modo):


""" recorre el archivo mostrando sus datos."""

# se abre el archivo
f = open(ruta + '\\' + archivo, modo)

# se recorre y muestra cada línea del archivo


i=0
print("Los datos almacenados en el archivo" , archivo, "son: \n")

Curso Programación con Python e68


Centro de Enseñanza Asistida por Computador - CENEAC

for linea in f:
i += 1
linea = linea.rstrip("\\n") # se elimina el caracter de fin de línea, en cada línea leída del
archivo
print (" %5d: %s" % (i, linea)) # con los comandos %5d y %s se da formato a cada línea
mostrada

print("\n\n---****---- El archivo contenía" , i , "productos. ---****---- ")

# finalmente cerramos el archivo


f.close()

# ---::: fin de listarProductos

def procesarProductos(ruta, archivo, modo):


""" recorre todas las líneas del archivo, procesando sus datos."""

# se abre el archivo
f = open(ruta + '\\' + archivo, modo)

# se define una lista vacía


l = [] # se define para separar en una lista cada dato del producto
# l[0]: código, l[1]: nombre del producto, l[2]: precio
primero = True
mayores = menores = "" # almacenarán los nombres de los productos con mayor y menor
precio

next = f.readline() # se lee el primer registro o primera línea del archivo

# mientras no se llegue al fin de archivo, se lee cada línea


while next != "":
l = next.split(',') # se separan los datos de cada línea

pActual = float(l[2])
if primero: #inicializando ambas variables con rl precio del primer producto
mayorP = pActual
menorP = pActual
primero = False

if (mayorP < pActual):


mayorP = pActual # se actualiza la variable mayor
mayores = l[1] # se inicia una nueva lista de nombres de productos con mayor
precio
elif (mayorP == pActual):
mayores += ', ' + l[1] #se agrega a la lista de los de mayor precio el nombre del
producto

if (menorP > pActual):


menorP = pActual # se actualiza la variable menor

Curso Programación con Python e69


Centro de Enseñanza Asistida por Computador - CENEAC

menores = l[1] # se inicia una nueva lista de nombres de productos con menor
precio
elif (menorP == pActual):
menores += ', ' + l[1] #se agrega a la lista de los de mayor precio el nombre del
producto
# avanzamos leyendo la siguiente línea
next = f.readline()

# al terminar el procesamiento se cierra el archivo


f.close()

# se retornan los resultados


return mayorP, menorP, mayores, menores

# ---::: fin de procesarProductos

def buscarProductos(ruta, archivo, modo):


""" busca los datos que están en un rango de valores indicado por el usuario."""

# se abre el archivo de entrada


f = open(ruta + '\\' + archivo, modo)

# se define una lista vacía


l = [] # se define para separar en una lista cada dato del producto
# l[0]: código, l[1]: nombre del producto, l[2]: precio
next = f.readline() # se lee el primer registro o primera línea del archivo

# se colicita el rango de valores para la búsqueda


print("\n- Indique el rango de precios para la consulta")
print("\n- ¿Menor precio? ", end='')
menorP = float(input())
print("\n- ¿Mayor precio? ", end='')
mayorP = float(input())

#se abre el archivo de salida, con modo de escritura, agregando al final


fout = open(ruta + '\\' +'listaProductos.csv', 'w')
print ('Listado de productos en el rango de precios Bs.' , str(menorP) , ' y Bs. ' , str(mayorP) ,
'\n\n')

i = cont = 0 # se define un contador

# mientras no se llegue al fin de archivo, se lee cada línea


while next != "":
l = next.split(',') # se separan los datos de cada línea

# se agregan encabezados para el archivo


if i == 0:
fout.write('CODIGO,NOMBRE,PRECIO\n')

Curso Programación con Python e70


Centro de Enseñanza Asistida por Computador - CENEAC

i=1

pActual = float(l[2])
if (pActual >= menorP and pActual <= mayorP): # si el precio está en el rango se
selecciona
cont += 1
fout.write(l[0] + ',' + l[1] + ',' + str(pActual) + '\n')
#fout.write(next)

# avanzamos leyendo la siguiente linea


next = f.readline()

# verificamos si no se encontró ningún producto en el rango


if cont == 0:
fout.write('No se encontraron productos en el rango indicado.')

# luego de procesar los datos del archivo de entrada, cerramos los archivos
fout.close()
f.close()

return cont
# ---::: fin de buscarProductos

def listarProductosOrdenados(archivo):
""" procesa los datos de un archivo de tipo csv."""

# módulos especiales para procesar archivos de datos separados por coma


import csv, operator

# abrimos el archivo para mostrar los datos en el orden original


print("\n\n Artículos en el rango de precios:")
with open(archivo) as csvarchivo:
entrada = csv.DictReader(csvarchivo)
for reg in entrada:
print(reg['CODIGO'], reg['NOMBRE'], reg['PRECIO'])
# luego de procesar sus datos, cerramos el archivo
csvarchivo.close()

# ahora abrimos el archivo para mostrar los datos ordenados por el campo NOMBRE
csvarchivo = open(archivo)
entrada = csv.DictReader(csvarchivo)
listadicc = list(entrada) # Obtener lista de diccionarios
listadiccord = sorted(listadicc, key=operator.itemgetter(1))
# si se quieren en orden descendente usar:
# listadiccord = sorted(listadicc, key=operator.itemgetter("NOMBRE"), reverse=True)
print("\n\n Artículos ordenados por Nombre descendentemente:")
for registro in listadiccord:
print(registro)
# luego de procesar sus datos, cerramos el archivo
csvarchivo.close()

Curso Programación con Python e71


Centro de Enseñanza Asistida por Computador - CENEAC

# ---::: fin de listarProductosOrdenados


#---------- ---------- ----------
# CUERPO PRINCIPAL del programa
#---------- ---------- ----------
#!/usr/bin/python
# -*- coding: ascii -*- # indica la codificación para los datos del archivo

# se indica la ruta, nombre y modo para abrir el archivo (r: lectura, w: escritura, a: agregar)
ruta = 'D:\datos'
archivo = 'datosProductos.txt'
modo = 'r'

# ----:::----:::----:::----:::----:::----:::----:::
# se listan los datos del archivo
listarProductos(ruta, archivo, modo)

# ----:::----:::----:::----:::----:::----:::----:::
# se procesan los datos del archivo
mayorP, menorP, mayores, menores = procesarProductos(ruta, archivo, modo)
print("\n\n")
print("- Menor precio Bs.: ", str(menorP))
print("\n- Productos con menor precio: ", menores)
print("\n\n")
print("- Mayor precio Bs.: ", str(mayorP))
print("\n- Productos con meyor precio: ", mayores)

# ----:::----:::----:::----:::----:::----:::----:::
# se buscan y muestran los productos que están en un rango de precios indicado por el usuario
print("\n\n")
cont = buscarProductos(ruta, archivo, modo)
print("\n\n---****---- Cantidad de productos en el rango de precios" , cont ," ---****---- ")

if cont > 0:
# ----:::----:::----:::----:::----:::----:::----:::
# se ordenan y listan los datos del archivo de salida
print("\n\n")
archivo = 'listaProductos.csv' # 'mi_archivo.txt' # se indica el nombre del archivo de salida
listarProductosOrdenados(ruta + '\\' + archivo)

# -- evita que se cierre la ventana de ejecución


print("\n\nPulse cualquier tecla para terminar")
fin = input()

Ej. 9. Procesar datos almacenados en un archivo


{ nombre del archivo: ej9.py }

Curso Programación con Python e72


Centro de Enseñanza Asistida por Computador - CENEAC

Ejercicio:
Utilizar diccionarios y listas para almacenar información de una agenda de contactos.

#----------
# Creado por Yusneyi Carballo Barrera, CENEAC, ver: Jul.2016
# ejemplo 9, trabajar con diccionarios, listas y sus operaciones
# más información en:
# http://librosweb.es/libro/algoritmos_python/capitulo_9/algunos_usos_de_diccionarios.html
# http://jarroba.com/diccionario-python-ejemplos/
# http://www.tutorialpython.com/listas-en-python/
#----------
#---------- ---------- ----------
# CUERPO PRINCIPAL del programa
#---------- ---------- ----------
# Trabajando con DICCIONARIOS

# definición de la variable diccionario e inicialización con datos de contactos


agenda1 = agenda2 = dict()

agenda1 = {
'Márquez': 'Carlos Márquez, 0212-5018971, carlos.marques@correo.com',
'López': 'Ana Luisa López, 0414-1337000, ana.lopez@correo.com',
'Medina': 'Marta Medina Ruiz, 0245-9930021, marta.medina@correo.com',
'Arias': 'Alex Arias, 0416-8946377, alex.arias@correo.com'
}

# recorriendo y mostrando los datos del diccionario


for clave, contacto in agenda1.items():
print(clave, ":", contacto)

# Devuelve el valor del elemento con clave key, sino lo encuentra, la función devuelve default
clave = 'Márquez'
valor = agenda1.get(clave)
print("\n\nLos contactos de ", clave , "son:\n", valor)

# Agregamos un elemento en el diccionario, si ya existe no la clave ya existe no lo inserta


nuevo = agenda1.setdefault('Blanco','Jorge Blanco, 0275-7892354, jorge.blanco@correo.com')
print("\n\nSe agregó en la agenda a:\n", nuevo)

nuevo = agenda1.setdefault('Blanco','José Blanco, 0275-7892354, jose.blanco@correo.com')


print("\n\nSe agregó en la agenda a:\n", nuevo)

# se consulta los datos del contacto con clave 'Blanco', para ver si se actualizó

Curso Programación con Python e73


Centro de Enseñanza Asistida por Computador - CENEAC

clave = 'Blanco'
valor = agenda1.get(clave)
print("\n\nLos contactos de", clave , "son:\n", valor)

# indicamos los valores de un segundo diccionario


agenda2 = {
'Vargas': 'Luis Vargas, 0212-7891971, luis.vargas@correo.com',
'Antillano': 'Marianela Antillano, 0414-9930021, marianela.antillano@correo.com',
'Marcano': 'Nestor Marcano, 0245-5018971, nestor.marcano@correo.com'
}

# consultamos la cantidad de contactos en cada diccionario


print("\nEn la agenda 1 se tienen ", str(len(agenda1)), "contactos y en la agenda 2",
str(len(agenda2)), "contactos")

# Hacemos una copia del diccionario


agenda3 = agenda2.copy()

# recorremos el diccionario 3, mostrando solo sus datos


print("\n\n\nA continuación listamos los datos de la agenda copia:")
for apellido in agenda3:
print (apellido, ":", agenda3[apellido])

# Unimos dos diccionarios, agregando los elementos de la agenda 1 a la agenda 3


agenda3.update(agenda1)
# mostramos los valores del diccionario como tuplas o pares de valores
print("\n\n\nA continuación listamos los", str(len(agenda3)), "datos combinados de las agendas 3 y
1:")
for clave, contacto in agenda3.items():
print(clave, ":", contacto)

# Eliminamos los elementos de un diccionario


agenda1.clear()
# consultamos la cantidad de contactos en el diccionario que acabamos de actualizar
print("\n\n\Luego de aplicar el clear, la cantidad de elementos en la agenda1 es:", str(len(agenda1)))

#---------- ---------- ----------


# Trabajando con LISTAS

# creando una LISTA con información de contactos suministrada por el usuario


continuar = 1

Curso Programación con Python e74


Centro de Enseñanza Asistida por Computador - CENEAC

cont = 0
listaAgenda=[] # definimos una lista vacía

while (continuar != 0):


cont += 1
nombre = input("Ingresa el nombre ")
apellido = input("Ingresa el apellido ")
tel = input("Ingresa el número de teléfono ")
listaAgenda.append( [nombre, apellido, tel])

print("¿Desea suministrar otro producto?,\n responda 0 para terminar o cualquier otro valor
para continuar")
continuar = int(input())

# mostrando la lista de contactos en su orden original


n = len(listaAgenda)
print ("\n\n\n Lista de los contactos ", str(n) , "en el orden original:")
print (listaAgenda)

# ordenando la lista por los campos nombre y apellido


from operator import itemgetter
listaAgenda.sort(key=itemgetter(0))
print ("\n\n\n Lista ordenada por nombre:")
print (listaAgenda)

listaAgenda.sort(key=itemgetter(1))
print ("\n\n\n Lista ordenada por apellido:")
print (listaAgenda)

# -- evita que se cierre la ventana de ejecución


print("\n\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e75


Centro de Enseñanza Asistida por Computador - CENEAC

Ej. 10. Clase Fracción


{ nombre del archivo: ej10.py }
Ejercicio:
Implementar una clase con sus atributos y métodos
#----------
# Creado por Yusneyi Carballo Barrera, CENEAC-UCV, ver: Jul.2016
# ejemplo Programación Orientada a Objetos, implementación de la clase Fracciones
# más información en:
# http://docs.python.org.ar/tutorial/3/classes.html#
# https://gist.github.com/mustaa/2350807#

#----------
# sección de declaración de clases y sus métodos

class Fraccion():
""" Implementa una fracción conformada por un numerador y un denominador """
# método constructor
def __init__(self, n, d):
"constructor de la clase"
self.num = n
self.den = d
# métodos de consulta de los atributos o métodos get
def numerador(self):
return self.num
def denominador(self):
return self.den
# métodos de modificación de los atributos o métodos set
def modif_numerador(self, n):
self.num = n
def modif_denominador(self, d):
self.den = d

# otros métodos que realizan cálculos con fracciones


def sumarFraccion(self, f2):
n = self.num * f2.den + self.den * f2.num
d = self.den * f2.den
#se crea y retorna un objeto tipo fracción
return Fraccion(n, d)
def multiplicarFraccion(self, f2):
n = self.num * f2.num
d = self.den * f2.den
#se crea y retorna un objeto tipo fracción
return Fraccion(n, d)

def compararFraccion(self, f2):


return (self.num/self.den == f2.num/f2.den)
def mostrarFraccion(self):
print (self.num, "/", self.den)

Curso Programación con Python e76


Centro de Enseñanza Asistida por Computador - CENEAC

#----------
# CUERPO PRINCIPAL DEL PROGRAMA, invocando a los métodos de la clase

# a continuación se crean dos fracciones o instancias de la clase


f1 = Fraccion(1,2)
f2 = Fraccion(1,2)

# se muestran ambas fracciones


print ("\nLa fracción f1 es:")
f1.mostrarFraccion()
print ("\nLa fracción f2 es:")
f2.mostrarFraccion()

f3 = f1.sumarFraccion(f2)
# se consultan el valor de la suma de f1 + f2
print ("\nLa fracción f3 = f1+f2 es:")
f3.mostrarFraccion()

if (f1.compararFraccion(f2)):
print("\nLas fracciones f1 y f2 son iguales")
else:
print("\nLas fracciones f1 y f2 no son iguales")

print("\nSuministre el numerador de una cuarta fracción: ")


n = int(input())

d=0
while (d==0):
print("\nSuministre el denominador de la fracción, recuerde que no debe ser cero (0): ")
d = int(input())
if (d==0):
print ("\n recuerde que la div/0 no está definida, es un error")

f4 = Fraccion(n,d)
print ("\nLa fracción f4 es:")

f4.mostrarFraccion()

# -- evita que se cierre la ventana de ejecución


print("\n\n\nPulse cualquier tecla para terminar")
fin = input()

Curso Programación con Python e77

Potrebbero piacerti anche