Python Ceneac Manual
Python Ceneac Manual
Python Ceneac Manual
Programación con
Índice
5. PROCEDIMIENTOS 23
5.1 Acciones 24
5.2 Funciones 25
5.3 Tipos de Parámetros y Pase de Parámetros 26
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.
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
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.
• 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.
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.
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.
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.
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.
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.
Operadores
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:
' " # \
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=
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
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.
• 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
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.
Operación de Asignación
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 >
Notación en Python:
input() nombre = input()
Notación en Python:
print("¿Cúal es su nombre por favor?")
print("resultado es: ", i)
Conversión de Tipos
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.
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.
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'
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
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
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
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
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 :
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;
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).
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
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,
Ejemplo: solicita letras hasta que se lee una ‘a’ o se llega a las 30 repeticiones
cont = 0
letraA = "aAáÁ"
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")
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
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.
5.2 Funciones
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:
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
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
# - - - - - - - - - -
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,
# cuerpo principal del programa con las invocaciones a librerías y a las funciones
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.
• 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.
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.
• 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.
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
• 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).
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;
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)
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)
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.
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
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]
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
CONJUNTOS o colecciones no ordenadas y sin elementos repetidos de valores separados por coma y entre
llaves {}
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 {}
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.
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.
• 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).
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:
<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.
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:
• 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: ( [ ] )
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;
FClase Rectángulo;
R.Rectángulo(L, A);
Escribir(“Resultados de los cálculos:”);
Escribir(“Área: ”+ R.Área + “ - Perímetro ” + R.Perímetro);
FAcción Principal;
class Alumno:
'Clase para alumnos'
numalumnos = 0
sumanotas = 0
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
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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:
# - - - - - - - - - -
# 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
# - - - - - - - - - -
# 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())
# 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())
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):
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
Programación con
Entorno de Programación
Ejemplos y Ejercicios
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
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.
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
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)
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
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")
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)
#----------
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
#----------
frase = input()
contV = contC = contE = 0
vocales = "aeiouAEIOUáéíóúÁÉÍÓÚ"
numeros = ['1', '2', '3', '4', '5']
i=cont=0
frase2=""
print("Luego de la sustitución la frase codificada es " , frase2, " y se hicieron " , cont , "
sustituciones")
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
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])
#----------
# 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
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
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())
# 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)
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/
#----------
# se abre el archivo
f = open(ruta + '\\' + archivo, modo)
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
# se abre el archivo
f = open(ruta + '\\' + archivo, modo)
pActual = float(l[2])
if primero: #inicializando ambas variables con rl precio del primer producto
mayorP = pActual
menorP = pActual
primero = False
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()
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)
# 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."""
# 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()
# 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)
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
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'
}
# 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)
# se consulta los datos del contacto con clave 'Blanco', para ver si se actualizó
clave = 'Blanco'
valor = agenda1.get(clave)
print("\n\nLos contactos de", clave , "son:\n", valor)
cont = 0
listaAgenda=[] # definimos una lista vacía
print("¿Desea suministrar otro producto?,\n responda 0 para terminar o cualquier otro valor
para continuar")
continuar = int(input())
listaAgenda.sort(key=itemgetter(1))
print ("\n\n\n Lista ordenada por apellido:")
print (listaAgenda)
#----------
# 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
#----------
# CUERPO PRINCIPAL DEL PROGRAMA, invocando a los métodos de la clase
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")
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()