Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 269

UNIVERSIDAD SANTO TOMAS DE AQUINO

DUAD
FACULTAD DE CIENCIAS Y TECNOLOGIAS
PROGRAMA INGENIERIA EN INFORMATICA

PROGRAMACION BASICA/INTERMEDIA EN PYTHON

Como fuente se toma:


APUNTES DE CLASE DE PROGRAMACION CON PYTHON
DNDA: 10-720-397
Fecha Registro: 7-junio-2018

MARIO DUSTANO CONTRERAS CASTRO


DOCENTE TIEMPO COMPLETO

BOGOTA, SEPTIEMBRE 2020


CAPITULO 1. INICIANDO PYTHON
INTRODUCCIÓN. AMBIENTES DE EJECUCION EN WINDOWS
Primer Referente. IDLE como entorno interactivo

El símbolo >>> indica que se puede iniciar o interactuar con Python Shell o Sesión del
intérprete interactiva de Python, eso quiere decir, que a medida que se coloque una línea
de código de Python; esta se ejecuta cuando se pulsa la tecla Intro.

Segundo Referente. Python Shell o Sesión del intérprete interactiva de Python


Pulsar click sobre File
Para Guardar el Programa
Para ejecutar tecla F5 o Menu>>Run>>Run Module
PRIMERA PARTE. ESTRUCTURAS DEL LENGUAJE DE PROGRAMACION PYTHON
Un lenguaje de programación debe ser analizado bajo las siguientes estructuras:
- Estructura Léxica
- Estructura Sintáctica
- Estructura Semántica
Estructura Léxica: La tarea fundamental de esta estructura es agrupar una serie de
símbolos (vocabulario) de acuerdo a su tipo: letras, dígitos, símbolos de operadores,
espacios en blanco.
La suma o concatenación de símbolos constituye un elemento léxico (token) de
acuerdo a su naturaleza: operando, operadores. Los operandos pueden ser: números,
palabras reservadas, nombre de variables, nombres de clases. Los operadores pueden
ser: aritméticos, lógicos, relación, puntuación, bloques y adjuntar una marca de
naturaleza.
Con respecto al Lenguaje python:
Diferencia entre mayúsculas y minúsculas o que no admite caracteres de puntuación
como @, $ o %.
Los operadores en Python:
Primer Referente. Tipos de datos
Los tipos de datos se pueden resumir en esta tabla:

Tipo Clase Notas Ejemplo

str Cadena Inmutable 'Cadena'

unicode Cadena Versión Unicode de string u'Cadena'

Mutable, puede contener objetos


list Secuencia [4.0, 'Cadena', True]
de diversos tipos

Inmutable, puede contener objetos


tuple Secuencia (4.0, 'Cadena', True)
de diversos tipos

Mutable, sin orden, no contiene


set Conjunto set([4.0, 'Cadena', True])
duplicados

Inmutable, sin orden, no contiene frozenset([4.0, 'Cadena',


frozenset Conjunto
duplicados True])
Tipo Clase Notas Ejemplo

dict Mapping Grupo de pares clave:valor {'key1': 1.0, 'key2': False}

Número Precisión fija, convertido


int 42
entero en long en caso de overflow.

Número
long Precisión arbitraria 42L ó 456966786151987643L
entero

Número
float Coma flotante de doble precisión 3.1415927
decimal

Número
complex Parte real y parte imaginaria j. (4.5 + 3j)
complejo

bool Booleano Valor booleano verdadero o falso True o False

Segundo Referente. Operadores Aritméticos


OPERADOR DESCRIPCION

+, -, * Enteros y Flotantes

/ División Flotante

// División Entera (toma la parte entera de la


división)

% Residuo

** base**potencia

+= Enteros y flotantes
*=
-=
Tercer Referente. Operadores Lógicos.
and
or
not
Los operadores lógicos retornan 1: True o 0: False
Cuarto Referente. Operadores de Relación.

Quinto Referente. Los Comentarios.


Los comentarios se pueden poner de dos formas. La primera y más apropiada para
comentarios largos es utilizando la notación ''' comentario ''', tres apóstrofos de apertura y
tres de cierre. La segunda notación utiliza el símbolo #, y se extienden hasta el final de la
línea.
Sexto Referente. Identificadores
Los identificadores sirven para identificar una variable, función, clase, módulo u objeto.
Suelen empezar con letras, en mayúscula o minúscula, o con un guion bajo seguido de
varias letras o números. Con respecto a un identificador:
- Si empieza un guion bajo, significa que es privado.
- Si empieza con dos guiones bajos, se trata de un identificador privado.
- Si el identificador finaliza con dos guiones bajos, el identificador es un nombre
especial definido por lenguaje.
Los nombres de clase empiezan con una letra mayúscula.
Las variables se definen de forma dinámica, lo que significa que no se tiene que
especificar cuál es su tipo de antemano y puede tomar distintos valores en otro momento,
incluso de un tipo diferente al que tenía previamente. Se usa el símbolo = para asignar
valores.
Estructura Sintáctica: La tarea fundamental es identificar estructuras de programa
denominadas sentencias (instrucciones, declaraciones, expresiones, etc.) haciendo uso
de elementos léxicos (Tokens).
Las Tareas a desarrollarse en la estructura sintáctica son las siguientes:
- Tarea Parsing. Búsqueda de Palabras Reservadas como de símbolos
representativos dentro de una sentencia.
- Tarea Naturaleza. De acuerdo con el parsing se determina la naturaleza de la
sentencia (enunciado de programa, declaración, cuerpo de programa, bloque de
sentencias,etc.)
- Tarea de Autómatas Sintácticos. Se analiza la secuencia de elementos léxicos
(tokens) dentro de una sentencia (reglas basadas en gramáticas formales –
autómatas -).
Con respecto al Lenguaje python:
Primer Referente. Delimitación de bloques de código. El contenido de los bloques de
código (bucles, funciones, clases, etc.) es delimitado mediante espacios o tabuladores,
conocidos como indentación, antes de cada línea de órdenes pertenecientes al bloque.
Python se diferencia así de otros lenguajes de programación que mantienen como
costumbre declarar los bloques mediante un conjunto de caracteres, normalmente entre
llaves {}.
Segundo Referente. Salida de Dato print()
Primer formato. Separación de cada argumento empleando un espacio en blanco.

Segundo formato. Concluye con un salto de línea


Cada impresión con print() concluye con un salto de línea.

Tercer formato. Con el argumento sep


La función print() admite un argumento, llamado sep, que contiene la cadena de
caracteres que se emplea para separar cada elemento.
Ejemplos:
Separador --

Separados espacios en blanco

Como separador exacto de tabulador (carácter de escape: \t)

Como separador un salto de línea


Cuarto formato. Con argumento end
Cuando se requiere que la salida no genere un salto de línea se hace uso del argumento
end=” y termine en un carácter determinado.

Mezcla de argumento end= y sep=

Quinto formato. Con operador de formateo %


El operador% se utiliza como formateo de cadenas, donde:
%ns simboliza cadena con longitud de n caracteres
%n.df simboliza flotante con longitud de n (se incluyen dígitos enteros, el punto y los
dígitos decimales) y d dígitos decimales
%nd simboliza entero con longitud de n dígitos
Entonces,
print (<cadena formato> % (variables))

Nota. En formato %s y %d sino se especifica la longitud o sea n; se toma la longitud de la


cadena y del número entero
Sexto Formato. Con función format
print (<cadena formato>.format(variables))
En el formato se establece el orden de impresión de las variable mediante los corchetes
{n}, donde n=0…hasta variables-1. Sino se define el {n} se toma la secuencia normal de
impresión de las variables
Tercer Referente. Entrada de Datos
Desde python3.x solo existe input() para la entrada por teclado. Además, el valor que se
captura siempre es una cadena. Por lo tanto, es necesario hacer la conversión haciendo
uso de las funciones:
int(): entero
float(): flotante
En el caso de cadenas se hace uso de:
raw_input()

Cuarto Referente. Contenido Mutable o no mutable


Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecución.
Inmutable: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecución.

Cuarto Referente. Listas y Tuplas


Para declarar una lista se usan los corchetes [], en cambio, para declarar una tupla se
usan los paréntesis (). En ambas los elementos se separan por comas, y en el caso de
las tuplas es necesario que tengan como mínimo una coma.

 Tanto las listas como las tuplas pueden contener elementos de diferentes tipos. No
obstante las listas suelen usarse para elementos del mismo tipo en cantidad variable
mientras que lastuplas se reservan para elementos distintos en cantidad fija.
 Para acceder a los elementos de una lista o tupla se utiliza un índice entero
(empezando por "0", no por "1"). Se pueden utilizar índices negativos para acceder
elementos a partir del final.
 Las listas se caracterizan por ser mutables, es decir, se puede cambiar su
contenido en tiempo de ejecución, mientras que las tuplas son inmutables ya que no
es posible modificar el contenido una vez creada.
Listas

listas[-1]: índice negativo va al anterior del ultimo


listas: imprime
listas.append(x): adiciona un elemento x
del listas[x]: elimina el elemento en la posición x
lista1: crea la lista anidada (listas y valores 11, 13).
lista2: crea la lista anidada (lista1 con la lista 15 y 17). Resultado es una matriz ( 2
dimensiones) y tres dimensiones
Nota. Lista.Sort (): Es una función que se utiliza para ordenar de forma ascendente los
elementos de una lista. Con el argumento Lista.sort(reverse=True) se ordena de forma
descendente. El tamaño de una lista se obtiene con la función len(lista)
Tuplas

Las tuplas son inmutables ya que no es posible modificar el contenido una vez creada.
Quinto Referente. Diccionarios
Para declarar un diccionario se usan las llaves {}. Contienen elementos separados por
comas, donde cada elemento está formado por un par clave:valor (el símbolo : separa la
clave de su valor correspondiente).
Los diccionarios son mutables, es decir, se puede cambiar el contenido de un valor en
tiempo de ejecución.
En cambio, las claves de un diccionario deben ser inmutables. Esto quiere decir, por
ejemplo, que no podremos usar ni listas ni diccionarios como claves.
El valor asociado a una clave puede ser de cualquier tipo de dato, incluso un diccionario.

Sexto Referente. Conjuntos

 Los conjuntos se construyen mediante set(items) donde items es cualquier


objeto iterable, como listas o tuplas. Los conjuntos no mantienen el orden ni contienen
elementos duplicados.
 Se suelen utilizar para eliminar duplicados de una secuencia, o para operaciones
matemáticas como intersección, unión, diferencia y diferencia simétrica.
>>> conjunto_inmutable = frozenset(["a", "b", "a"]) # Se utiliza una lista como objeto
iterable
>>> conjunto_inmutable
frozenset(['a', 'b'])
>>> conjunto1 = set(["a", "b", "a"]) # Primer conjunto mutable
>>> conjunto1
set(['a', 'b'])
>>> conjunto2 = set(["a", "b", "c", "d"]) # Segundo conjunto mutable
>>> conjunto2
set(['a', 'c', 'b', 'd']) # Recuerda, no mantienen el orden, como los diccionarios
>>> conjunto1 & conjunto2 # Intersección
set(['a', 'b'])
>>> conjunto1 | conjunto2 # Unión
set(['a', 'c', 'b', 'd'])
>>> conjunto1 - conjunto2 # Diferencia (1)
set([])
>>> conjunto2 - conjunto1 # Diferencia (2)
set(['c', 'd'])
>>> conjunto1 ^ conjunto2 # Diferencia simétrica
set(['c', 'd'])

Séptimo Referente. Cadenas


Como se inician:

En Python, así como en Java y otros lenguajes, las cadenas son inmutables (sus
elementos no se pueden modificar). Si se requieren modificaciones, se debe construir una
cadena nueva (muchas veces esto lo hace automáticamente el intérprete de Python).
Clausula in devuelve true o false si existe una subcadena dentro de otra cadena

Si necesitamos saber además la posición en la que se encuentra la subcadena, usamos


las funciones index() o find(). La diferencia entre ambos es que, si no se encuentra la
subcadena, find() devuelve -1, mientras que index() lanza una excepción de
tipo ValueError.
Para reemplazar una cadena por otra se utiliza la función replace

Para obtener subcadenas a partir de un carácter separador se hace uso de la función


Split. El resultado del uso de esta función es una lista

Concatenación de Caracteres se hace con el operador aritmético +

Para convertir un entero o flotante en string se hace el uso de la función str

La función len para obtener la longitud de la cadena


Recorrido de una cadena mediante un ciclo while

Como secuencia dentro de un ciclo for

Haciendo uso del concepto de porción [desde:hasta] excluyendo el ultimo:

Conversión a minúscula con la función lower


Conversión a mayúscula con la función upper

Clasificación de caracteres

Con frecuencia es útil examinar un carácter y comprobar si está en mayúsculas o en


minúsculas, o si es un carácter o un dígito. El módulo string proporciona varias constantes
que son útiles para lograr estos objetivos.
islower. Si es Minúsculas
isupper. Si es Mayúsculas
isdigits. Si es Minúsculas
isspace. Si es Espacio blanco
Más información::
http://docs.python.org/3.3/library/string.html
Octavo Referente. Sentencias condicionales (bifurcaciones)
A menudo es necesario que un programa ejecute unas instrucciones cuando se cumplan
unas condiciones y otras cuando no. En esos casos se utiliza la estructura de control if ...
else ..... En inglés "if" significa "si" (condición) y "else" significa "si no". La orden en Pyhton
se escribe así:
if condición:
aquí van las órdenes que se ejecutan si la condición es cierta
y que pueden ocupar varias líneas
else:
y aquí van las órdenes que se ejecutan si la condición es falsa y que también pueden
ocupar varias líneas
Donde,
<condicion>: : - < condicionante > ∫ <operador lógico> <condicionante>
<operador lógico>: : - and or not ()
<condicionante> : : - <expresión lógica> | <expresión relación>
<expresión lógica>:: - función o expresión que retorne valor true o false
<expresión relación>::- < variable > <operador de relación> <operación>
<operador de relación>::

<operación> :: - <operando> ∫ <operador aritmético> <operando>


<operando>:: - <variable> | <numero>
<operador aritmético> :: - + / * -
Formato 1:
if <condición> :
<bloque> | <sentencia>
Formato 2:
if condicion:
<bloque> | <sentencia>
else:
<bloque> | <sentencia>
Formato 3: Se abrevia el if else if como if elif [else]
if <condición>:
<bloque> | <sentencia>
elif <condición>:
<bloque> | <sentencia>
else:
<bloque> | <sentencia>

PROGRAMA EN PYTHON PARIDAD DE UN NÚMERO


num = int(input('Ingrese numero: '))
if (num % 2 == 0):
print ('El numero ', num, ' es par.');
else:
print ('El numero ', num, ' es impar.');

PROGRAMA EN PYTHON NOTA


nota = int(input('Digite Nota: '))
if (nota>=6):
print ('Paso la Prueba');
else:
print ('Perdio la prueba');

Noveno Referente. Sintaxis de la sentencia ciclo for


La sintaxis del ciclo for es la siguiente:
for <variable> in range([limite_inferior,]limite_superior[,step incremento]):
<bloque> | <sentencia>
Se ejecuta el bloque o sentencia desde el limite_inferior(por defecto 0) hasta
limite_superior-1. Inicialmente, la variable adopta el valor de limite_inferior; en las
siguientes iteraciones el valor se va incrementando (por defecto 1) hasta tomar el valor
limite_superior-1.
Caso 1: La función range se emplea para generar una lista de enteros por ejemplo range
(10) corresponde con la lista : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
Caso 2: range(4,10)
[4, 5, 6, 7, 8, 9]
Caso 3: Con incremento (step)
range(-2,-10,-2)
[-2, -4, -6, -8]
Sin embargo, el for en Python permite iterar no solo sobre progresiones aritméticas, sino
que recorre los elementos de una secuencia, ya sea lista o cadena, en el orden en que
estos aparecen en la misma.
Nota. Para ver los valores del range(), es necesario convertirlo a lista mediante la
función list(). Por ejemplo:
>>> x = range(10)
>>> x
range(0, 10)
>>> list(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
EJEMPLOS:
1. La Multiplicación de A X B por medio de Suma. Esta suma se representa como la
sumatoria de B en A – Veces.
A
∑ B=0+B+B+B
i=1 A - Veces

El índice i va desde 1 hasta A ó sea


i = 1… A
En PYTHON
A = int(input('Digite A: '))
B = int(input('Digite B: '))
C=0
for i in range(0,A):
C=C+B
print (C,'= ', A, '*', B);

2. El Factorial de un numero n.
n
Л i = 1*1*2*3*….n (Multiplicatoria de i n veces)
i=1 n - Veces
El índice i va desde 1 hasta n ó sea
i = 1… n
En PYTHON
A = int(input('Digite A: '))
B = int(input('Digite B: '))
C=0
for i in range(0,A):
C=C+B
print (C,'= ', A, '*', B);

3. Listar hasta el Termino n esimo de la serie de Fibonacci


El índice i va desde 1 hasta n ó sea
i = 1… n

En PYTHON
padre=0
abuelo=1
n = int(input('Digite Termino: '))
for i in range(0,n):
nieto=padre+abuelo;
print (nieto);
abuelo=padre;
padre=nieto;
4. Lectura y escritura de un vector
Un vector es un Arreglo Unidimensional
Se debe declarar un Vector de n – posiciones. Las posiciones de un vector en este caso
inician en 1 y llegan hasta la posición n

1 2 3 4 5. . . n
A

Entonces para recorrer un vector se requiere de un índice que:


indice = 1 … n
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print (A[i])
5. Simular una Potencia
Dado b: base y n: potencia realizar por medio de multiplicaciones la simulación de b
elevado a la n
En PYTHON
b = int(input('Digite Base: '))
n = int(input('Digite Potencia: '))
k=1
for i in range(1,n+1):
k=k*b
print (k);
6. Ciclos for anidados(un ciclo for dentro de otro) ilustrando las horas y minutos
En PYTHON
for Hora in range(24):
for Minuto in range(60):
print ("HH:",Hora," MM:",Minuto)

7. Lectura y Escritura de una matriz


Una Matriz es un Arreglo Bidimensional. Se puede representar como un conjunto de
Vectores, donde se estructura por filas y columnas
Se debe declarar una Matriz de n – posiciones por n - posiciones.
Donde las primeras n – Posiciones representan las Filas
Las Segundas n – Posiciones representan las Columnas

1 2 3 4. . . n
1

2
A FILAS

n
COLUMNAS
Para recorrer una Matriz se requiere de un índice para las filas y otro índice para las
columnas:
Entonces, se necesita dos ciclos; un externo para recorrer filas y un Interno para recorrer
columna por columna de la fila activa (ciclo externo).
indice Externo= 1… n. Se toma como el índice i
Indice Interno= 1… n Se toma como el índice j
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Filas: '))
m = int(input('Digite Columnas: '))
A=[];# Se debe simular como un vector de Dimension n*m
k=0
for i in range(n): # Ciclo de Filas
for j in range(m): # Ciclo de Columnas
A.append(randint(1,100)) #Se adiciona en el vector un número randomico
print ("A[",i,"][",j,"]=",A[k])
k=k+1 # se incrementa la posicion del vector

8. Ordenamiento de un Vector
Solo se analiza el programa de Ordenamiento de un vector n – posiciones porque las
operaciones de lectura y escritura en un vector fueron ya analizados.
Se toma como caso un ordenamiento sencillo que este autor lo denomina lineal que
consiste en dos índices (indica posición dentro del vector) comparado y comparante:
Comparado Comparante
Posición 1 Posición 2 hasta n
Posición 2 Posición 3 hasta n
Posición 3 Posición 4 hasta n
Se concluye entonces
Ciclo externo Ciclo Interno
Posición i= 1…n - 1 Posición j= i + 1 …. n
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print (A[i])
for i in range(n-1): # desde 0...hasta n-2
for j in range(i+1,n): # desde i hasta n-1
if (A[i]>A[j]):
k=A[i]
A[i]=A[j]
A[j]=k
print("Vector Ordenado")
for i in range(n):
print (A[i])
Décimo Referente. Sintaxis de la sentencia ciclo while
La sintaxis del ciclo while es la siguiente:
while (<condición de Permanencia>):
bloque
El BNF es el siguiente:
<condición de Permanencia>: : - < condicionante > ∫ <operador lógico> <condicionante>
<operador lógico>: : - & |
<condicionante> : : - < variable > <operador de relación> <operación>
<operador de relación>:: - > < >= <= = <>
<operación> :: - <operando> ∫ <operador aritmético> <operando>
<operando>:: - <variable> | <numero>
<operador aritmético> :: - + / * -
<bloque>:: - <sentencia>
<sentencia>
El bucle while evalúa una condición y, si es verdadera, ejecuta el bloque de código
interno. Continúa evaluando y ejecutando mientras la condición (condición de
permanencia) sea verdadera.
1. Digitalización de un Numero en Python
from random import randint #libreria para randomicos
x = randint(101,1000000) # Se genera un numero aleatorio entre 1000...999999
print ("Numero Generado: ",x)
n=0
A=[];
m=x
while(m>0):
n=n+1
m=m//10
m=x
for i in range(n):
A.append(m % 10) #Se adiciona en el vector el residuo
m=m//10
print ("A[",i,"]=",A[i])
2. Búsqueda de un valor x en un vector no ordenado en Python
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"]=",A[i])
x = int(input('Digite Número a Buscar: '))
i=0
while (i<n and A[i]!=x):
i=i+1
if(i<n):
print (x," esta en la posicion: ",i)
else:
print (x," no existe")
3. Búsqueda Lineal en un Vector Ordenado
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"]=",A[i])
for i in range(n-1): # desde 0...hasta n-2
for j in range(i+1,n): # desde i hasta n-1
if (A[i]>A[j]):
k=A[i]
A[i]=A[j]
A[j]=k
print("Vector Ordenado")
for i in range(n):
print ("A[",i,"]=",A[i])
x = int(input('Digite Número a Buscar: '))
i=0
while (i<n and A[i]<x):
i=i+1
if(i<n):
print (x," esta en la posicion: ",i)
else:
print (x," no existe")

4. Verificar si el número n es primo o no en Python.


from random import randint #libreria para randomicos
n = int(input('Digite Numero '))
i=2
while ((i<=n//2) and ((n % i)!=0)):
i=i+1
if(i<=n//2):
print (n," no es primo ")
else:
print (n," es primo ")
Décimo Primer Referente. Excepciones
Aun cuando una sentencia o expresión sea sintácticamente correcta, puede causar un
error al intentar ejecutarla. Los errores o los fallos que se detectan en la ejecución se
llaman excepciones.

Indica una excepción TypeError

Manejo de excepciones
Para manejar un fallo o error que se produce en el programa durante su ejecución, se
debe colocar las sentencias try...except
Sintaxis:
try:
<sentencia | sentencias que pueden presentar fallo o error>
except [<excepción>] :
<sentencias para el tratamiento de la excepción>
[ else:
<sentencias en el caso que no se presente excepción> ]
[finally:
< sentencias en el caso que que se presente o no una excepción>]

Primer caso. Python permite disponer de un bloque


try:
except:
Para la captura de cualquier tipo de excepción (si bien esto no es lo más
recomendable) ya que es difícil emprender una acción para todos los tipos de errores que
pueden generarse
Segundo caso: Cuando se desea hacer un manejo de más de una excepción se coloca
entre paréntesis y separación del signo de puntuación coma (,)
Por ejemplo:
try:

except (IndexError,ZeroDivisionError):

Lanzar o Forzar que ocurra una Excepción

La declaración raise permite al programador lanzar o forzar a que ocurra una excepción
específica

Sintaxis:

raise excepción(<argumentos>)
Algunas Excepciones Python

Algunas excepciones python:


Excepción Descripción
IOError Error de entradas y salida (apertura, cierre,
operaciones, acceso a archivos)
IndexError Error de Índice (fuera de rango)
ZeroDivisionError División por cero
KeyError Llave duplicada en un diccionario
KeyboardInterrupt Se ha pulsado las teclas ctrl-c
TypeError Cuando se utiliza un tipo de datos que no
es correcto para un cálculo
ValueError Una operación o función recibe un
argumento que tiene un valor inadecuado
ZeroDivisionError(ArithmeticError) Lanzada cuando el segundo argumento de
una operación de división o módulo era 0

ImportError(StandardError) No se encuentra el módulo o el elemento


del módulo que se quería importar.

NameError(StandardError) No se encontró ningún elemento con ese


nombre
Para mayor documentación:
http://docs.python.org/3/library/exceptions.html
Veamos un ejemplo del manejo de una excepción TypeError:

Se pueden utilizar tanto espacios como tabuladores para identar el código, pero se
recomienda no mezclarlos.
ANEXO. RELACION AUTOMATAS CON ESTRUCTURAS
DE PROGRAMACION PYTHON
ARBOL DE CONDICION
Cuando es necesario evaluar la presencia ó no de una condición
Es más sencillo entenderlo inicialmente como un árbol de condición para determinar cual
es el camino lógico cuando se presente o no esta condición

Presencia
Condición

Ausencia

SINTAXIS PARA CONDICION PYTHON


Las BNF (Backus Neur Form) son:
<condicion>: : - < condicionante > ∫ <operador lógico> <condicionante>
<operador lógico>: : - and or not ()
<condicionante> : : - <expresión lógica> | <expresión relación>
<expresión lógica>:: - función o expresión que retorne valor true o false
<expresión relación>::- < variable > <operador de relación> <operación>
<operador de relación>::

<operación> :: - <operando> ∫ <operador aritmético> <operando>


<operando>:: - <variable> | <numero>
<operador aritmético> :: - + / * -
<bloque>:: - <sentencia>
<sentencia>
….
SINTAXIS PYTHON SENTENCIA if
Formato 1:
if <condición> :
<bloque> | <sentencia>

Formato 2:
if condicion:
<bloque> | <sentencia>
else:
<bloque> | <sentencia>
Formato 3: Se abrevia el if else if como if elif [else]
if <condición>:
<bloque> | <sentencia>
elif <condición>:
<bloque> | <sentencia>
else:
<bloque> | <sentencia>
PROGRAMA EN PYTHON
num = int(input('Ingrese numero: '))
if (num % 2 == 0):
print ('El numero ', num, ' es par.');
else:
print ('El numero ', num, ' es impar.');

PROGRAMA EN PYTHON
nota = int(input('Digite Nota: '))
if (nota>=6):
print ('Paso la Prueba');
else:
print ('Perdio la prueba');
AUTOMATA DE CICLO FINITO
Se conoce el número de veces a realizar determinada(s) actividad(es)
Se realiza en cuatro momentos:
E0. Previo al Autómata
a. Inicializar el Índice
b. Comparar el Índice contra una cota o límite superior e inferior
c. Actividad(es) a Realizar
d. Incremento o decremento de Índice

b
d

Existen dos clases de Autómata de Ciclo Finito:


- Incremental
- Decremental

MOMENTOS INCREMENTAL DECREMENTAL


a INDICE=LIMITE INFERIOR INDICE=LIMITE SUPERIOR
b INDICE <= LIMITE SUPERIOR INDICE >= LIMITE INFERIOR
c SENTENCIA(S) SENTENCIA(S)
d INDICE=INDICE+1 INDICE=INDICE-1
IR AL MOMENTO b IR AL MOMENTO b
SINTAXIS PYTHON SENTENCIA for
for <variable> in range([limite_inferior,]limite_superior[,step incremento]):
<bloque> | <sentencia>
Se ejecuta el bloque o sentencia desde el limite_inferior(por defecto 0) hasta
limite_superior-1. Inicialmente, la variable adopta el valor de limite_inferior; en las
siguientes iteraciones el valor se va incrementando (por defecto 1) hasta tomar el valor
limite_superior-1.
Caso 1: La función range se emplea para generar una lista de enteros por ejemplo
range(10) corresponde con la lista : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
Caso 2: range(4,10)
[4, 5, 6, 7, 8, 9]
Caso 3: Con incremento (step)
range(-2,-10,-2)
[-2, -4, -6, -8]
Sin embargo, el for en Python permite iterar no solo sobre progresiones aritméticas, sino
que recorre los elementos de una secuencia, ya sea lista o cadena, en el orden en que
estos aparecen en la misma.
EJEMPLOS:
7. La Multiplicación de A X B por medio de Suma. Esta suma se representa como la
sumatoria de B en A – Veces.
A
∑ B=0+B+B+B
i=1 A - Veces
El índice i va desde 1 hasta A ó sea
i = 1… A
Limite Inferior =1
Limite Superior = A
E0.
S=0 La Sumatoria se debe iniciar en 0
Lea A
Lea B
Autómata Ciclo Finito
a. i=1
b. i <= A
c. S=S+B
d. i=i+1
ir al Momento b
En PYTHON
A = int(input('Digite A: '))
B = int(input('Digite B: '))
C=0
for i in range(0,A):
C=C+B
print (C,'= ', A, '*', B);
8. El Factorial de un numero n.
n
Л i = 1*1*2*3*….n (Multiplicatoria de i n veces)
i=1 n - Veces
El índice i va desde 1 hasta n ó sea
i = 1… n
Limite Inferior =1
Limite Superior = n
E0.
F=1 La Multiplicatoria se debe iniciar en 1
Lea n
Autómata de Ciclo Finito
a. i=1
b. i <= n
c. F = F * i
d. i=i+1
ir al Momento b
En PYTHON
A = int(input('Digite A: '))
B = int(input('Digite B: '))
C=0
for i in range(0,A):
C=C+B
print (C,'= ', A, '*', B);
9. Listar hasta el Termino n esimo de la serie de Fibonacci
El índice i va desde 1 hasta n ó sea
i = 1… n
Limite Inferior =1
Limite Superior = n
E0.
Padre=0
Abuelo= 1
Lea n
Autómata de Ciclo Finito
a. i=1
b. i <= n
c. Nieto = Padre + Abuelo
Escribir Nieto
Abuelo = Padre
Padre = Nieto
d. i=i+1
ir al Momento b
En PYTHON
padre=0
abuelo=1
n = int(input('Digite Termino: '))
for i in range(0,n):
nieto=padre+abuelo;
print (nieto);
abuelo=padre;
padre=nieto;

10. Lectura y escritura de un vector


Un vector es un Arreglo Unidimensional
Se debe declarar un Vector de n – posiciones. Las posiciones de un vector en este caso
inician en 1 y llegan hasta la posición n

1 2 3 4 5. . . n
A

Entonces para recorrer un vector se requiere de un índice que:


indice = 1 … n
Limite Inferior = 1
Limite Superior = n
E0:
Lectura n Dimension
Entera A [n] Se declara el Vector A de n – posiciones
Autómata de Lectura
a. i = 1
b. i <= n
c. Lea A[ i ]
d. i =i + 1
ir al Momento b
Autómata de Escritura
a. i = 1
b. i <= n
c. Escribir A[ i ]
d. i =i + 1
ir al Momento b
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print (A[i])

11. Simular una Potencia


Dado b: base y n: potencia realizar por medio de multiplicaciones la simulación de b
elevado a la n
E0:
k=1
Lea b
Lea n
Autómata de Ciclo Finito
a. i=1
b. si i<=n
c. k=k*b
d. i=i+1
Ir al momento b
Fin Autómata
Escribir K
En PYTHON
b = int(input('Digite Base: '))
n = int(input('Digite Potencia: '))
k=1
for i in range(1,n+1):
k=k*b
print (k);

CICLO ANIDADOS
Se presenta cuando un Autómata hace parte del momento c de otro Autómata. Se
representa de la siguiente manera:

b
d

Entonces se habla de un Autómata Externo y un Autómata Interno.


6. A nivel de interpretación, se va a ilustrar un Autómata de Horas y un Autómata de
Minutos.
c
El Autómata de Horas es el Externo y su índice Hora a va desde 0 hasta 23

b
d

c
El Autómata de Minutos es el interno y su índice Minuto va desde 0 hasta 59
Autómata Externo
a. Hora = 0
b. Hora < = 23
c. Autómata Interno
a. Minuto = 0
b. Minuto < = 59
c. Mostrar Hora: Minuto
d. Minuto = Minuto +1
Ir al Momento b del Autómata Interno
Fin Autómata Interno
d. Hora = Hora +1
Ir al Momento b del Autómata externo

En PYTHON
for Hora in range(24):
for Minuto in range(60):
print ("HH:",Hora," MM:",Minuto)

9. Lectura y Escritura de una matriz


Una Matriz es un Arreglo Bidimensional. Se puede representar como un conjunto de
Vectores, donde se estructura por filas y columnas
Se debe declarar una Matriz de n – posiciones por n - posiciones.
Donde las primeras n – Posiciones representan las Filas
Las Segundas n – Posiciones representan las Columnas

1 2 3 4. . . n
1

A FILAS

COLUMNAS
Para recorrer una Matriz se requiere de un índice para las filas y otro índice para las
columnas:
Entonces, se necesita de dos Autómatas uno Externo para recorrer filas y un Interno para
recorrer columna por columna de la fila activa (índice autómata externo).
indice Externo= 1… n. Se toma como el índice i
Indice Interno= 1… n Se toma como el índice j
Limite Inferior = 1
Limite Superior = n

E0:
Constante Entera n = 4
Entera A [n] [n] Se declara una Matriz A de n – posiciones por n - posiciones

Autómata de Lectura
Autómata Externo
a. i = 1
b. i <= n
c.
Autómata Interno
a. j=1
b. j <= n
c. Lea A[ i ] [ j ]
d. j = j +1
ir al momento b del Autómata Interno
Fin Autómata Interno
d. i =i + 1
ir al Momento b del Autómata Externo

Autómata de Escritura
Autómata Externo
a. i =1
b. i <= n
c.
Salto de Línea
Autómata Interno
a. j=1
b. j < =n
c. Escriba A[ i ] [ j ]
d. j = j +1
ir al momento b del Autómata Interno
Fin Autómata Interno
d. i =i + 1
ir al Momento b del Autómata Externo
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Filas: '))
m = int(input('Digite Columnas: '))
A=[];# Se debe simular como un vector de Dimension n*m
k=0
for i in range(n): # Ciclo de Filas
for j in range(m): # Ciclo de Columnas
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"][",j,"]=",A[k])
k=k+1 # se incrementa la posicion del vector
10. Ordenamiento de un Vector
Solo se analiza el Autómata de Ordenamiento de un vector n – posiciones porque los
autómatas de lectura y escritura en un vector fueron ya analizados.
Se toma como caso un ordenamiento sencillo que este autor lo denomina lineal que
consiste en dos índices (indica posición dentro del vector) comparado y comparante:
Comparado Comparante
Posición 1 Posición 2 hasta n
Posición 2 Posición 3 hasta n
Posición 3 Posición 4 hasta n
Se concluye entonces
Autómata Externo Autómata Interno
Posición i= 1…n - 1 Posición j= i + 1 …. n

E0:
Constante Entera n = 10
Entera A [n] Se declara el Vector A de n – posiciones
Autómata de lectura de vector
Autómata de Escritura de Vector
Autómata Externo(Comparado)
a. i=1
b. i <= n-1
c. .
Autómata Interno(Comparante)
a. j = i + 1
b. j <= n
c. Si A[ i ] > A[ j ]
k= A[ i]
A[ i ] = A[ j ]
A[ j ] = k
Fin Si
d. j = j +1
ir al momento b del Autómata Interno
Fin Autómata Interno
d. i =i + 1
ir al Momento b del Autómata Externo
Fin Autómata Externo
Autómata Escritura vector
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print (A[i])
for i in range(n-1): # desde 0...hasta n-2
for j in range(i+1,n): # desde i hasta n-1
if (A[i]>A[j]):
k=A[i]
A[i]=A[j]
A[j]=k
print("Vector Ordenado")
for i in range(n):
print (A[i])
CICLOS FINITOS CON EVENTOS
Se denomina evento a todo suceso o hecho esperado.

En el caso de autómata de ciclo finito se conoce cuantas veces se va a realizar ciertas


operaciones, pero a veces, se puede esperar que se presente un Evento.
La presencia del Evento puede ser una de las causas de la salida del ciclo o finalización
del autómata finito. La otra causa es el fin del autómata de ciclo finito que se presenta
cuando en el autómata finito incremental el índice se hace superior a la cota superior (en
la gráfica cuando i>n) y en el autómata decremental cuando el índice se hace inferior a la
cota inferior (en la gráfica cuando i<1).
Entonces, la suma de la presencia del Evento con el fin del autómata finito se denomina
Condición de Salida (CS).
La Condición de Salida se define “se realiza una sentencia(s) hasta que se presente una
condición”.
Desde el punto de vista lógica de programación se debe tener en cuenta:
1. CS:: Fin autómata finito AND|OR Evento
2. Los autómatas finitos en su segundo momento (b) ejecutan una Condición de
Permanencia (CP)
3. Condición de Permanencia (CP) se define como la realización de una sentencia o
varias sentencias siempre y cuando se presente una condición. También se define
como, como la realización de una sentencia o varias sentencias mientras que se
presente una condición
4. La Condición de Permanencia (CP) es la negación de la Condición de Salida (CS).
Entonces CP:: Presencia autómata finito AND|OR Ausencia Evento

b
d

c
Para los casos del Autómata de Ciclo Finito:
- Incremental
- Decremental

MOMENTOS INCREMENTAL DECREMENTAL

a INDICE=LIMITE INFERIOR INDICE=LIMITE SUPERIOR

b Condición de Permanencia(CP) Condición de Permanencia(CP)

c SENTENCIA(S) SENTENCIA(S)
d INDICE=INDICE+1 INDICE=INDICE-1
IR AL MOMENTO b IR AL MOMENTO b

No existe en el PSeint, pero, en lenguajes de programación Java o C++ existe la


manera.
8a. Digitalización de un Numero
Un número es un conjunto de dígitos:
<Digito>:-|0|1|...|9|
<Numero>:- ∫ <digito>
Dado un número se debe llevar cada digito a una posición de un vector. Entonces,
La Unidad del Número a la Posición 1
La Décima del Número a la Posición 2
La Centén cima del Número a la posición 3
y así sucesivamente.
E0:
Entero A[n] Vector de n - posiciones
Lea x // Numero
tope=0 // Cuando ingresa al ciclo se incrementa y debe cumplir tope=1…n
Condición de Permanencia (CP)
CP:: tope<n AND x>0 // x>0 Porque debe tener dígitos a obtener
Autómata de Digitalización
b. si tope<n AND x>0 (CP)
c.
tope=tope+1
A[tope]= residuo(x,10) // x residuo de 10
x= x /10
d. ir a b
Fin Digitalización
Autómata Escribir Vector:( 1…tope)
8b. Búsqueda de un valor x en un vector no ordenado
E0:
Constante Entera n = 10
Entera A [n] Se declara el Vector A de n – posiciones
Lectura x // valor a buscar dentro del vector
Autómata de lectura de vector
Autómata de Escritura de vector
Condición de Permanencia (CP):: i<=n AND A[ i ] sea diferente de x
i=0
Autómata de Búsqueda de Valor:
b. i<=n AND A[ i ] sea diferente de x
c.
i= i +1
d. ir a b
Fin Autómata de Búsqueda de Valor

ESCRIBA Existe x en la posición i

Presencia
i<=n

Ausencia
ESCRIBA No exista el valor x

8c. Búsqueda de un valor x en un vector ordenado


E0:
Constante Entera n = 10
Entera A [n] Se declara el Vector A de n – posiciones
Lectura x // valor a buscar dentro del vector
Autómata de lectura de vector
Autómata de Ordenamiento de Vector
Autómata de Escritura de vector
Condición de Permanencia (CP):: i<=n AND A[ i ] sea menor que x
i=0
Autómata de Búsqueda de Valor:
b. i<=n AND A[ i ] sea menor que x
c.
i= i +1
d. ir a b
Fin Autómata de Búsqueda de Valor
ESCRIBA Existe x en la posición i

Presencia
i<=n AND A[i]==x

Ausencia
ESCRIBA No exista el valor x

8d. Verificar si el número n es primo o no.


Los Números primos son aquellos que son divisible por si mismo y por la unidad.
Entonces, el índice debe empezar en 2 y terminar en la raíz cuadrada o en la mitad del
número.
Se toma entonces el intervalo del índice como de 2 hasta n/2
E0.
Lea n
i=2
CP:: i<=n/2 AND residuo(n,i) no sea 0 , ó sea, n no sea múltiplo de i
Autómata del Primo
b. si i<=n/2 AND residuo(n,i) no sea 0
c.
i=i+1
d.
ir a b
Fin Autómata del Primo

ESCRIBA n no es primo

Presencia
i<= n /2

Ausencia
ESCRIBA n es primo
AUTOMATA DE CICLO MIENTRAS QUE
Se realiza una sentencia(s) siempre y cuando se presente una condición. Esta condición
se denomina Condición de Permanencia(CP) .
Semánticamente se expresa Mientras que se cumpla con la condición de Permanencia
se realizan las sentencias
Es muy importante, tener en cuenta que la condición cambie de valor en algún instante.

E0

e
b
d

Este Autómata evalúa la condición de Permanencia antes de realizar sentencias


(momento c), por eso se denomina Autómata de Pre Condición de Permanencia

MOMENTOS QUE PASA

E0 Estado Previo al Autómata

b. Si se cumple CP(Condición de Permanencia)

c. Sentencia(s)

d. Ir al Momento b

e. Condición de Salida = negacion(CP)


SINTAXIS PYTHON:

while (<condición de Permanencia>):


bloque

El BNF es el siguiente:
<condición de Permanencia>: : - < condicionante > ∫ <operador lógico> <condicionante>
<operador lógico>: : - & |
<condicionante> : : - < variable > <operador de relación> <operación>
<operador de relación>:: - > < >= <= = <>
<operación> :: - <operando> ∫ <operador aritmético> <operando>
<operando>:: - <variable> | <numero>
<operador aritmético> :: - + / * -
<bloque>:: - <sentencia>
<sentencia>

11. Digitalización de un Numero


Un número es un conjunto de dígitos:
<Digito>:-|0|1|...|9|
<Numero>:- ∫ <digito>
Dado un número se debe llevar cada digito a una posición de un vector. Entonces,
La Unidad del Número a la Posición 1
La Décima del Número a la Posición 2
La Centésima del Número a la posición 3
y así sucesivamente.
E0:
Lea x // Numero a digitalizar
n=0 // Numero de Digitos
m=x // Guardar valor de x
Condición de Permanencia (CP)
CP:: x>0
Autómata Mientras Que
b. si m>0
c.
n=n+1
m= m /10
d. ir a b
Fin Autómata Mientras Que
Dimension A (n) // Se dimensiona el vector con n posiciones
m=x // Guardar valor de x
Para i=1 hasta n
A(i)= m mod 10
m= m /10
FinPara
Autómata Escribir Vector:( 1…n)
En PYTHON
from random import randint #libreria para randomicos
x = randint(101,1000000) # Se genera un numero aleatorio entre 1000...999999
print ("Numero Generado: ",x)
n=0
A=[];
m=x
while(m>0):
n=n+1
m=m//10
m=x
for i in range(n):
A.append(m % 10) #Se adiciona en el vector el residuo
m=m//10
print ("A[",i,"]=",A[i])

12. Búsqueda de un valor x en un vector no ordenado


E0:
Constante Entera n = 10
Entera A [n] Se declara el Vector A de n – posiciones
Lectura x // valor a buscar dentro del vector
Autómata de lectura de vector
Autómata de Escritura de vector
Condición de Permanencia (CP):: i<=n AND A[ i ] sea diferente de x
i=0
Autómata de Búsqueda de Valor:
b. i<=n AND A[ i ] sea diferente de x
c.
i= i +1
d. ir a b
Fin Autómata de Búsqueda de Valor

ESCRIBA Existe x en la posición i

Presencia
i<=n

Ausencia
ESCRIBA No exista el valor x
En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"]=",A[i])
x = int(input('Digite Número a Buscar: '))
i=0
while (i<n and A[i]!=x):
i=i+1
if(i<n):
print (x," esta en la posicion: ",i)
else:
print (x," no existe")

13. Verificar si el número n es primo o no.


Los Números primos son aquellos que son divisible por si mismo y por la unidad.
Entonces, el índice debe empezar en 2 y terminar en la raíz cuadrada o en la mitad del
número.
Se toma entonces el intervalo del índice como de 2 hasta n/2
E0.
Lea n
i=2
CP:: i<=n/2 AND residuo(n,i) no sea 0 , ó sea, n no sea múltiplo de i

Autómata del Primo


b. si i<=n/2 AND residuo(n,i) no sea 0
c.
i=i+1
d.
ir a b
Fin Autómata del Primo

ESCRIBA n no es primo

Presencia
i<= n /2

Ausencia
ESCRIBA n es primo

En PYTHON
from random import randint #libreria para randomicos
n = int(input('Digite Numero '))
i=2
while ((i<=n//2) and ((n % i)!=0)):
i=i+1
if(i<=n//2):
print (n," no es primo ")
else:
print (n," es primo ")
OTROS EJEMPLOS EN PYTHON PARA CICLO WHILE

14. Validación de un numero


k=0
while (k==0): #Condicion de Permanencia
n = int(input('Digite Numero [1000...9999]:'))
if(n>=1000 and n<10000): #Condicion de Salida
k=1
15. Búsqueda Lineal en un Vector Ordenado
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"]=",A[i])
for i in range(n-1): # desde 0...hasta n-2
for j in range(i+1,n): # desde i hasta n-1
if (A[i]>A[j]):
k=A[i]
A[i]=A[j]
A[j]=k
print("Vector Ordenado")
for i in range(n):
print ("A[",i,"]=",A[i])
x = int(input('Digite Número a Buscar: '))
i=0
while (i<n and A[i]<x):
i=i+1
if(i<n):
print (x," esta en la posicion: ",i)
else:
print (x," no existe")
16. Búsqueda Binaria (se hace en un Vector Ordenado)
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"]=",A[i])
for i in range(n-1): # desde 0...hasta n-2
for j in range(i+1,n): # desde i hasta n-1
if (A[i]>A[j]):
k=A[i]
A[i]=A[j]
A[j]=k
print("Vector Ordenado")
for i in range(n):
print ("A[",i,"]=",A[i])
x = int(input('Digite Número a Buscar: '))
menor=0
mayor=n-1
mitad=n//2
while (menor<=mayor and A[mitad]!=x):
mitad=(menor+mayor)// 2
if(A[mitad]>x):
mayor=mitad
if(A[mitad]<x):
menor=mitad
if(A[mitad]==x):
print (x," esta en la posicion: ",mitad)
else:
print (x," no existe")
ANEXO EJEMPLOS DE PROGRAMAS
Aporte de: Angélica Natalia Benitez.
Programación Básica
Ingeniería en Informatica
DUAD - Universidad Santo Tomas
**********VALIDAR/DIFERENCIA FECHA************
from datetime import datetime
import calendar
# Establecer formato de las fechas a introducir: dd/mm/aaaa
formato = "%d/%m/%Y"
# Bucle 'sin fin'
while True :
try:
# Introducir fecha inicial utilizando el formato definido
fecha_ini = input('Introducir fecha inicial (dd/mm/aaaa): ')
# Si no se introduce ningún valor se fuerza el final del bucle
if fecha_ini == "":
break
# Introducir fecha final utilizando el formato definido
fecha_fin = input('Introducir fecha final (dd/mm/aaaa): ')
# Si no se introduce ningún valor se fuerza el final del bucle
if fecha_fin == "":
break
# Se evaluan las fechas según el formato dd/mm/aaaa
fecha_ini = datetime.strptime(fecha_ini, formato)
fecha_fin = datetime.strptime(fecha_fin, formato)
# Se comprueba que fecha_hasta sea mayor o igual que fecha_desde
if fecha_fin >= fecha_ini:
salida = input('Seleccione el valor de salida: 1 Días, 2 Meses, 3 Años: ')
print(salida)
str(salida)
if salida == '1':
diferencia = fecha_fin - fecha_ini
print("Diferencia:", diferencia.days, "días")
if salida == '2':
diferencia2=diferencia/30
print("Diferencia:", diferencia2, "meses")
if salida == '3':
diferencia3=diferencia/365
print("Diferencia:", diferencia3, "años")
else:
print("La fecha fecha final debe ser mayor o igual que la inicial")
except:
print('Error en la/s fecha/s. ¡Inténtalo de nuevo!')
****** JUEGO DE MEMORIA*****
import random
animal = []
for i in range(5):
animales = input("Ingrese nombre de animal")
animal.append(animales)
random.shuffle(animal)
animal2 = animal
random.shuffle(animal2)
print(animal)
print(animal2)
jugador1 = int(0)
jugador2 = int(0)
largo=len(animal)-1
print(largo)
while largo!=0:
print('jugador 1. Opciones (0-',largo,')')
intento1J1 = int(input('primera opción:'))
intento2J1 = int(input('segunda opción:'))
if animal2[intento2J1] == animal[intento1J1]:
animal.pop(intento1J1)
animal2.pop(intento2J1)
largo=len(animal)
jugador1 = jugador1+1
print('jugador 2. Opciones (0-',largo,')')
intento1J2 = int(input('primera opción:'))
intento2J2 = int(input('segunda opción:'))
if animal2[intento2J2] == animal[intento1J2]:
animal.pop(intento1J2)
animal2.pop(intento2J2)
largo = len(animal)
jugador2 = jugador2 + 1
print(jugador1)
print(jugador2)
print(f"\t El número menor es: {b}")
********************CONJETURA DE ULAN*****
numero1 = int(input("Ingrese un número: "))
while numero1 < 0 or numero1 > 0:
if numero1 > 0:
while numero1 != 1:
if numero1 % 2 == 0:
numero1 /= 2
elif numero1 % 2 != 0:
numero1 = numero1 * 3 + 1
print("Valor", numero1)
if numero1 < 0:
print("Error, el número ingresado debe ser entero y positivo")
break
APORTES DEL DOCENTE
***************ORDENAR NUMEROS DE MAYOR A MENOR*******
print("\t Ordenar números de mayor a menor" )
print("")
print("Ingrese tres números enteros: ")
a = int(input(" "))
b = int(input(" "))
c = int(input(" "))
print("")
if a > b:
if a > c:
print(f"\t El número mayor es: {a}")
if b > c:
print(f"\t El número central es: {b}")
print(f"\t El número menor es: {c}")
elif c > b:
print(f"\t El número central es: {c}")
print(f"\t El número menor es: {b}")
if b > a:
if b > c:
print(f"\t El número mayor es: {b}")
if a > c:
print(f"\t El número central es: {a}")
print(f"\t El número menor es: {c}")
elif c > a:
print(f"\t El número central es: {c}")
print(f"\t El número menor es: {a}")
if c > a:
if c > b:
print(f"\t El número mayor es: {c}")
if b > a:
print(f"\t El número central es: {b}")
print(f"\t El número menor es: {a}")
elif a > b:
print(f"\t El número central es: {a}")
****Digitalizar un Numero ******
x=0
while(x<1 or x>9999):
x = int(input('Lea Numero a digitalizar[1...9999]: '))
n=0
A=[]
while(x>0):
A.append(x % 10)
n=n+1
x=x//10
for i in range(0,n):
if(i==0):
print (" Unidad: ", A[i])
elif(i==1):
print (" Decena: ", A[i])
elif(i==2):
print (" Centena: ", A[i])
elif(i==3):
print (" Miles: ", A[i])
***********factorial.py********
n = int(input('Digite Termino: '))
k=1
for i in range(1,n+1):
k*=i
print ('n!= ', k);
***********ulam.py********
numero1 = int(input("Ingrese un número: "))
while numero1 < 0 or numero1 > 0:
if numero1 > 0:
while numero1 != 1:
if numero1 % 2 == 0:
numero1 /= 2
elif numero1 % 2 != 0:
numero1 = numero1 * 3 + 1
print("Valor", numero1)
if numero1 < 0:
print("Error, el número ingresado debe ser entero y positivo")
break
CAPITULO 2. PROGRAMACION MODULAR EN PYTHON
Introducción. En la cultura popular, divide y vencerás hace referencia a un refrán que
implica resolver un problema difícil, dividiéndolo en partes más simples tantas veces como
sea necesario, hasta que la resolución de las partes se torna obvia. La solución del
problema principal se construye con las soluciones encontradas.
El método está basado en la resolución recursiva de un problema dividiéndolo en dos o
más subproblemas de igual tipo o similar. El proceso continúa hasta que éstos llegan a
ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las
soluciones a cada uno de los subproblemas se combinan para dar una solución al
problema original.
En Lógica de programación se conoce el termino de Modularidad como la capacidad de
dividir el problema en subproblemas independientes entre sí para dar solución a cada uno
de ellos.
Eso quiere decir, que se parte de un problema general y se dan soluciones específicos a
cada subproblema y se desea que cada subproblema sea independiente de los demás.
Cada solución de un subproblema se conoce con el nombre de modulo o subprograma.
Cada módulo o subproblema realiza tareas específicas.
En el paradigma de la programación orientada a objetos los módulos o subprogramas se
denominan métodos.
La programación que se basa en módulos o subprogramas se denomina Programación
Modular.

Un ejemplo de programación modular es el siguiente:

Un profesor quiere crear un programa para gestionar las notas de sus alumnos. Quiere
que dicho programa le permita realizar tareas tales como asignar notas, cambiar notas,
ver las notas según distintas calificaciones, etc. A continuación se tiene un gráfico que
representa una de las posibles divisiones del problema en módulos.
Características de Programación Modular

1. La semántica de variables y constantes se define bajo el Ambiente:


Global. Se reconoce en todos los módulos o subprogramas
En el caso del lenguaje de programación orientado a objetos C++ o java se
declara antes del desarrollo del primer método o antes de un método main (Declarativa)
Se declara una sola vez (Única en el ambiente Global)
Local. Se reconoce en el módulo o subprograma que la declara (Declarativa)
Se declara una sola vez (Única en el módulo o subprograma)

2. La estructura de un Módulo.
Encabezado del Módulo o Subprograma
Cuerpo
<Declaración de Variables locales>
<Sentencias>
FinCuerpo

3. Comunicación con un Modulo o Subprograma


La comunicación con un modulo o subprograma se hace mediante un llamado o se invoca
desde otro modulo o un programa principal denominado main().
En el caso del ejemplo de Notas Alumno el programa principal o main() puede llamar a los
módulos Asignar Notas, Borrar Nota, Visualizar
Entonces, un Modulo o Subprograma main() puede tener la siguiente estructura:
Encabezado del Modulo o Subprograma
Cuerpo
<Declaración de Variables locales>
<Sentencias>
Llamado a Módulos o Subprogramas
FinCuerpo

En el llamado a Módulos o Subprogramas se puede utilizar una comunicación con


Argumentos o sin Argumentos.

4. Argumento
Son los valores o nombres de las variables (por referencia) que viajan entre el Modulo o
subprograma principal y el modulo llamado.
En algunos casos, se habla de lista de Argumentos.
Encabezado del Módulo o Subprograma
Cuerpo
<Declaración de Variables locales>
<Sentencias>
Llamado a Módulos o Subprogramas (lista de Argumentos)
FinCuerpo
5. Parámetro
Son las variables en el subprograma o modulo que reciben los valores o nombres de las
variables (por referencia) que viajan desde el Modulo o subprograma principal que llama.
La semántica de cómo pueden ser declarados los argumentos y cómo estos argumentos
son pasados a los parámetros de los Módulos o Subprogramas, son definidos por cada
lenguaje de programación. Por lo tanto, esta semántica no es problema de la Lógica de
Programación.
Pero se debe tener en cuenta, el número de argumentos que son enviados deben ser
iguales al número de parámetros recibidos.
El parámetro o lista de parámetros se colocan en el encabezado del Módulo o
subprograma:
Encabezado del Módulo o Subprograma (lista de parámetros)
Cuerpo
<Declaración de Variables locales>
<Sentencias>
FinCuerpo
Ejemplo:
main ()
Cuerpo
Entero a, b
Lea a
Lea b
Suma (a, b)
FinCuerpo
Encabezado del Módulo Suma (c, d)
Cuerpo
FinCuerpo
Análisis:
a. Suma (a, b) es el llamado al módulo Suma
b. Suma (a, b) los argumentos son a, b
c. Modulo Suma (c, d) Es el encabezado del modulo Suma
d. Modulo Suma (c, d) los parámetros son c, d
e. El número de argumentos como el número de parámetros son iguales
6. Tipos de Módulos o Subprogramas

En el caso del Motor de un automóvil se puede analizar que:


- Existen valores que pueden ser devueltos a medida que el motor esta encendido y
en Marcha (ejecución) como los de velocidad (KM/Hora), revoluciones por minuto
(RPM), temperatura de agua, nivel de aceite
- Hay tareas que realiza el motor sin devolver valor como es la mezcla de aire,
aceite, agua, combustible y la transmisión ( cambios hacia adelante y hacia atrás)

6.1.1 Una funcion es un módulo que realiza una tarea específica y que puede regresar un
valor al módulo o subprograma principal que la invoque. Se debe utilizar la palabra
Retorno acompañado del valor o variable.
Funcion NombreFuncion (lista de parametros)
Cuerpo
<Declaración de Variables locales>
<Sentencias>
Retorno valor o variable
FinCuerpo
Ejemplo:
main ()
Cuerpo
Entero a, b, e
Lea a
Lea b
e=Suma (a, b)
Escriba e
FinCuerpo
Funcion Suma (c, d)
Cuerpo
Entero r
r=c+d
Retorno r
FinCuerpo
Análisis:
a. Se leen las variables a y b
b. Se llama la funcion Suma con argumentos a y b
c. Los valores de a y b son recibidos en la funcion Suma como parámetros c y d
d. Se suman c y d en r
e. Se retorna el valor de r
f. El valor de la suma se retorna en la variable r del subprograma main()
La siguiente gráfica representa lo expuesto con anterioridad:
6.1.2 Un Procedimiento es un modulo que realiza una tarea especifica y que no regresa
un valor al modulo o subprograma principal que la invoque.
Proc NombreProcedimiento (lista de parametros)
Cuerpo
<Declaración de Variables locales>
<Sentencias>
FinCuerpo

Ejemplo:
main ()
Cuerpo
Entero a, b, e
Lea a
Lea b
Suma (a, b)
FinCuerpo
Proc Suma (c, d)
Cuerpo
Entero r
r=c+d
Escriba r
FinCuerpo
Análisis:
a. Se leen las variables a y b
b. Se llama la funcion Suma con argumentos a y b
c. Los valores de a y b son recibidos en el procedimiento Suma como parámetros
cyd
d. Se suman c y d en r
e. Se escribe el valor de r
f. El flujo continua a la sentencia después del llamado suma(a,b)
La siguiente gráfica representa lo expuesto con anterioridad:
7. El sentido de la programación Modular
La programación Modular puede tener dos sentidos:

COLECCION O LIBRERÍA DE MODULOS CON UN MAIN

Variables Globales
Variables Globales
Modulo1(<lista de parametros>
Modulo1(<lista de parametros> Cuerpo
Cuerpo <variables locales>
<variables locales> <sentencias>
<sentencias> FinCuerpo
FinCuerpo
Modulo2(<lista de parametros> Modulo2(<lista de parametros>
Cuerpo Cuerpo
<variables locales> <variables locales>
<sentencias> <sentencias>
FinCuerpo FinCuerpo
Modulo main()
Cuerpo
<variables locales>
<sentencias>
Llamado a Modulos
FinCuerpo

Ejemplos para tener en cuenta:


Primer Ejemplo. Lectura, escritura y ordenamiento de un vector
Constante Entero n=5
Entero A[n] Variables y Constantes Globales
Entero i, j
Proc main()
Cuerpo
lectura()
escritura()
orden()
escritura()
FinCuerpo
Proc lectura()
Cuerpo
Para(i=1 ; i<=n; i++))
Escriba "A[",i,"]:"
Lea A[i]
Escriba
FinPara
FinCuerpo
Proc escritura()
Cuerpo
Escriba " vector leido ",
Para(i=1 ; i<=n; i++))
Escriba A[i]," "
FinPara
FinCuerpo
Proc orden()
Cuerpo
Entero k
Para (i=1 ; i<n; i++)
Para (j=i+1; j<=n; j++)
Si (A[i] > A[j]) Entonces
k= A[i]
A[i]=A[j]
A[j]=k
FinSi
FinPara
FinPara
FinCuerpo

Segundo Ejemplo. Lectura y escritura de un vector, encontrar el mayor y el menor de


un vector
Constante Entero n=5
Entero A[n] Variables y Constantes Globales
Entero i, j
Proc main()
Cuerpo
lectura()
escritura()
Escriba Min()
Escriba Max()
FinCuerpo
Proc lectura()
Cuerpo
Para(i=1 ; i<=n; i++)
Escriba "A[",i,"]:"
Lea A[i]
FinPara
FinCuerpo
Proc escritura()
Cuerpo
Escriba " vector leido ",
Para (i=1 ; i<=n; i++)
Escriba A[i]," "
FinPara
FinCuerpo
Funcion Min()
Cuerpo
Entero Menor
Para(i=1; i<=n; i++)
Si ( i==0) Entonces
Menor=A[i]
Sino
Si (A[i]<Menor) Entonces
Menor=A[i]
FinSi
FinSi
FinPara
FinPara
Retorno Menor
FinCuerpo
Funcion Max()
Cuerpo
Entero Mayor
Para(i=1; i<=n; i++)
Si ( i==0) Entonces
Mayor=A[i]
Sino
Si (A[i]>Mayor) Entonces
Mayor=A[i]
FinSi
FinSi
FinPara
FinPara
Retorno Menor
FinCuerpo
Funciones en Python
Las funciones se definen con la palabra clave def, seguida del nombre de la función y sus
parámetros. Otra forma de escribir funciones, aunque menos utilizada, es con la palabra
clave lambda (que aparece en lenguajes funcionales como Lisp).
El valor devuelto en las funciones con def será el dado con la instrucción return.
def:

Lambda:

Módulos

Son archivos de texto que contienen sentencias.

Los módulos son procesados con el uso de 3 sentencias principales:

Import: Permite a un cliente importar un módulo como un todo

From: Permite obtener algo particular de un módulo.

imp.reload: Provee una forma de recargar un módulo sin reiniciar python.

Por qué usar Módulos?

• Proveen una forma fácil de organizar componentes dentro de un sistema sirviendo


como un paquete de variables

• Todos los nombres definidos en el nivel superior de un archivo de módulo se


convierten en atributos del objeto módulo importado.

• Los módulos permiten vincular archivos individuales en un sistema de programa


más amplio.
Roles:

• Reuso de código

• Particionando del namespace del sistema.

• Implementar servicios compartidos o de datos.

Arquitectura de programa en Python:

• Un principal (nivel alto, script), complementado con cero o más archivos suplementarios
conocido como módulos. Entonces, el Script Principal contiene el flujo principal, con el
que se lanza la aplicación.

• Módulos: Conjunto de atributos como funciones, variables, clases. Deben ser llamados
para ejecutarse.

Usando un Módulo:

Con las sentencias import o from se utiliza un módulo como un todo o copiar parte de
este.

Sentencia import:

Obtener el modulo como un todo:


Sentencia from:

Permite copiar atributos (funciones, variables, clases) directamente al script sin cargar
todo el modulo.

Copia de una función:

Copia de Variables.
Sentencia import *:

Se copian funciones, variables, objetos del módulo.

Cuando se hace uso de la cláusula as para un alias

La cláusula as genera un alias de un módulo. En el siguiente ejemplo se genera el alias


de sp para el módulo subprocess para un uso posterior.

Caso cuando se hace uso del mismo atributo en dos módulos:

Cuando se usa el mismo atributo (funciones, variables, clases) definido en dos módulos
distintos, entonces, se declara un solo import:
Las variables globales de un Módulo

Las variables globales de un módulo se inicializan antes de la primera función (def). Una
variable global comparte y actualiza su valor (referencia en otros lenguajes) en una
función mediante la cláusula global. De lo contrario, se comporta como una variable local
de una función.
Imports vs Scopes
Namespaces en módulos:

Los módulos corresponden a archivos, y python crea un objeto modulo que contiene
todos los nombres asignados en ese archivo módulo. O sea que simplemente son
namespaces (lugar donde se crean los nombres, los cuales vienen siendo atributos
atributos como: funciones, variables, clases).

• Sentencias en el módulo corren en el primer import (orden de arriba a abajo)

• Asignaciones de más alto nivel crean atributos del módulo.

• namespaces del módulo pueden ser accedidos via __dict__ o dir(módulo).

• Módulos son de alcance simple (local es global).

Recargando Módulos:

Para forzar un módulo y reiniciarlo, se necesita de la función reload. La función reload


permite partes de un programa ser cambiadas sin detener el programa completo.

• reload es una funcion python, no una sentencia.

• reload es pasado a un objeto de modulo existente, no un nombre.

• reload pertenece a un módulo en Python 3.0, y debe ser importado.

• reload espera un objeto, previamente cargado satisfactoriamente.

• reload sobreescribe su namespace existente, mas allá de eliminarlo y re-crearlo.

• Asignaciones de nivel superior en el archivo reemplazan los nombres con nuevos


valores.

• from no se afecta por reload.


El programa main

Ejecutar una aplicación Python normalmente inicia con un script de nivel superior (o
programa principal (main program). Este ejecuta como cualquier otro modulo cargado
excepto que Python guarda el bytecode en memoria sin guardarlo a disco. El nombre del
módulo para el programa principal siempre será __main__, junto con la variable global
__name__.

La condición if __name__ == '__main__':

Orientado hacia un programa main que pregunta Si este módulo no ha sido importado
hacer lo siguiente...

Pero también, se hace uso cuando se hace un script que puede ser importado o no y se
ejecute por sí mismo....en el caso que se tenga un módulo…por ejemplo, que tiene varias
funciones y se quiere que este script pueda ser importado y las funciones puedan ser
manejadas por otro modulo, además, se quiere que también se ejecute directamente tal y
tal función (def)....

Entonces, se coloca el condicional.....

if __name__ == "__main__": #si se ejecuta directamente

funcion1(arg1, arg2) #ejecutar funcion1

funcion2()

.....
PRACTICA EN PYTHON. ADMINISTRACIÓN DE MODULOS
PRACTICA EN PYTHON. CREACION DE PAQUETES

Se crea una carpeta en la raíz de la aplicación de python:


Se le da el nombre de números

Dónde:

numeros: es un directorio (paquete)

__init__.py: es un script de python en blanco (necesario para identificar un directorio como


paquete)
perfecto.py: es un script de python (módulo) con funciones

Salve el archivo
Para poder acceder a un módulo de un paquete es necesario

import package[.subpackage.[.module]]

Para importar el paquete numeros, ejecute:

Para importa el modulo perfecto del paquete números:

Para acceder, a la función fibo del módulo perfecto del paquete números
Expresiones Regulares

Las expresiones regulares, también llamadas regex o regexp, consisten en patrones que
describen conjuntos de cadenas de caracteres.

El módulo re contiene una función que verifica si una cadena se ajusta a un determinado
criterio descrito mediante un patrón (match)

La expresión regular más sencilla consiste en una cadena simple, que describe un
conjunto compuesto tan solo por esa misma cadena.

Expresiones regulares: Patrones

Python también permite trabajar con patrones de expresiones regulares mediante


re.compile. A continuación se describe los patrones de expresiones regulares:

Patrón Descripción

Escapar

\ Escapa caracteres especiales de caracteres literales y literal de


especial.

Por ejemplo: /\(s\)/ partidos (s) 'mientras que' /(\s)/ coincide con
cualquier espacio en blanco y captura el partido.

Cuantificadores

{ n } , { n ,} , { n , Cuantificadores que coincida con el sub-patrón antes de un cierto


m},*,+,? número de veces. El sub-patrón puede ser un solo carácter, una
secuencia de escape, un patrón entre paréntesis o establecer un
carácter.

{ n } coincide exactamente n veces.


{ n ,} coincide con n o más veces.
{ n , m } partidos n a m veces.
* es la abreviatura de {0,} . Coincide con cero o más veces.
+ es la abreviatura de {1,} . Coincide con una o más veces.
? es la abreviatura de {0,1} . Coincide con cero o una vez.
Patrón Descripción

Por ejemplo: /o{1,3}/ coincide con "oo" en "dientes" y "o" en "la nariz".

Patrón delimitadores

( pattern ) , (?: Coincide con el patrón todo el contenido.


pattern )
( pattern ) captura partido.
(?: pattern ) no coinciden con la captura

Por ejemplo: /(d).\1/ partidos, y 'captura' papá en "abcdadef", mientras


que /(?:.d){2}/ partidos, pero no captura "DACD".

Nota: (?: pattern ) es una función de JavaScript 1.5.

Lookaheads

(?= pattern ) , Una búsqueda anticipada partidos sólo si la subexpresión precedente


(?! pattern ) es seguido por el patrón, pero el patrón no es parte del partido. La
subexpresión es la parte de la expresión regular que se buscarán
coincidencias.

(?= pattern ) coincide sólo si existe un patrón en la entrada siguiente.


(?! pattern ) coincide sólo si no hay un patrón en la entrada siguiente.

Por ejemplo: /Win(?=98)/ coincide con "Ganar" sólo si "Ganar" es


seguido por '98 '.

Nota: es una característica de búsqueda anticipada JavaScript1.5.

Alternancia

| La alternancia coincide con el contenido de uno y otro lado del carácter


de alternancia.

Por ejemplo: /(a|b)a/ 'coincide con' AA en "dseaas" y "ba" en "acbab".

Los conjuntos de caracteres

[ characters ] , [^ Coincide con cualquiera de los caracteres contenidos. Una serie de


characters ] personajes se puede definir mediante el uso de un guión.

[ characters ] coincide con alguno de los personajes que figuran.


[^ characters ] niega el conjunto de caracteres y todos los partidos,
pero los personajes que figuran
Patrón Descripción

Por ejemplo: /[abcd]/ coincide con alguno de una ',' b ',' c 'los
personajes', 'd' y puede ser abreviado a /[ad]/ . Los intervalos deben
tener en orden ascendente, de lo contrario se producirá un error. (Por
ejemplo: /[da]/ generará un error.)
/[^0-9]/ coincide con todos los personajes, pero dígitos.

Nota: La mayoría de los caracteres especiales de forma automática se


escapó a su significado literal en los juegos de caracteres.

Los caracteres especiales

^,$,.,?y Los caracteres especiales son caracteres que coinciden con algo más
todos los de lo que aparecen como.
personajes
mencionados ^ coincide con principio de la entrada (o de nueva línea con la bandera
anteriormente en m).
la tabla. $ partidos de final de la entrada (o fin de línea con la bandera m).
. coincide con cualquier carácter excepto una nueva línea.
? inmediatamente después de un cuantificador hace que el
cuantificador no expansivo (hace coincidir con mínimos en lugar del
máximo del intervalo definido).

Por ejemplo: /(.)*?/ partidos o nada''en todas las cadenas.

Nota:-No codiciosos partidos no son compatibles con los navegadores


más antiguos, como Netscape Navigator 4 o Microsoft Internet Explorer
5.0.

Literal caracteres

Todos los
personajes,
Asignan directamente a las características correspondientes.
excepto los que
tienen un
Por ejemplo: /a/ coincide con 'a' en "Los antepasados".
significado
especial.

Referencias inversas

\n Referencias inversas se hace referencia a lo mismo que un partido


capturado anteriormente. N es un entero positivo distinto de cero
diciéndole al navegador que capturó el partido de referencia para.

/(\S)\1(\1)+/g coincide con todas las ocurrencias de los tres no está en


blanco siguientes caracteres iguales entre sí.
Patrón Descripción

/<(\S+).*>(.*)<\/\1>/ coincide con cualquier etiqueta.

Por ejemplo: /<(\S+).*>(.*)<\/\1>/ partidos 'id="me"> <div texto </ div>


"en" <div id = texto \ "yo \" > texto </ texto> div ".

Personaje Escapes

\f , \r , \n , \t , \v , \f partidos de avance.
\0 , [\b] , \s , \S , \r retorno de carro
\w , \W , \d , \D , \n coincide con salto de línea.
\b , \B , \c X , \x \t tabulación horizontal partidos.
hh , \u hhhh \v tabulación vertical partidos.
\0 partidos de carácter NUL.
[\b] coincide con la tecla de retroceso.
\s coincide con los espacios en blanco (la abreviatura de
[\f\n\r\t\v\u00A0\u2028\u2029] ).
\S coincide con otra cosa que un espacio en blanco (la abreviatura de
[^\f\n\r\t\v\u00A0\u2028\u2029] ).
\w coincide con cualquier carácter alfanumérico (caracteres de palabra)
de los cuales destacan (abreviatura de [a-zA-Z0-9_] ).
\W coincide con cualquier palabra caracteres no (abreviatura de [^a-zA-
Z0-9_] ).
\d coincide con cualquier dígito (abreviatura de [0-9] ).
\D coincide con cualquier no-dígito (abreviatura de [^0-9] ).
\b coincide con un límite de palabra (la posición entre una palabra y un
espacio).
\B coincide con una palabra límite no (abreviatura de [^\b] ).
\c X coincide con un carácter de control. Por ejemplo: \cm partidos de
control-M.
\x hh coincide con el personaje con dos caracteres de HH código
hexadecimal.
\u hhhh coincide con el carácter Unicode con cuatro personajes de
hhhh código hexadecimal.

Ejemplos:
Cualquier letra en [a-z]
minúscula
Entero ^(?:\+|-)?\d+$

Solo letras y espacios


en blanco ^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|\s)+$
Correo electrónico /[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/
URL ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-
Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

Contraseña segura (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$


(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y
no puede contener caracteres espaciales)

Fecha ^\d{1,2}\/\d{1,2}\/\d{2,4}$
(Por ejemplo 01/01/2007)

Hora ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$
(Por ejemplo 10:45:23)
Módulo textwrap división de un texto

El módulo textwrap, entre muchas otras funcionalidades, a través del método


wrap(),permite dividir un texto extenso, obteniendo una lista con cada línea de texto
conservando la longitud deseada:

El módulo webbrowser Acceder al navegador Web

Abrir una URL en una nueva pestaña del navegador:


ANEXO PROGRAMAS PYTHON
***********************cola.py*****************
A=[]
n=10
minimo=0
maximo=0 # Representa la funcion len()
def adicion(m):
global A
global minimo
global maximo
global n
if(not llena()):
if(minimo==0):
minimo=1
maximo=maximo+1
A.append(m)
def imprime():
global A
global minimo
global maximo
print(" C O L A")
for i in range(minimo-1,maximo):
print(A[i])
def borrar():
global A
global minimo
global maximo
if(minimo==maximo):
minimo=0
maximo=0
A=[None]*0 # Inicializa el vector
else:
minimo=minimo+1
def vacia():
if(minimo==0):
return True
else:
return False
def llena():
if(maximo==n):
return True
else:
return False
*********** programa maincola.py ***************
from cola import *
if __name__=="__main__":
opcion=0
while(opcion!=4):
opcion=0
while(opcion<1 or opcion>5):
print("1. Adicion ")
print("2. Borrar")
print("3. Imprimir")
print("4. Salir ")
opcion = int(input('Opcion[1...4]: '))
if(opcion==1):
if(not llena()):
m = int(input('Valor: '))
adicion(m)
elif(opcion==2):
if(not vacia()):
borrar()
elif(opcion==3):
if(not vacia()):
imprime()
******************************mainnumero.py************

from numeros import *


if __name__=="__main__":
for i in range(100,1000):
digitos(i)
if magico():
print (i," es magico...")
if egolatra():
print (i," es egolatra...")
if perfecto():
print (i," es perfecto...")
k=amigos()
if k>0:
print (i,k," son amigos...",sep=" ")
**********************numeros.py*********
A=[]
B=[]
n=0
d=0
def cuantos(p):
c=0
while p>0:
p=p//10
c=c+1
return c
def digitos(m):
global A
global d
global n
A=[]
d=cuantos(m)
n=m
for i in range(1,d+1):
A.append(m%10)
m=m//10
return d
def imprime():
global A
return A
def sumabase10(C):
global d
s=0
for i in range(0,d):
s=s+(C[i]*10**i)
return s
def magico():
global n
global A
global B
A.sort()
B.extend(A)
B.reverse()
s=sumabase10(A)-sumabase10(B)
if n==s:
return True
else:
return False
def elevado():
global d
global A
s=0
for i in range(0,d):
s=s+A[i]**d
return s
def egolatra():
global n
s=elevado()
if n==s:
return True
else:
return False
def multiplos(m):
mitad=m//2
s=0
for i in range(1,mitad+1):
if m%i==0:
s+=i
return s

def perfecto():
global n
s=multiplos(n)
if s==n:
return True
else:
return False
def amigos():
global n
p=multiplos(n)
k=multiplos(p)
if n==k:
return p
else:
return 0
******************* mainexpresiones.py***************
from expresiones import *
if __name__=="__main__":
cedula="12345"
nombre="Richard"
apellido="Forero"
profesion="Informatico"
categoria="1"
menuExcepcion(1,cedula)
menuExcepcion(3,nombre)
menuExcepcion(3,apellido)
menuExcepcion(3,profesion)
menuExcepcion(1,categoria)
****************expresiones.py*******
import re
def expresionRegular(P,Patron):
compila = re.compile(Patron)
if (compila.match(P)):
return True
else:
return False
def soloDigitos(P):
Patron="^[0-9-]+$"
return expresionRegular(P,Patron)
def soloLetras(P):
Patron="^([a-z]|á|é|í|ó|ú|ñ|ü|^s)+$"
return expresionRegular(P,Patron)
def soloTitulada(P):
mayus = "[A-Z]{1}"
minus="^([a-z]|á|é|í|ó|ú|ñ|ü|^s)+$"
primera=P[0]
segunda=P[1:len(P)]
noerror=True
if not expresionRegular(primera,mayus):
noerror=False
if not expresionRegular(segunda,minus):
noerror=False
return noerror
def soloCorreo(P):
Patron = "^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$"
return expresionRegular(P,Patron)
def soloPorcentaje(P):
Patron = "^[0-9]+,[0-9]+%+$"
return expresionRegular(P,Patron)
def soloFecha(P):
Patron = "^[0-9]{2}/[0-9]{2}/[0-9]{4}$"
return expresionRegular(P,Patron)
def soloFlotante(P):
Patron = "^[0-9]+,[0-9]+$"
return expresionRegular(P,Patron)
def menuExcepcion(opc,P):
if opc==1:
if soloDigitos(P):
resultado=P+" Es Entero"
else:
resultado=P+" No Es entero"
if opc==2:
if soloLetras(P):
resultado=P+" Es sustantivo común"
else:
resultado=P+" No Es sustantivo común"
if opc==3:
if soloTitulada(P):
resultado=P+" Es titulada"
else:
resultado=P+" No Es titulada"
if opc==4:
if soloCorreo(P):
resultado=P+" Es correo"
else:
resultado=P+" No Es Correo"
if opc==5:
if soloPorcentaje(P):
resultado=P+" Es Porcentaje"
else:
resultado=P+" No Es Porcentaje"
if opc==6:
if soloFecha(P):
resultado=P+" Es Fecha"
else:
resultado=P+" No Es Fecha"
if opc==7:
if soloFlotante(P):
resultado=P+" Es Flotante"
else:
resultado=P+" No Es Flotante"
return resultado
***************diccionario.py*************
a = [12, 22, 15, 23, 19]
b = ['juan', 'pedro', 'simon', 'judas', 'pablo']
h=[(12,'juan'),(22,'pedro')]
c=dict.fromkeys(a, b)
def limpiar():
global c
c.clear()
def adicionar(k,v):
global c
c.setdefault(k,v)
def creardesdelista():
global c
global h
c=dict(h)
def elimina(k):
global c
del(c[k])
def imprimir(k):
global c
return c.get(k, False)
def todo():
global c
for clave, valor in c.items():
print ("El valor de la clave %s es %s" % (clave, valor))
def llaves():
global c
return list(c.keys())
def valores():
global c
return list(c.values())
def cuantos():
global c
return len(c)
CAPITULO 3. PROGRAMACION ORIENTADA A OBJETOS
Sistema Basado en Clase

En Python las clases se definen mediante la palabra clave class seguida del nombre de la
clase, dos puntos (:) y a continuación, indentado, el cuerpo de la clase:
class <nombreclase>:
atributos o variables del objeto
def __init__(self, <parametros):

def función(self):

def funcion(<parámetros>):

El método __init__ este nombre es una convención se puede denominar el método


constructor, o sea, se ejecuta justo después de crear un nuevo objeto a partir de la clase,
proceso que se conoce con el nombre de instanciación. El método __init__ sirve, como
sugiere su nombre, para realizar cualquier proceso de inicialización que sea necesario.

La cláusula self

1. La cláusula self sirve para referirse al objeto actual (this en java).


2. Necesaria para poder acceder o actualizar los atributos o variables de un objeto,
diferenciándose así, de las variables locales de un método. Por ejemplo:
self.variable=<valor> se inicializa
<variable>=self.variable se referencia
3. Se obliga la cláusula self en un método:
 En el constructor (__init__) tenga o no parámetros
 Cuando un método no tiene parámetros

Programación Orientada a Objetos

1. Para instanciar un objeto


Objeto=clase(<parámetros del constructor>)

2. Para acceder a un método


Se hace uso del signo de puntuación punto (.)
Objeto.metodo()
Análisis clausula self:
- Los métodos fibonacci, factorial no poseen parámetros, por lo tanto, se obiliga
como parámetro (self)
- Se cumple semántica mente __init__(self,n)
- En el constructor se inicializa la variable o atributo n como self.n=
- En los métodos métodos fibonacci, factorial se referencia tope=n.self
Otro análisis:
- Se carga el módulo donde está la clase series
- Se instancia el objeto s de la clase series enviándose como parámetro el valor de
6
- Se accede al método fibonacci con s.fibonacci()
- Se accede al método factorial con s.fibonacci()

En Python, todo son objetos. Las cadenas, por ejemplo, tienen métodos como upper(),
que devuelve el texto en mayúsculas o count(sub), que devuelve el número de veces que
se encontró la cadena sub en el texto.
3. Herencia

Hay tres conceptos que son básicos para cualquier lenguaje de programación orientado a
objetos: el encapsulamiento, la herencia y el polimorfismo.
En un lenguaje orientado a objetos cuando una clase (subclase) herede de otra clase
(superclase) haciendo que la subclase contenga todos los atributos y métodos que tenía
la superclase. No obstante al acto de heredar de una clase también se le llama a menudo
“extender una clase”.
Para indicar que una clase hereda de otra se coloca el nombre de la clase de la que se
hereda entre paréntesis después del nombre de la clase:
class <superclase>:
def __init__(self, <parametros):

def función(self):

def funcion(<parámetros>):

class subclase(superclase):
pass
la cláusula pass indica que se aplica la herencia
Pero, puede suceder que la subclase tenga sus propios métodos entonces
class subclase(superclase):
def __init__(self, <parametros>):

def función(self):

def funcion(<parámetros>):

En el caso que se necesitara llamar a un método de la superclase se usa la sintaxis:


superclase.metodo(self, <parámetros>)
o
superclase.metodo(self)
por ejemplo, para llamar al método __init__ la superclase se haría
superclase.__init__(self, valor); haciéndose necesario especificar el parámetro self.
4. Herencia múltiple

En Python, a diferencia de otros lenguajes como Java o C#, se permite la herencia


múltiple, es decir, una clase puede heredar de varias clases a la vez.
class <superclase1>:
def __init__(self, <parametros):

def función(self):

def funcion(<parámetros>):
class <superclase2>:
def __init__(self, <parametros):

def función(self):

def funcion(<parámetros>):

class subclase(superclase1,superclase2):
pass

En el caso de que alguna de las superclase tuviese métodos con el mismo nombre y
número de parámetros; la subclase implementara los métodos de las clases más a su
derecha en la definición. En el caso del ejemplo anterior, se implementa el método área
de la superclase áreas.
5. Polimorfismo

La palabra polimorfismo, del latín polys morphos (varias formas), se refiere a la habilidad
de objetos de distintas clases de responder al mismo mensaje. Esto se puede conseguir a
través de la herencia: un objeto de una clase derivada es al mismo tiempo un objeto de la
clase padre, de forma que allí donde se requiere un objeto de la clase padre también se
puede utilizar uno de la clase hija.

En ocasiones también se utiliza el término polimorfismo para referirse a la sobrecarga de


métodos, término que se define como la capacidad del lenguaje de determinar qué
método ejecutar de entre varios métodos con igual nombre según el tipo o número de los
parámetros que se le pasa.

En Python no existe sobrecarga de métodos (el último método sobreescribiría la


implementación de los anteriores)
6. Encapsulación

La encapsulación se refiere a impedir el acceso a determinados métodos y atributos de


los objetos estableciendo así qué puede utilizarse desde fuera de la clase.
En Python, el acceso a una variable o función viene determinado por su nombre: si el
nombre comienza con dos guiones bajos (y no termina también con dos guiones bajos) se
trata de una variable o función privada, en caso contrario es pública. Los métodos cuyo
nombre comienza y termina con dos guiones bajos son métodos especiales que Python
llama automáticamente bajo ciertas circunstancias.

Análisis:
__imprimedia(self):: es un método privado y si se accesa genera una excepción
AttributeError
f.__dia: es una variable privada y si se accesa no genera una excepción
7. Métodos especiales

Ya vimos al principio del artículo el uso del método __init__. Existen otros métodos con
significados especiales, cuyos nombres siempre comienzan y terminan con dos guiones
bajos. A continuación se listan algunos especialmente útiles.

__init__(self, args)
Método llamado después de crear el objeto para realizar tareas de inicialización.

__new__(cls, args)
Método exclusivo de las clases de nuevo estilo que se ejecuta antes que __init__ y que se
encarga de construir y devolver el objeto en sí. Es equivalente a los constructores de C++
o Java. Se trata de un método estático, es decir, que existe con independencia de las
instancias de la clase: es un método de clase, no de objeto, y por lo tanto el primer
parámetro no es self, sino la propia clase: cls.

__del__(self)
Método llamado cuando el objeto va a ser borrado. También llamado destructor, se utiliza
para realizar tareas de limpieza.

__str__(self)
Método llamado para crear una cadena de texto que represente a nuestro objeto. Se
utiliza cuando usamos print para mostrar nuestro objeto o cuando usamos la función
str(obj) para crear una cadena a partir de nuestro objeto.

__cmp__(self, otro)
Método llamado cuando se utilizan los operadores de comparación para comprobar si
nuestro objeto es menor, mayor o igual al objeto pasado como parámetro. Debe devolver
un número negativo si nuestro objeto es menor, cero si son iguales, y un número positivo
si nuestro objeto es mayor. Si este método no está definido y se intenta comparar el
objeto mediante los operadores <, <=, > o >= se lanzará una excepción. Si se utilizan los
operadores == o != para comprobar si dos objetos son iguales, se comprueba si son el
mismo objeto (si tienen el mismo id).

__len__(self)
Método llamado para comprobar la longitud del objeto. Se utiliza, por ejemplo, cuando se
llama a la función len(obj) sobre nuestro objeto. Como es de suponer, el método debe
devolver el número la longitud del objeto.

Existen bastantes más métodos especiales, que permite entre otras cosas utilizar el
mecanismo de slicing sobre nuestro objeto, utilizar los operadores aritméticos o usar la
sintaxis de diccionarios, pero un estudio exhaustivo de todos los métodos queda fuera del
propósito del artículo.
ANEXO PROGRAMAS PYTHON
ADMINISTRACION VECTORES
***************************mainarreglos.py.*********************
import arreglos
if __name__=="__main__":
n=int(input("Digite la dimensión:"))
B=arreglos.vector(n)
print("VECTOR LEIDO: ",B)
B.sort()
print("VECTOR ORDENADO ASCEDENTE: ",B)
B.sort(reverse=True)
print ("VECTOR ORDENADO DESCEDENTE: ",B)
***************************arreglos.py.*********************
from random import randint
def vector(n):
A=[];
for i in range(n):
A.append(randint(1,100));
return A
TIPOS DE NUMEROS
***************************mainnumeros.py.*********************
from numeros import *
if __name__=="__main__":
for i in range(100,1000):
N=numero(i)
if N.magico():
print (i," es magico...")
if N.egolatra():
print (i," es egolatra...")
if N.perfecto():
print (i," es perfecto...")
k=N.amigos()
if k>0:
print (i,k," son amigos...",sep=" ")
***************************numeros.py.*********************
A=[]
B=[]
n=0
d=0
def cuantos(p):
c=0
while p>0:
p=p//10
c=c+1
return c
def digitos(m):
global A
global d
global n
A=[]
d=cuantos(m)
n=m
for i in range(1,d+1):
A.append(m%10)
m=m//10
return d
def imprime():
global A
return A
def sumabase10(C):
global d
s=0
for i in range(0,d):
s=s+(C[i]*10**i)
return s
def magico():
global n
global A
global B
A.sort()
B.extend(A)
B.reverse()
s=sumabase10(A)-sumabase10(B)
if n==s:
return True
else:
return False
def elevado():
global d
global A
s=0
for i in range(0,d):
s=s+A[i]**d
return s
def egolatra():
global n
s=elevado()
if n==s:
return True
else:
return False
def multiplos(m):
mitad=m//2
s=0
for i in range(1,mitad+1):
if m%i==0:
s+=i
return s
def perfecto():
global n
s=multiplos(n)
if s==n:
return True
else:
return False
def amigos():
global n
p=multiplos(n)
k=multiplos(p)
if n==k:
return p
else:
return 0
EXPRESIONES REGULARES (TIPOLOGIA DE TOKENS)

***************************mainexpresiones.py.*********************
from expresiones import *
if __name__=="__main__":
cedula="12345"
nombre="Mario"
apellido="Contreras"
profesion="Informatico"
categoria="1"
menuExcepcion(1,cedula)
menuExcepcion(3,nombre)
menuExcepcion(3,apellido)
menuExcepcion(3,profesion)
menuExcepcion(1,categoria)
***************************expresiones.py.*********************
import re
class series:
n=0
def __init__(self,n):
self.n=n
def fibonacci(self):
a=0
b=1
c=0
tope=self.n
for i in range(1,tope+1):
c=a+b
b=a
a=c
return c
def factorial(self):
k=1
tope=self.n
for i in range(1,tope+1):
k*=i
return k
class sumatorias(series):
p=0
def __init__(self,p):
self.p=p
def sumar(self):
tope=self.p
s=0
for i in range(1,tope+1):
series.__init__(self,i)
s=s+(series.factorial(self)+series.fibonacci(self))
return s
class sumas(series):
pass
class multiplicaciones(series):
pass
class areas:
p=0
def __init__(self,p):
self.p=p
def area(self):
k=self.p**2
return k
class perimetros:
m=0
def __init__(self,m):
self.m=m
def area(self):
k=self.m**3
return k
class bases(areas,perimetros):
def __init__(self,m):
areas.__init__(self,m)
perimetros.__init__(self,m)
pass
class fechas:
__dia=0
__mes=0
def __init__(self,d,m):
self._dia=d
self._mes=m
def __imprimedia(self):
return self._dia
def __imprimemes(self):
return self._mes
def imprimedias(self):
return self._dia
def imprimemeses(self):
return self._mes
class numero:
A=[]
n=0
d=0
def __init__(self,n):
self.n=n
self.A=[]
self.d=0
m=self.n
while m>0:
self.A.append(m%10)
m=m//10
self.d=self.d+1
self.B=self.A
def suma10asc(self):
s=0
for i in range(0,self.d):
s=s+(self.B[i]*10**i)
return s
def suma10desc(self):
s=0
for i in range(0,self.d):
s=s+(self.A[(self.d-1)-i]*10**i)
return s
def magico(self):
self.A.sort()
s=self.suma10asc()-self.suma10desc()
if self.n==s:
return True
else:
return False
def elevado(self):
s=0
for i in range(0,self.d):
s=s+self.A[i]**self.d
return s
def egolatra(self):
s=self.elevado()
if self.n==s:
return True
else:
return False
def multiplos(self,m):
mitad=m//2
s=0
for i in range(1,mitad+1):
if m%i==0:
s+=i
return s
def perfecto(self):
s=self.multiplos(self.n)
if s==self.n:
return True
else:
return False
def amigos(self):
p=self.multiplos(self.n)
k=self.multiplos(p)
if self.n==k:
return p
else:
return 0
class expresion:
Patron=""
def __init__(self,Patron=""):
self.Patron=Patron
def expresionRegular(self,P,Patron):
compila = re.compile(Patron)
if (compila.match(P)):
return True
else:
return False
def soloDigitos(self,P):
Patron="^[0-9-]+$"
return self.expresionRegular(P,Patron)
def soloLetras(self,P):
Patron="^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|^s)+$"
return self.expresionRegular(P,Patron)
def soloTitulada(self,P):
mayus = "[A-Z]{1}"
minus="^([a-z]|á|é|í|ó|ú|ñ|ü|^s)+$"
primera=P[0]
segunda=P[1:len(P)]
noerror=True
if not self.expresionRegular(primera,mayus):
noerror=False
if not self.expresionRegular(segunda,minus):
noerror=False
return noerror
def soloCorreo(self,P):
Patron = "^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$"
return self.expresionRegular(P,Patron)
def soloPorcentaje(self,P):
Patron = "^[0-9]+,[0-9]+%+$"
return self.expresionRegular(P,Patron)
def soloFecha(self,P):
Patron = "^[0-9]{2}/[0-9]{2}/[0-9]{4}$"
return self.expresionRegular(P,Patron)
def soloFlotante(self,P):
Patron = "^[0-9]+,[0-9]+$"
return self.expresionRegular(P,Patron)
ADMINISTRACION VECTORES
***************************mainarreglos.py.*********************
import arreglos
if __name__=="__main__":
n=int(input("Digite la dimensión:"))
B=arreglos.vector(n)
print("VECTOR LEIDO: ",B)
B.sort()
print("VECTOR ORDENADO ASCEDENTE: ",B)
B.sort(reverse=True)
print ("VECTOR ORDENADO DESCEDENTE: ",B)
***************************arreglos.py.*********************
from random import randint
def vector(n):
A=[];
for i in range(n):
A.append(randint(1,100));
return A
ADMINISTRACION DE COLAS (FIFO)
***************************maincola.py.*********************
from cola import *
if __name__=="__main__":
opcion=0
while(opcion!=4):
opcion=0
while(opcion<1 or opcion>5):
print("1. Adicion ")
print("2. Borrar")
print("3. Imprimir")
print("4. Salir ")
opcion = int(input('Opcion[1...4]: '))
if(opcion==1):
if(not llena()):
m = int(input('Valor: '))
adicion(m)
elif(opcion==2):
if(not vacia()):
borrar()
elif(opcion==3):
if(not vacia()):
imprime()
***************************cola.py.*********************
A=[]
n=10
minimo=0
maximo=0 # Representa la funcion len()
def adicion(m):
global A
global minimo
global maximo
global n
if(not llena()):
if(minimo==0):
minimo=1
maximo=maximo+1
A.append(m)
def imprime():
global A
global minimo
global maximo
print(" C O L A")
for i in range(minimo-1,maximo):
print(A[i])
def borrar():
global A
global minimo
global maximo
if(minimo==maximo):
minimo=0
maximo=0
A=[None]*0 # Inicializa el vector
else:
minimo=minimo+1
def vacia():
if(minimo==0):
return True
else:
return False
def llena():
if(maximo==n):
return True
else:
return False
ADMINISTRACION DE COLA CIRCULAR
***************************maincolacircular.py.*********************
from colacircular import *
if __name__=="__main__":
opcion=0
while(opcion!=4):
opcion=0
while(opcion<1 or opcion>5):
print("1. Adicion ")
print("2. Borrar")
print("3. Imprimir")
print("4. Salir ")
opcion = int(input('Opcion[1...4]: '))
if(opcion==1):
if(not llena()):
m = int(input('Valor: '))
adicion(m)
elif(opcion==2):
if(not vacia()):
borrar()
elif(opcion==3):
if(not vacia()):
imprime()
***************************colacircular.py.*********************
A=[]
n=10
minimo=0
maximo=0 # Representa la funcion len()
def adicion(m):
global A
global minimo
global maximo
global n
if(not llena()):
if(minimo==0):
minimo=1
if(max==n-1): # Extremo superior de la Cola(n-1)
maximo=0
else:
maximo=maximo+1
A.append(m)
def imprime():
global A
global minimo
global maximo
global n
print(" C O L A")
if(minimo<=maximo):
for i in range(minimo-1,maximo):
print(A[i])
else:
for i in range(minimo-1,n):
print(A[i])
for i in range(1,maximo):
print(A[i])
def borrar():
global A
global minimo
global maximo
if(minimo==maximo):
minimo=0
maximo=0
A=[None]*0 # Inicializa el vector
else:
minimo=minimo+1
def vacia():
if(minimo==-1):
return True
else:
return False
def llena():
if((minimo==1 and maximo==n) or (minimo-maximo==1)):
return True
else:
return False
ADMINISTRACION DE PILAS (LIFO)
***************************mainpila.py.*********************
from pila import *
if __name__=="__main__":
opcion=0
while(opcion!=4):
opcion=0
while(opcion<1 or opcion>5):
print("1. Apilar ")
print("2. Desempilar")
print("3. Imprimir")
print("4. Salir ")
opcion = int(input('Opcion[1...4]: '))
if(opcion==1):
if(not llena()):
m = int(input('Valor: '))
apila(m)
elif(opcion==2):
if(not vacia()):
desempila()
elif(opcion==3):
if(not vacia()):
imprime()
***************************pila.py.*********************
A=[]
n=10
tope=0
def apila(m):
global A
global tope
global n
if(not llena()):
tope=tope+1
A.append(m)
def imprime():
global A
global tope
print(" P I L A")
for i in range(1,tope+1):
print(A[tope-i])
def desempila():
global A
global tope
if(tope==1):
tope=0
A=[None]*0 # Inicializa el vector
else:
tope=tope-1
def vacia():
if(tope==0):
return True
else:
return False
def llena():
if(tope==n):
return True
else:
return False
ADMINISTRACION DE LISTAS
*****************mainlistas.py******************
from listas import *
if __name__=="__main__":
L=Lista()
opcion=0
while(opcion!=3):
opcion=0
while(opcion<1 or opcion>3):
print("==============")
print("1. Adicion ")
print("2. Imprimir")
print("3. Salir ")
opcion = int(input('Opcion[1...3]: '))
if(opcion==1):
m = int(input('Valor: '))
L.adicion(m)
elif(opcion==2):
L.imprimir()

***************************listas.py.*********************
class Nodo:
def __init__(self, info=None, sig=None):
self.info = info
self.sig = None
class Lista:
def __init__(self) :
self.longitud = 0
self.cabeza = None
self.ult=None
self.p = None
self.q = None
self.r = None
def imprimir(self):
self.p=self.cabeza
print(" L I S T A")
while(self.p != None):
print(self.p.info)
self.p = self.p.sig
def esta(self,x):
p=self.cabeza
q=self.cabeza
while(self.p!= None and self.p.info!=x):
self.q=self.p
self.p=self.p.siguiente
if(self.p!= None):
return True
else:
return False
def adicion(self, x):
if(not self.esta(x)):
self.r = Nodo(x)
if(self.cabeza==None):
self.cabeza=self.r
else:
self.ult.sig=self.r
self.ult=self.r
self.longitud = self.longitud + 1
def __del__(self):
print("Objeto destruido")
ADMINISTRACION ARBOL NARIO
***************************main.py.*********************
import binario
nario=binario.Arbolario()
tot={0:'Continentes',1:'-America-------',2:'-Asia-------',3:'-Oceania-------',4:'-Africa-------',5:'-
Europa-------',
1.1:'--Mexico',1.2:'--Canada',1.3:'--Chile',
2.1:'--Armenia',2.2:'--Rusia',2.3:'--Irak',
2.21:' **Moscu',2.22:' **Novosibirsk',2.23:' **Samara',
3.1:'--Samoa',3.2:'--Australia',3.3:'--Tonga',
4.1:'--Angola',4.2:'--Egipto',4.3:'--Libia',
5.1:'--Alemania',5.2:'--Finlandia',5.3:'--Irlanda'}
nario.insertar(0)
nario.insertar(1,0)
nario.insertar(2,0)
nario.insertar(3,0)
nario.insertar(4,0)
nario.insertar(5,0)
nario.insertar(1.1,1)
nario.insertar(1.2,1)
nario.insertar(1.3,1)
nario.insertar(2.1,2)
nario.insertar(2.2,2)
nario.insertar(2.3,2)
nario.insertar(3.1,3)
nario.insertar(3.2,3)
nario.insertar(3.3,3)
nario.insertar(4.1,4)
nario.insertar(4.2,4)
nario.insertar(4.3,4)
nario.insertar(5.1,5)
nario.insertar(5.2,5)
nario.insertar(5.3,5)
nario.insertar(2.21,2.2)
nario.insertar(2.22,2.2)
nario.insertar(2.23,2.2)
datos=[]
if __name__== "__main__":
while (True):
print("*****--Menu--*****\n" +
"1.insertar\n" +
"2.preorden\n" +
"3.inorden\n" +
"4.posorden\n"+
"5. salir \n")
n = input("Ingrese la opcion: \n")
if n == "1":
nodo = input("Digite el valor a agregar: \n")
nario.insertar(nodo)
if n == "2":
datos=nario.preorden()
g=len(datos)-1
t=-1
print(len(datos))
while t != g:
t=t+1
print(tot[datos[t]])
if n == "3":
datos = nario.inorden()
g = len(datos) - 1
t = -1
print(len(datos))
while t != g:
t=t+1
print(tot[datos[t]])
if n == "4":
datos = nario.posorden()
g = len(datos) - 1
t = -1
print(len(datos))
while t != g:
t=t+1
print(tot[datos[t]])
if n== "5":
exit(0)
***************************binario.py.*********************
class Nodo:
def __init__(self,valor):
self.info=valor
self.hijos= []
class Arbolario:
def __init__(self):
self.__raiz=None
self.datos=[]
def __buscar(self, valor, hermanos=None, pos=0):
if (pos >= len(hermanos)):
return None
if (hermanos[pos].info == valor):
return hermanos[pos]
nodo = self.__buscar(valor, hermanos[pos].hijos)
if (nodo != None):
return nodo
nodo = self.__buscar(valor, hermanos, pos + 1)
if (nodo != None):
return nodo
return None
def preorden(self, nodos=None, pos=0):
if (nodos == None):
if (self.__raiz == None):
return
nodos = [self.__raiz]
if (pos >= len(nodos)):
return
self.datos.append(nodos[pos].info)
self.preorden(nodos[pos].hijos)
self.preorden(nodos, pos + 1)
return self.datos
def inorden(self, nodos=None, pos=0):
if (nodos == None):
if (self.__raiz == None):
return
nodos = [self.__raiz]
if (pos >= len(nodos)):
return
self.preorden(nodos[pos].hijos)
self.datos.append(nodos[pos].info)
self.preorden(nodos, pos + 1)
return self.datos
def posorden(self, nodos=None, pos=0):
if (nodos == None):
if (self.__raiz == None):
return
nodos = [self.__raiz]
if (pos >= len(nodos)):
return
self.preorden(nodos[pos].hijos)
self.preorden(nodos, pos + 1)
self.datos.append(nodos[pos].info)
return self.datos
def insertar(self, valor, val_padre = None ,pos_hijo = 0):
if(self.__raiz==None):
self.__raiz=Nodo(valor)
return True
if(val_padre == self.__raiz.info):
padre=self.__raiz
else:
padre = self.__buscar(val_padre,self.__raiz.hijos,0)
if (padre != None):
padre.hijos.insert(pos_hijo,Nodo(valor))
return True
return False
def padre_mas_hijos(self, nodos=None, pos=0):
if (nodos == None):
if (self.__raiz == None):
return None
nodos = [self.__raiz]
self.__mayorpadre = self.__raiz
if (pos >= len(nodos)):
return 0
if (len(nodos[pos].hijos) > len(self.__mayorpadre.hijos)):
self.__mayorpadre = nodos[pos]
self.padre_mas_hijos(nodos[pos].hijos)
self.padre_mas_hijos(nodos, pos + 1)
return self.__mayorpadre.info
ANEXO. PyCharm IDE para Python
Python es uno de los lenguajes de programación más fáciles de aprender debido a su
sintaxis clara y la sólida comunidad de desarrolladores que lo usa para múltiples tareas.
Precisamente estas virtudes han hecho de Python el lenguaje base en muchas
instituciones educativas de primer nivel, como el Massachusetts Institute of
Technology, que lo usa para iniciar a sus estudiantes en la programación y las ciencias
de computación en general. En contraparte, cuando alguien decide aprender a programar
por cuenta propia, resulta elemental contar con ciertos elementos que permitan transitar
mejor por este mundo interesante y exigente, toda vez que los primeros pasos resultan
complicados y a veces hacen desistir a los nuevos programadores. Uno de
estos elementos clave es PyCharm.
Aprender a programar combina distintos elementos como guías, tutoriales y muchas
páginas de documentación. Sin embargo, a veces se deja de lado un factor clave: la
correcta elección de un IDE.
¿Qué es un IDE?
Un IDE o Integrated Development Environment, es una aplicación destinada a brindar
servicios integrales al desarrollador en su trabajo, o dicho más simple, es un programa
que nos permite construir código de una forma más sencilla o didáctica. Ejemplos de IDE
importantes en el desarrollo de software actual son Atom o Visual Studio Code.
Python no es la excepción y a lo largo de los últimos años han venido surgiendo nuevos
productos que buscan consolidarse dentro de la preferencia de desarrolladores con todo
tipo de hábitos y manías. Sin duda, uno de ellos y quizás el más importante, es PyCharm.
Conociendo a PyCharm
PyCharm es uno de los entornos de desarrollo más completos para Python. Es parte del
suite de herramientas de programación ofrecidas por JetBrains, que cuenta con entornos
para construir código en distintos idiomas como PHP y Ruby.
Primeros pasos en PyCharm
Lo primero que se debe realizar es obtener el programa, para ello nos dirigimos a la
página principal de PyCharm o directamente a la zona de descargas.
Existen básicamente dos opciones de descarga, la opción Professional y la opción
Community. La primera de ellas ofrece todos los atributos del programa, tiene un costo
anual de 89$ y sus principales características están orientadas al uso de Python
enfocado al desarrollo web (a través de frameworks como Django y Flask). Se puede
acceder a una versión de prueba gratuita, que permite descubrir las principales
características del programa.
Mientras tanto, la versión Community es una versión gratuita y está orientada al
desarrollo científico, pero el editor puede usarse para realizar cualquier programa que
involucre el manejo de Python.
La instalación es sencilla y permite seleccionar la asociación de archivos .py por defecto
para la ejecución del programa.
Interfaz de PyCharm
La interfaz de PyCharm a primera vista es bastante intuitiva y guarda mucha relación
con otras plataformas de desarrollo, como Sublime Text, presentando un editor de
código en el centro y el manejo de directorios y archivos en la parte izquierda.
El menú superior es el distintivo para estas herramientas y despliega opciones que se
pueden usar de acuerdo a la preferencia del programador, como por ejemplo, manejar las
ventanas que deseamos puedan verse en el área de trabajo.
Ejecutando código con PyCharm
Para correr nuestro primer programa con este potente IDE, es necesario crear un
proyecto nuevo y en su interior crear un archivo de Python, como se puede ver en la
imagen con el archivo prueba.py:

Una de las características más importantes de PyCharm es la posibilidad de ejecutar


código con únicamente un click. En el desarrollo sin IDE, se necesita inicializar el
código desde la consola o línea de comandos. Sin embargo, en PyCharm esto se puede
hacer sencillamente con el botón Run:

Al ejecutar el código en la parte inferior del editor de texto se despliega una ventana
pequeña como terminal en donde se observa el resultado del programa, lo que facilita el
trabajo del programador y permite se enfoque en el código que está desarrollando.
Por otra parte, PyCharm tiene un registro detallado de errores que permite encontrar
problemas surgidos en el código. Este sistema de resolución de errores de sintaxis es
importante, dado que es prácticamente imposible programar sin cometer alguna falla de
este tipo en cualquier momento.

Ventajas de PyCharm
Trabajar con PyCharm tiene ventajas básicas (similares a las ofrecidas por otros IDE)
pero también algunas específicas a las cuales debe su popularidad. Es así
que PyCharm tiene un editor inteligente, que permite completar código con algunos
atajos de teclado. Asimismo, permite navegar a través de nuestro código, saltando entre
las clases y métodos creados, haciendo el flujo de trabajo mucho más dinámico.
Una de las características notables de PyCharm es la posibilidad que tiene
de refactorizar el código, que en términos generales, significa modificar el código sin
comprometer la ejecución del mismo.
Esta operación se realiza de forma constante dentro de la Ingeniería de Software y es
más conocida como limpiar el código para que este pueda ser interpretado con facilidad
cuando hay distintas personas integrando un equipo de trabajo.
Por último, la gran cantidad de desarrolladores que trabajan con PyCharm ha generado
que se tenga una gran cantidad de temas y plugins que se pueden usar para trabajar
más cómodamente.
Ellos permiten la integración con otros lenguajes y frameworks (como Node JS) y un
acceso más fácil a bases de datos y debugging.
Previamente
Abra bloc de notas y copie el siguiente código:
from random import randint #libreria para randomicos
n = int(input('Digite Dimension: '))
A=[];
for i in range(n):
A.append(randint(1,100)) #Se adiciona en el vector un numero randomico
print ("A[",i,"]=",A[i])
for i in range(n-1): # desde 0...hasta n-2
for j in range(i+1,n): # desde i hasta n-1
if (A[i]>A[j]):
k=A[i]
A[i]=A[j]
A[j]=k
print("Vector Ordenado")
for i in range(n):
print ("A[",i,"]=",A[i])
x = int(input('Digite Número a Buscar: '))
menor=0
mayor=n-1
mitad=n//2
while (menor<=mayor and A[mitad]!=x):
mitad=(menor+mayor)// 2
if(A[mitad]>x):
mayor=mitad
if(A[mitad]<x):
menor=mitad
if(A[mitad]==x):
print (x," esta en la posicion: ",mitad)
else:
print (x," no existe")
Descargar Versión Community

De la dirección: https://www.jetbrains.com/es-es/pycharm/download/

Para luego proceder a abrirlo o ejecutarlo como administrador,


Luego de aceptar los permisos de permisión de que el programa pueda realizar cambios
en el dispositivo, se realiza instalación del software

Pulsar tecla Next>

Pulsar tecla Next>


Chequear todas las casillas>>pulsar tecla Next>
Luego procedemos a darle a Install,

Pulsar tecla Install>


Se chequea la casilla Run PyCharm Community Edition
Pulsar Tecla Finish
Pulsar Tecla Finish
Inicio de Aplicación
Aparece en la barra de tareas…

Seleccionar Open…
Seleccionar busquedabinaria.py>>Menu Run>>Run
Proyecto con llamado a subprogramas
Práctica realizada por estudiante: Danielmer Solis Arrieta
Teoría de Grafos
Universidad Santo Tomas
DUAD Ingeniería en Informática

Seleccionar New Project

Nombre de proyecto: Grafos


Reemplazar contenido por…

from Vertice import Vertice


class Grafos:
def __init__(self):
self.listaVertices = {}
self.numVertices = 0

def agregarVertice(self,clave):
self.numVertices = self.numVertices + 1
nuevoVertice = Vertice(clave)
self.listaVertices[clave] = nuevoVertice
return nuevoVertice

def obtenerVertice(self,n):
if n in self.listaVertices:
return self.listaVertices[n]
else:
return None

def __contains__(self,n):
return n in self.listaVertices

def agregarArista(self,de,a,costo=0):
if de not in self.listaVertices:
nv = self.agregarVertice(de)
if a not in self.listaVertices:
nv = self.agregarVertice(a)
self.listaVertices[de].agregarVecino(self.listaVertices[a], costo)

def obtenerVertices(self):
return self.listaVertices.keys()

def __iter__(self):
return iter(self.listaVertices.values())
if __name__=="__main__":
g=Grafos()
for i in range(6):
g.agregarVertice(i)
g.listaVertices
g.agregarVertice(0)
g.agregarVertice(1)
g.agregarVertice(2)
g.agregarVertice(3)
g.agregarVertice(4)
g.agregarVertice(5)
g.agregarArista(0, 1, 5)
g.agregarArista(0, 5, 2)
g.agregarArista(1, 2, 4)
g.agregarArista(2, 3, 9)
g.agregarArista(3, 4, 7)
g.agregarArista(3, 5, 3)
g.agregarArista(4, 0, 1)
g.agregarArista(5, 4, 8)
g.agregarArista(5, 2, 1)
print(g.listaVertices)
for v in g:
for w in v.obtenerConexiones():
print("( %s , %s )" % (v.obtenerId(), w.obtenerId()))Ahora, sobre la carpeta
venv>>new>>Python File

Nombre: Vertice
Reemplazar contenido archivo por:
class Vertice:
def __init__(self,clave):
self.id = clave
self.conectadoA = {}
def agregarVecino(self,vecino,ponderacion=0):
self.conectadoA[vecino] = ponderacion
def __str__(self):
return str(self.id) + ' conectadoA: ' + str([x.id for x in self.conectadoA])
def obtenerConexiones(self):
return self.conectadoA.keys()
def obtenerId(self):
return self.id
def obtenerPonderacion(self,vecino):
return self.conectadoA[vecino]
Quedando:

Ahora,
CAPITULO 4 ARCHIVOS EN PYTHON
TEORIA DE ARCHIVOS
Un archivo es conjunto de datos almacenados permanentemente en unidades como
discos duros (internos y externos), USB, etc.
Existen dos formas de almacenar este conjunto de datos:
- Archivo de Texto
Secuencia de caracteres almacenados
- Archivo de Datos
Existe una organización y estructuración.
El archivo se organiza como un conjunto de registros.
Cada registro se estructura como una colección de campos.
Si este archivo se representara como una tabla se diría:
- Registros son las filas
- Campos son las columnas

Nota. El propósito de este documento es el desarrollo de archivo con organización y una


estructuración
1. Estructura de Información
Es la estructura lógica que corresponde con la abstracción (TDA) de como esta
organizada la información.
La estructura de información inicialmente representa una entidad, objeto o sujeto de la
realidad que se puede describir de acuerdo a sus atributos.
Cada atributo representa una información.
Cada información tiene un dominio de valores o dominio de datos.
El dominio de valores determina su formato, a saber, Entero, Flotante, Booleano, Cadena,
Fecha.
Cuando se representa Información+Formato se determina un campo.
Entonces, una Estructura de información se define como una colección de campos, por
ejemplo:
Estructura Alumno
Codigo: Entero
Nombre: Cadena[30]
Correo: Cadena[30]
Telefono: Entero
Domicilio: Cadena[30]
FinEstructura
La estructura Alumno posee los campos código, nombre, correo electrónico, domicilio,
teléfono.

2. Estructura de Datos
Valor de un campo se define como Dato
Una estructura de datos es la colección de datos almacenados en un computador.
Existen dos versiones de estructuras de datos:
- corresponde a la que adoptan los datos en memoria que en algunos casos se denomina
variables de estructuras, nodos que se pueden manipular en vectores, listas, arboles,
grafos
- su almacenamiento permanente o registro físico
Nota. El registro físico se carga mediante lectura a un registro lógico en memoria. Este
registro lógico debe ser declarado como variable de estructura.

3. Tipos de Acceso a Archivo


Secuencial
Se acceden cada uno de los registros desde el primero hasta el último o hasta aquel que
cumpla con cierta condición de búsqueda.
En este documento se representa el final del archivo mediante una función EOF (archivo
de datos)
Ejemplo:
Mientras que no EOF (alumnos) and no existe Haga
Directo
Cada registro puede leerse / escribirse de forma directa solo con expresar su dirección en
el archivo por él numero relativo del registro.
En este documento se hace uso de la función IrAReg (numero relativo de registro) para
acceder al registro numero relativo de registro
Ejemplo:
IrAReg(5)
Lectura ()
Se accede al registro número 5 y se realiza una lectura

4. Operaciones de apertura y creación de Archivos


Verificar existencia de Archivo
Se verifica existencia de archivo de datos
En este documento se hace uso de la función Existearch (nombre archivo)
Ejemplo:
Existearch(“alumno.dat”)
Creación de Archivo
Cuando no existe el archivo de datos o se desea sobre escribir si existiese.
En este documento se hace uso de la función Crear (variable archivo, nombre archivo)
Ejemplo:
alumnos = Archivo de Alumno //variable archivo o registro físico
Crear (alumnos,”alumno.dat”)
Apertura de Archivo
Se abre un archivo para acceder a los registros del mismo.
Para la apertura del archivo se debe verificar si existe archivo de datos.
En este documento se hace uso de la función Abrir (variable archivo, nombre archivo)
Ejemplo:
alumnos = Archivo de Alumno //variable archivo o registro físico
Abrir (alumnos,”alumno.dat”)
Aplicación
Un procedimiento donde se puede aplicar los anteriores casos:
Procedimiento apertura (Var alumnos:Archivo de Alumno)
// si existe el archivo de datos se abre
// sino existe se crea
Si Existearch (”alumno.dat”) Entonces
Abrir (alumnos,”alumno.dat”)
sino
Crear (alumnos,”alumno.dat”)
Finsi
FinProcedimiento

5. Operaciones de Lectura y Escritura


En este documento se emplea un formato de operación que especifica el flujo de datos de
la siguiente manera:
Operación (Destino, Fuente)
Lectura de Registro
Cuando se desea hacer lectura de un registro existente en el archivo de datos. Este
registro puede ser accedido de manera secuencial o directa.
En este documento se hace uso de la función:
Lectura (variable de estructura, variable de archivo)
Esta función indica que se transporta los valores del registro físico (fuente) al registro
lógico (destino)
Ejemplo:
alumnos = Archivo de Alumno //variable archivo o registro físico
registro : Alumno //variable de estructura o registro lógico
Lectura (registro, alumnos)
Escritura de Registro
Cuando se desea almacenar un registro ya sea nuevo o existente se utiliza la operación
de escritura sobre registro.
En este documento se hace uso de la función:
Escritura (variable de archivo, variable de estructura)
Esta función indica que se transporta los valores del registro lógico (fuente) al registro
físico (destino)
Ejemplo:
alumnos = Archivo de Alumno //variable archivo o registro físico
registro : Alumno //variable de estructura o registro lógico
Escritura (alumnos, registro)
6. Actualizaciones en un Archivo
Las operaciones de actualizaciones se orientan hacia el dominio horizontal o sea la
afectación de cantidad de registros de un archivo.
Adición de un Registro
1. Si se tiene identificador único se verifica si en el dominio de valores de este campo
en el archivo existe. Si existe no se adiciona.
2. Se captura los valores en los campos del registro lógico
3. Se adiciona un registro en blanco al final del archivo (EOF)
4. Se escribe en el registro adicionado el contenido del registro lógico o sea se
transporta los valores de los campos del registro lógico a los campos del registro
físico
Edición de un Registro
1. Si se tiene identificador único se verifica si en el dominio de valores de este campo
en el archivo existe. Si no existe no se edita.
2. Se accede al registro a modificar (acceso directo)
3. Se lee el registro o sea se transporta los valores del registro físico al registro lógico
4. Se modifican los valores de los campos del registro lógico
5. Se accede al registro a modificar (acceso directo)
6. Se escribe en el registro el contenido del registro lógico o sea se transporta los
valores de los campos del registro lógico a los campos del registro físico
Borrar Registro
1. Si se tiene identificador único se verifica si en el dominio de valores de este campo
en el archivo existe. Si no existe no se borra.
2. Se accede al registro a borrar (acceso directo)
3. Se elimina registro

7. Consulta de un registro
1. Si se tiene identificador único se verifica si en el dominio de valores de este
campo en el archivo existe. Si no existe no se consulta.
2. Se accede al registro a consultar (acceso directo)
3. Se lee el registro o sea se transporta los valores del registro físico al registro
lógico
4. Se consulta por pantalla los valores de los campos del registro lógico
ARCHIVOS EN PYTHON
Clase file
Python cuenta con una clase llamada file que permite crear, escribir y leer datos de un
archivo de texto.
En líneas generales, en python los archivos se leen y se escriben en 3 pasos:
Lectura:
1. Abrir (open)
2. Leer (read, readlines, readline)
3. Cerrar (close)
Escritura:
1. Abrir (open)
2. Guardar (write)
3. Cerrar (close)
Creación de un objeto file
Para crear un objeto de la clase file se hace uso de la función open. Cuando llamamos a
dicha función le pasamos como primer parámetro el nombre del archivo de texto y el
modo de apertura del mismo:
open(nombrearchivo[, modo[, tamañobuffer]])
Si el archivo de texto se encuentra en la misma carpeta que nuestro programa no
necesitamos indicar el path (camino). Los modos de apertura del archivo de texto
pueden ser:
• 'r' Abre el archivo para lectura (debe existir el archivo)
• 'w' Crea el archivo y lo abre para escribir
• 'a' Abre el archivo para escribir. Se crea si el archivo no existe. Solo podemos
agregar datos al final
Creación de un archivo de texto
def creaciontxt():
archi=open('cuenta.txt','w')
archi.close()
Verificar existencia de un archivo

Lectura de un archivo
Inicialmente, la función open crea una referencia a un archivo (usualmente llamado file
handle) que se usa para leer los datos, un ejemplo de generación de filehandler
asociado al archivo cuenta.txt.
fh = open(cuenta.txt','r')
La 'r' indica "modo de lectura" y es el modo por defecto (por lo que se podría obviar la 'r').
Sobre el file handle se puede:
• read(n): Lee n bytes, por defecto lee el archivo entero.
• readline(): Devuelve str con una sola linea.
• readlines(): Devuelve una lista con una cadena como elemento por cada línea del
archivo.
Distintas maneras de leer el contenido de un archivo:
Manera 1: Lectura byte a byte
def lecturabyte():
fh = open('cuenta.txt','r')
contenido=''
while True:
caracter = fh.read()
if caracter!='':
contenido+=caracter
else:
break
print (contenido)
Manera 2: Lectura Línea a Línea
def lecturalinea():
fh = open('cuenta.txt','r')
contenido=''
while True:
contenido = fh.readline()
if contenido!='':
print (contenido)
else:
break
Manera 3: Lectura todo el texto
def lecturatodo():
fh = open('cuenta.txt','r')
contenido = fh.readlines()
print (contenido)

Manera 4. Acceso Secuencial


def accesosecuencial():
fh = open('cuenta.txt')
contenido = ''
for linea in fh:
contenido += linea
fh.close()
print (contenido)
Manera 5. Lectura con with
Sintaxis:
with <Expresion> as <Variable>:
<Codigo
La ventaja de with es que al salir del bloque, se ejecuta un método especial que
cierra el archivo automáticamente.
def lecturawith():
with open('cuenta.txt') as fh:
for linea in fh:
print(linea)
Escribiendo archivos
Modos de escritura:

• w: Write, graba un archivo nuevo, si existe, lo sobrescribe.


• a: Append (agregar), agrega información al final de un archivo pre-existente. Si no
existe, crea uno nuevo (uso típico: logs).
Ejemplo con modo w(sobre escritura):

Ejemplo con modo a (append):


Ejemplo de un archivo de datos csv

Teniendo el archivo alumno.txt

Dónde:

Cada registro está separado por punto y coma(;)

Cada campo esta separado por coma (,)

def leeregistro():
fh = open('alumno.txt')
for archivo in fh:
registros = archivo.split(';')
for i in range (0,len(registros)):
if registros[i]=='':
break;
campos=registros[i].split(',')
for j in range(0,len(campos)):
if j==0:
print ("Codigo: ",campos[j])
if j==1:
print ("Nombre: ",campos[j])
if j==2:
print ("Semestre: ",campos[j])
print ("=====================")
fh.close()
Resultado de la ejecución:
PRACTICA EN PYTHON. Módulo random

Este módulo contiene una serie de generadores de números aleatorios.


El generador de números aleatorios básica (después de un algoritmo por Wichmann y Hill,
1982) se puede acceder de varias maneras:

Función random(): Aleatorio Flotante 0.0 <= número <1.0


Ejemplo: random()

Función uniform(): Aleatorio Flotante cotainferior <= número <cotasuperior


Ejemplo: random.uniform(100.0,1000.0)
100.0 <= número <1000.0

random.randint(a, b) Retorna un número aleatorio entero entre a y b


random.choice(secuencia) Retorna cualquier dato aleatorio de secuencia
random.shuffle(secuencia) Retorna una mezcla de los elementos de una secuencia
random.sample(secuencia, n) Retorna n elementos aleatorios de secuencia
import random

Ejemplos:
# Genera una lista de 50 números aleatorios entre 1 y 999
lista = []

for n in range(0, 50):


lista.append(random.randint(1, 999))

# selecciona un número al azar de la lista


seleccion = random.choice(lista)

# selecciona 5 números al azar de la lista


seleccion = random.sample(lista, 5)

# reordenar los elementos de una lista


mujeres = ["Ana", "Beatriz", "Camila", "Carmen", "Delia", "Dora", "Emilse"]
random.shuffle(mujeres)
Librerías Estándar

Se puede acceder a la documentación de las librerías estándar de python en la siguiente


dirección: http://docs.python.org/3.3/library/

Acceda al módulo os
El módulo os nos permite acceder a funcionalidades dependientes del Sistema Operativo.
Sobre todo, aquellas que nos refieren información sobre el entorno del mismo y permiten
manipular la estructura de directorios

Archivos y directorios

El módulo os nos provee de varios métodos para trabajar de forma portable con las
funcionalidades del sistema operativo. Veremos a continuación, los métodos más
destacados de este módulo.

Descripción Método
Saber si se puede acceder a un archivo o directorio os.access(path, modo_de_acceso)
Conocer el directorio actual os.getcwd()
Cambiar de directorio de trabajo os.chdir(nuevo_path)
Cambiar al directorio de trabajo raíz os.chroot()
Cambiar los permisos de un archivo o directorio os.chmod(path, permisos)
Cambiar el propietario de un archivo o directorio os.chown(path, permisos)
Crear un directorio os.mkdir(path[, modo])
Crear directorios recursivamente os.mkdirs(path[, modo])
Eliminar un archivo os.remove(path)
Eliminar un directorio os.rmdir(path)
Eliminar directorios recursivamente os.removedirs(path)
Renombrar un archivo os.rename(actual, nuevo)
Crear un enlace simbólico os.symlink(path, nombre_destino)
El módulo os y las variables de entorno

El módulo os también nos provee de un diccionario con las variables de entorno relativas
al sistema. Se trata del diccionario environ:
os.path

El módulo os también provee del submódulo path (os.path) el cual permite acceder a
ciertas funcionalidades relacionadas con los nombres de las rutas de archivos y
directorios. Entre ellas, las más destacadas se describen en la siguiente tabla:

Descripción Método
Ruta absoluta os.path.abspath(path)
Directorio base os.path.basename(path)
Saber si un directorio existe os.path.exists(path)
Conocer último acceso a un directorio os.path.getatime(path)
Conocer tamaño del directorio os.path.getsize(path)
Saber si una ruta es absoluta os.path.isabs(path)
Saber si una ruta es un archivo os.path.isfile(path)
Saber si una ruta es un directorio os.path.isdir(path)
Saber si una ruta es un enlace simbólico os.path.islink(path)
Saber si una ruta es un punto de montaje os.path.ismount(path)

Para Borrado de pantalla


Módulo sys

El módulo sys es el encargado de proveer variables y funcionalidades, directamente


relacionadas con el intérprete.

Variables del módulo sys

Entre las variables más destacadas se encuentran las siguientes:

Variable Descripción
Retorna una lista con todos los argumentos pasados por línea de
sys.argv comandos. Al ejecutar python modulo.py arg1 arg2, retornará una lista:
['modulo.py', 'arg1', 'arg2']
sys.executable Retorna el path absoluto del binario ejecutable del intérprete de Python

sys.platform Retorna la plataforma sobre la cuál se está ejecutando el intérprete


sys.version Retorna el número de versión de Python con información adicional

Métodos del módulo sys

Entre los métodos más destacados del módulo sys, podemos encontrar los siguientes:

Método Descripción
sys.exit() Forzar la salida del intérprete
sys.getdefaultencoding() Retorna la codificación de caracteres por defecto
Retorna la codificación de caracteres que se utiliza para
sys.getfilesystemencoding() convertir los nombres de archivos unicode en nombres de
archivos del sistema
Retorna el tamaño del objeto pasado como parámetro. El
sys.getsizeof(object[,
segundo argumento (opcional) es retornado cuando el objeto
default])
no devuelve nada.
Módulo subprocess

El módulo subprocess es aquel que permite trabajar de forma directa con órdenes del
sistema operativo.

Entre los métodos más comunes de subprocess, se puede encontrar subprocess.call().


Este método, suele ser útil, para ejecutar órdenes sencillas, como por ejemplo, limpiar la
pantalla:

Módulo glob: Comodines de archivos

El módulo glob provee una función para hacer listas de archivos a partir de búsquedas
con comodines en directorios:
Ahora, modulo time

time.strftime(): formateo de fecha


TALLER

Crear un Módulo (conjunto de def) o una clase que administre un archivo cuya estructura
de datos Cuenta tenga los siguientes campos:

- Número de cuenta
- Nombre
- Saldo

Entonces, debe realizar las operaciones crud como:

- Adición de una cuenta (número de cuenta :: llave primaria)


- Eliminar una cuenta
- Consulta de cuenta
- Edición de cuenta (retiro o consignación)
CAPITULO 4 DESARROLLO DE INTERFACES GRAFICAS GUI

Desarrollo de Interfaces Graficas con Tkinter [Labels,Buttons,Entrys]

Tomado de: http://pharalax.com/blog/python-desarrollo-de-interfaces-graficas-con-


tkinter-labelsbuttonsentrys/

Introducción al módulo Tkinter


Lo primero que hacemos para usar Tkinter es agregar el modulo a nuestro script python
en la primera linea de codigo :

from Tkinter import *

from Tkinter import *


La Ventana Principal
Para la creación de la ventana principal se usa la función “ventana = Tk()” que es atribuida
a una variable en este caso ventana, la cual heredara todas funciones de Tkinter , para
inicializar y lanzar la ventana se hace uso de “ventana.mainloop()”.

Ejemplo:

from Tkinter import *

ventana = Tk()

ventana.mainloop()

Resultado :

La linea ventana = Tk() inicia el script y la línea ventana.mainloop() lo finaliza, por lo tanto,
todo el código para agregar la demás funcionalidades deberá ir después de ventana =
Tk() y antes de ventana.mainloop().
Si se quiere ponerle un título a la ventana se hace uso de la función title() es decir :
ventana.title(„título de mi ventana‟).
Ejemplo:

from Tkinter import *

ventana = Tk()

ventana.title('titulo de mi ventana')

ventana.mainloop()

Resultado:

Otros casos:
ventana = Tk() # Se inicia la ventana
ventana.title('Empezando en Tkinter...')#Se coloca título a la ventana
ventana.config(bg="black") # Le da color al fondo
ventana.geometry("500x500") # Cambia el tamaño de la ventana
ventana.protocol("WM_DELETE_WINDOW", "onexit") # Elimina la opción de salir
ventana.resizable(0,0) # Evita que la ventana se pueda cambiar de tamaño
cuadro = Frame(ventana) #Se crea un Frame dentro de la ventana creada
cuadro.pack() #Se situa el frame en la ventana
v1=Toplevel(ventana) # Crea una ventana hija

Nota.
Función pack() se utiliza para colocar o adicionar un objeto (label, button, Entry…) en una
ventana o frame.
Label : Usando Etiquetas
Las etiquetas con Tkinter se hacen con la funcion Label(ventana, text= texto o aviso) y
para posicionarlo en la ventana con la funcion grid(row,column).El primer parámetro de la
funcion Label es la instancia de la ventana, es decir el resultado de ventana = Tk(), y valor
de texto o aviso se le asigna un valor tipo cadena entre 2 comillas.

Para posicionar la etiqueta se hace uso de la función grid(row,column)

Ejemplo:

from Tkinter import *

ventana = Tk()

ventana.title('Labels')

label1=Label(ventana,text="Intro to Tkinter")

label1.grid(row=1,column=1)

ventana.mainloop()

Resultado :
Trabajando con la Funcion Grid
La función grid se utiliza para posicionar los elementos en la ventana; los valores para la
función grid pueden ser los mismos que están en la siguiente tabla dependiendo de la
posición donde se quiera poner cada elemento.

row =1 , row =1 , row =1 , row =1 , row =1 ,


column=1 column=2 column=3 column=4 column=5

row =2 , row =2 , row =2 , row =2 , row =2 ,


column=1 column=2 column=3 column=4 column=5

row =3 , row =3 , row =3 , row =3 , row =3 ,


column=1 column=2 column=3 column=4 column=5

row =4 , row =4 , row =4 , row =4 , row =4 ,


column=1 column=2 column=3 column=4 column=5

Nota.
Se puede modificar el texto de la etiqueta mediante el comando config.

label.config(text = "nuevo texto")


Button : Usando Botones
El botón utiliza los mismos parámetros que para agregar una etiqueta como es: la
instancia de la ventana y text= texto o aviso del botón. También, tiene 3 parámetros más
,2 para modificar la apariencia del botón: bg (color) y relief (relieve), y un parámetro para
asociar a una función (def) cuando es presionado: command.

Ejemplo:

from Tkinter import *

ventana = Tk()

ventana.title('usando Botones')

boton1 = Button(ventana,text="Boton 1")

boton1.grid(row=1,column=1)

ventana.mainloop()

Resultado :
Para cambiar el color de botón se usa el parámetro bg=‟color‟ donde color puede
sustituirse por un color del inglés: red, blue,green,lime … etc .

Ejemplo:

from Tkinter import *

ventana = Tk()

ventana.title('usando Botones')

boton1 = Button(ventana,text="Boton 1",bg='red')

boton1.grid(row=1,column=1)

boton2 = Button(ventana,text="Boton 2",bg='blue')

boton2.grid(row=1,column=2)

ventana.mainloop()

Resultado:
Para el relieve del botón, se usa el parámetro relief y puede tomar valores constantes ya
definidos los cuales son: RAISED, SUNKEN,RIDGE,SOLID,FLAT,GROOVE

Ejemplo:

from Tkinter import *

ventana = Tk()

ventana.title('usando Botones')

boton1 = Button(ventana,text="Boton NORMAL")

boton1.grid(row=1,column=1)

boton2 = Button(ventana,text="Boton FLAT",relief=FLAT)

boton2.grid(row=1,column=2)

boton3 = Button(ventana,text="Boton SUNKEN",relief=SUNKEN)

boton3.grid(row=1,column=3)

boton4 = Button(ventana,text="Boton RIDGE",relief=RIDGE)

boton4.grid(row=1,column=4)

boton5 = Button(ventana,text="Boton SOLID",relief=SOLID)

boton5.grid(row=1,column=5)

ventana.mainloop()

Resultado:
Entry : Usando Cajas de Texto
Las cajas de texto suelen ser la forma de entrada de datos más básicas cuando se trabaja
con interfaces gráficas. Con Tkinter usa la funcion Entry.

Los parámetros son Entry(ventana,textvar=textvariable), la variable ventana es la variable


de instancia recibida al llamar a la funcion Tk() y textvar=textvariable , donde textvariable,
es una variable de tipo StringVar().

Ejemplo:

from Tkinter import *

ventana=Tk()

ventana.title('Usando Entry')

variable_string = StringVar()

caja = Entry(ventana,textvariable=variable_string)

caja.grid(row=1,column=1)

ventana.mainloop()

Resultado:
Aunque normalmente una caja de texto va acompañada de una etiqueta para saber cuál
es datos de entrada.

Ejemplo:

from Tkinter import *

ventana=Tk()

ventana.title('Usando Entry')

label1=Label(ventana,text="Usuario : ")

label1.grid(row=1,column=1)

variable_string = StringVar()

caja = Entry(ventana,textvariable=variable_string)

caja.grid(row=1,column=2)

ventana.mainloop()

Resultado :
CheckButton.
Sirve para colocar un botón de chequeo en la ventana.
Sintaxis:
Checkbutton(ventana, text=texto asociado, variable=variable de chequeo, command=def o
función asociada)

Ejemplo:
from tkinter import *
ventana=Tk()
ventana.config(bg="black") # Le da color al fondo
ventana.geometry("500x500") # Cambia el tamaño de la ventana
v = IntVar()
def Check(): #Se ejecuta al modificar el valor del CheckButton
if var.get(): #Si se ha activado la casilla
print ("El checkbutton fue seleccionado")
else: #Si se ha desactivado la casilla
print ("El checkButton no fue seleccionado")
var = IntVar()
c1=Checkbutton(ventana, text="Uno",variable=var,command=Check)
c1.grid(row=1, column=0)
ventana.mainloop()
Resultado:
RadioButton
Boton de selección con exclusión (solo uno)
Sintaxis:
Radiobutton(ventana, text=texto asociado, variable=variable asociada, value=valor
asociado, command=def asociado)

Ejemplo:
from tkinter import *
ventana=Tk()
ventana.config(bg="black") # Le da color al fondo
ventana.geometry("500x500") # Cambia el tamaño de la ventana
v = IntVar()
def funcion(): #Se ejecuta al tocar los RadioButton
if v.get()==1:
print ("H")
elif v.get()==2:
print ("Manual")
elif v.get()==3:
print ("L")
seleccion = "Usted selecciono " + str(v.get())
label2.config(text = seleccion)
c2=Radiobutton(ventana, text="H", variable=v, value=1,command=funcion)#Ahora un
RadioButton
c3=Radiobutton(ventana, text="Manual", variable=v, value=2,command=funcion)
c4=Radiobutton(ventana, text="L", variable=v, value=3,command=funcion)
c2.grid(row=2, column=0)
c3.grid(row=2, column=1)
c4.grid(row=2, column=2)
label2 = Label(ventana) #Creamos una etiqueta donde imprimir la seleccion
label2.grid(row=3, column=1)
ventana.mainloop()
Resultado:
PRACTICA EN PYTHON. ADMINISTRACIÓN DE MODULOS

El siguiente ejemplo fue tomado en: http://gmendezm.blogspot.com/2012/12/tutorial-


tkinter-python-gui.html

from tkinter import * # Importa el módulo

v0 = Tk() # Tk() Es la ventana principal

v1=Toplevel(v0) # Crea una ventana hija

v1.protocol("WM_DELETE_WINDOW", "onexit") # Elimina la opción de salir para evitar el


error

v0.resizable(0,0) # Evita que la ventana se pueda cambiar de tamaño

v1.resizable(0,0) # Evita que se le pueda cambiar de tamaño a la ventana

def mostrar(ventana): ventana.deiconify() # Muestra una ventana

def ocultar(ventana):ventana.withdraw() # Oculta una ventana

def ejecutar(f): v0.after(200,f) # Una forma de ejecutar las funciones

def imprimir(texto): print ("curso python") # Imprime un texto

v0.config(bg="black") # Le da color al fondo

v0.geometry("500x500") # Cambia el tamaño de la ventana

b1=Button(v0,text="ABRIR VENTANA V1",command=lambda: ejecutar(mostrar(v1)) or


imprimir("hola") or imprimir("tercera función")) # Primer botón

b1.grid(row=1,column=1) # El botón es cargado

b2=Button(v1,text="OCULTARME",command=lambda: ejecutar(ocultar(v1))) # Segundo


botón

b2.grid(row=1,column=2) # El botón es cargado

b3=Button(v0,text="OCULTAR VENTANA V1",command=lambda: ejecutar(ocultar(v1)))

b3.grid(row=1,column=2) # El botón es cargado

v1.withdraw() # Oculta la ventana v1


v0.mainloop() # Es el evento que llama al inicio de nuestro programa. Siempre lo lleva la
ventana principal.
CAPITULO 5 PROGRAMACION FUNCIONAN PYTHON

5.1 ¿Qué es la programación funcional?


La programación funcional es un paradigma que se basa en la utilización de funciones,
que permite obtener código más fácil de probar y entender. Por lo tanto, la programación
funcional es un paradigma declarativo enfocado en "qué" se está haciendo y no en "cómo"
se está haciendo que es el enfoque imperativo, expresando así, una lógica de
programación sin describir controles de flujo, como también, ciclos (for, while) o
condicionales (if).
5.2 Razón de uso la programación funcional
A continuación se expresa la razón de uso:

 amplias opciones de transformación algebraica de programas,


 amplias posibilidades de síntesis algebraica de programas,
 sencillas opciones de análisis semántico gracias a la renuncia a los “estados
internos en el proceso de cálculo” y los “efectos secundarios”,
 desaparición de estados internos (a diferencia de la programación imperativa,
no se requieren estados internos de un proceso de cálculo),
 renuncia a los efectos secundarios (los cambios de estado correspondientes a
los estados internos, los llamados efectos secundarios, también se pueden
eliminar en las tareas funcionales).
Ventajas Inconvenientes
Los datos (por ejemplo, las variables) no se pueden
Los programas no tienen estados
modificar
No se permite el acceso eficiente a grandes
Muy adecuados para la paralelización
cantidades de datos
No se recomienda para conexiones a bases de
El código se puede testar fácilmente
datos y servidores
Código fácilmente verificable, incluso las No es adecuado para muchas recursiones de la
funciones sin estado se pueden verificar misma pila
Fácil de combinar con la programación La programación recurrente puede dar lugar a
imperativa y orientada a objetos errores graves

Código más preciso y más corto No apto para todas las tareas

En razón al uso, la programación funcional ofrece un alto grado de abstracción, porque


está basada en el concepto matemático y el principio de función, creando así, un código
muy preciso. El hecho de crear unidades de código muy preciso reutilizables y altamente
especializadas, como sea posible, se crea un programa para la solución de tareas
matemáticas y de algoritmos complejos. Esta especialización de las áreas de aplicación
contribuye a que los lenguajes de programación funcional ocupen un nicho particular.

Con respecto a la tabla de ventajas/inconvenientes se da una visión general de si el


paradigma funcional es la estrategia apropiada para programar un proyecto de
software o no, aunque a veces, la elección de un estilo de programación depende de las
preferencias personales del desarrollador. Por ejemplo, la programación orientada a
objetos como alternativa a la estrategia funcional es muy popular para muchos
programadores. A continuación, compararemos brevemente las dos estrategias,
incluyendo un ejemplo práctico final.
5.3 Programación funcional utilizando el ejemplo de un analizador
Los analizadores o parsers son elementos esenciales para todos los programas de
ordenador. Como directores de los compiladores que traducen el lenguaje de
programación al lenguaje de las máquinas, son a menudo indispensables.
Un analizador puede implementarse sobre la base de varios paradigmas de
programación –por ejemplo, también con un lenguaje orientado a objetos. Sin embargo, la
estrategia funcional ofrece una serie de ventajas útiles cuando se trata del diseño de
código de un analizador.

 No hay variables globales y cambiantes. En consecuencia, no hay errores de


programación derivados del llamado “estado global mutable” (estado modificable
por todo el código), como puede ser el caso de los proyectos orientados a objetos.
Para un analizador, este elemento del programa central es una ventaja.
 Gracias a las funciones de orden superior y a la claridad del código de programa,
se pueden gestionar fácilmente incluso grandes colecciones de datos. Esto es
muy ventajoso para un analizador, que naturalmente tiene que procesar grandes
cantidades de datos.
 Los analizadores son elementos del programa que se ejecutan muy a menudo. De
este modo, beneficia a todo el programa que este elemento central
esté programado con precisión y funcione eficientemente, lo que logra la
programación funcional.
 La implementación correcta de una programación funcional puede ayudar a
minimizar o prevenir completamente errores de ejecución.
5.4 Caracteristicas Programacion Funcional
5.4.1 Funciones Puras
Las funciones puras, no son más que funciones, las cuales, dando el mismo input,
siempre retornan el mismo output, además de no tener efectos secundarios.
5.4.2 Composición De Funciones
La composición de funciones es el proceso de combinar dos o más funciones,
teniendo como finalidad ejecutar cada una de estas funciones en secuencia para
obtener un resultado en concreto.
> f(x)
> g(x)

> f(g(x))
En este caso combinamos la función f de x con la función g de x.
5.4.3 Estado Compartido
El estado compartido es cualquier variable, objeto o espacio de memoria que exista en
un ámbito compartido. Un ámbito compartido puede incluir el alcance global o ámbitos
de cierre. A menudo, en la programación orientada a objetos, los objetos se
comparten entre ámbitos al agregar propiedades a otros objetos.
Materia materia = new Materia();
Usuario usuario = new Usuario();

usuario.materia = materia;
5.4.4 Mutabilidad
Un objeto inmutable es aquel que no puede ser modificado una vez haya sido creado.
Por ejemplo, una variable en Java, no es un objeto inmutable.
String caracteres = "ABC";
String nuevaCadana = caracteres.toLowerCase();
Podemos ver a los objeto inmutables como constantes, una vez nosotros asignamos
un valor este no podrá ser modificado.
5.4.5 Efectos Secundarios
Un efecto secundario es cualquier cambio de estado en la aplicación que sea
observable fuera de la función llamada.
public static int funcion(int x){
variable_global = 10; //Cambio de valor
return x + 10;
}

En este caso mi "función", no es una función pura, porque posee efectos secundarios,
modifica el valor de una variable externa a la función.

5.5 Función Lambda en Python


Las funciones lambda son pequeñas funciones anónimas de una sola línea que se
pueden definir sobre la marcha o asignar a una variable. Anónimas en el sentido de
que en realidad no tiene un nombre. En Python la forma de definir una función es
mediante la palabra clave def seguida de un nombre y el listado de parámetros. El
cuerpo de la función será el código indexado situado después de esta línea. Para
definir una función lambda se utiliza la palabra clave lambda seguida de los
parámetros, dos putos y la expresión.
Lambda sirve para crear pequeñas funciones anónimas, de una sola línea sobre la
marcha. Las formas lambda se pueden usar en cualquier lugar siempre que se
necesite un objeto función.
Se va a revisar diferentes ejemplos:
>>>
>>> cuadrado = lambda x: x**2
>>> cuadrado(2)
4
>>> cuadrado(3)
9
>>>
Como se puede notar las funciones lambda no tienen nombre. Pero gracias a que
lambda crea una referencia a un objeto función, se pueden llamar.
>>>
>>> lambda x: x**2
<function <lambda> at 0xb74469cc>
>>>
>>> (lambda x: x**2)(3)
9
>>>
Además “lambda” no necesita de “return” para retornar un valor, ya que está implícito,
puesto que la función entera debe ser una única expresión.
En general, una función “lambda” es una función que puede tomar cualquier número
de argumento y devuelve el valor de una expresión simple.
>>>
>>> a = lambda x, f, y: x**2
>>> a(4,5,6)
16
>>>
lambda no puede tener sentencias, ni más de una expresión. No intente exprimir
demasiado una función lambda; si necesita algo más complejo, defina en su lugar una
función normal y hágala tan grande como quiera. lambda se debe usar donde se
desee encapsulación, código no reutilizable, no ensucie su código con un montón de
pequeñas funciones de una sola línea.
Algo a tener muy en cuenta es que la función lambda no pude devolver un valor Falso
(False), la función es siempre Verdadera (True); su valor de retorno puede ser
cualquier cosa.

>>>
>>> (lambda x: x**2) and True
True
>>>
5.6 Función Map
La función map de Python permite aplicar una función a una secuencia de elementos
como una lista o un diccionario. Es una forma rápida, limpia y, lo que es más
importante, legible de realizar la operación. Esto se puede ver en siguiente ejemplo
donde se compara el uso de map con for para aplicar una función a un vector.
def cuadrado(a):
return a*a
data = [1, 3, 5]
result = []
# Iterar con for
for i in data:
result.append(cuadrado(i))
print(result)
# Map sobre función
print(list(map(cuadrado, data)))
# Map sobre lambda
print(list(map(lambda a: a*a, data)))
En este ejemplo en primer lugar se define una función cuadrado que devuelve el
cuadrado de argumento. Posteriormente se crea un vector y se aplica la función sobre
este utilizando un bucle for. Una vez obtenido el resultado de esta forma se repite la
operación utilizando la función map con la que se simplifica la operación. Finalmente
se vuelve a realizar la operación con map pero reemplazando la función por una
lambda. En todos los casos el resultado obtenido es [1, 9, 25].
Entonces, se aprecia como la utilización de map permite obtener códigos más fáciles
de entender que for.
5.6 Función filter
La función filter permite seleccionar los elementos de una secuencia que verifica un
criterio. Criterio que se define en una función. La función filter funciona como map pero
solamente devuelve los elementos para los que la función retorna un valor verdadero.
En el siguiente ejemplo se crear una función que devuelve verdadero cuando el
número es par, posteriormente se utiliza junto a filter para seleccionar los elementos
de un vector,

def par(numero):
if numero%2 == 0:
return True
else:
return False

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# Filter sobre función
print(list(filter(par, data)))
# Filter sobre lambda
print(list(filter(lambda x: x%2 == 0, data)))
Al igual que en el caso anterior se muestra un ejemplo utilizando una función y una
lambda en filter. En todos los casos el resultado obtenido es [2, 4, 6, 8].

5.7 Función reduce


La función reduce se utiliza cuando se requiere un cálculo sobre pares de valores en
en una lista en Python. Por ejemplo, para obtener el producto de los elementos de una
lista se puede emplear un bucle for o reduce como se muestra en el siguiente ejemplo:
from functools import reduce
result = 1
data = [1, 3, 5]
# Iterar con for
for i in data:
result *= i

print(result)
print(reduce(lambda a, b: a*b, data))
En ambos casos el resultado obtenido es 15.

A diferencia de las funciones anteriores, reduce es necesario importarla de la librería


functools.
CAPITULO 6 BASE DE DATOS PYTHON(32 BITS)

PARTE 1. CONEXIÓN PRIMITIVA BASE DE DATOS PYTHOM


MÓDULO SQLite
SQLite es una biblioteca C que proporciona una base de datos basada en disco de peso
ligero que no requiere de un proceso de servidor independiente y permite el acceso a la
base de datos utilizando una variante no estándar del lenguaje de consulta SQL. Algunas
aplicaciones pueden utilizar SQLite para el almacenamiento de datos interno. También es
posible crear un prototipo de una aplicación utilizando SQLite y luego aportar el código de
una base de datos más grande, como PostgreSQL o Oracle.

SQLite y Formatos Python


Los siguientes tipos de Python que son aceptados y recibidos por SQLite sin ningún
problema:

Es así como los tipos de SQLite se convierten a los tipos de Python por defecto:

Módulo de funciones y constantes sqlite3.


sqlite3.versión
El número de versión de este módulo, como una cadena. Esta no es la versión de la
biblioteca de SQLite.
sqlite3. PARSE_DECLTYPES
Esta constante está destinado a ser utilizado con el parámetro detect_types de la
conexión () la función.
sqlite3. PARSE_COLNAMES
Esta constante está destinado a ser utilizado con el parámetro detect_types de la
conexión () la función.Ajuste esto hace que la interfaz de SQLite analiza el nombre de
columna para cada columna que devuelve.
sqlite3. connect ( database [ , timeout , detect_types , isolation_level ,
check_same_thread , factory , cached_statements ] )
Abre una conexión con la base de datos del archivo de base de datos SQLite. Usted
puede utilizar “memory:” para abrir una conexión de base de datos que reside en la
memoria RAM en lugar que en el disco.

Cuando se accede a una base de datos por varias conexiones, y uno de los procesos
modifica la base de datos, la base de datos de SQLite se bloquea hasta que la
transacción se ha comprometido. El parámetro timeout especifica el tiempo que la
conexión debe esperar a que el bloqueo se vaya hasta que lanzar una excepción. El valor
predeterminado para el parámetro de tiempo de espera es de 5.0 (cinco segundos).

SQLite soporta nativamente sólo tipos TEXT, INTEGER, REAL, BLOB y NULL. Si desea
utilizar otro tipo debe agregar soporte para su propia cuenta. El parámetro detect_types y
el uso de convertidores personalizados registrados en el nivel de módulo
register_converter () función le permite hacer fácilmente eso.

detect_types defecto es 0 (es decir, a ninguna detección de tipo), se puede establecer en


cualquier combinación de PARSE_DECLTYPES y PARSE_COLNAMES convertir
detección del tipo de encendido.

Por defecto, el sqlite3 utiliza la conexión a la base de datos mediante la sqlite3.connect:

import sqlite3
conn = sqlite3.connect('example.db')
o
import sqlite3
conn = sqlite3.connect(“memory:”)

sqlite3. register_converter (typename, callable)


Registra la conversión de formato a Python a formato SQLite . Tenga en cuenta que el
caso del nombre de tipo python y el nombre del tipo sqlite debe coincidir.

sqlite3. register_adapter (typename, callable)


Registra la conversión de formato base de datos SQLite a formato a Python. Tenga en
cuenta que el caso del nombre de tipo python y el nombre del tipo sqlite debe coincidir.

sqlite3. complete_statement (sentencia sql)


Devuelve Verdadero si la cadena contiene una o más sentencias SQL terminadas por
punto y coma. No comprueba que la sentencia SQL esta sintácticamente correcto, sólo
que exista literal de cadena sin cerrar y cada sentencia termina con un punto y coma.

sqlite3.enable_callback_tracebacks (FLAG)
De manera predeterminada, no recibirá los rastreos en las funciones definidas por el
usuario, adaptadores, convertidores, devoluciones de llamada de autorizador etc Si desea
depurar ellos, usted puede llamar a esta función con indicador establecido en True.
Después, obtendrá los rastreos de devoluciones de llamada en sys.stderr. Use False para
deshabilitar la característica de nuevo.
ejemplo:

import sqlite3
con = sqlite3.connect(":memory:")
buffer = ""
print ( "Entre una sentencia SQL terminando con ;")
print ("Para salir deje una línea en blanco.")

while True:
line = input()
if line == "":
break
buffer += line
if sqlite3.complete_statement(buffer):
print (" sin error")
else:
print (" con error")

Métodos y Objetos de conexión clase sqlite3.connect


Una conexión de base de datos SQLite tiene los siguientes atributos y métodos:
isolation_level
Obtener o establecer el nivel de aislamiento actual. Ninguno para el modo de confirmación
automática o uno de "varios usos", "inmediato" o "exclusivo".
cursor ([cursorClass])
Crea un objeto cursor. Un cursor es un objeto de acceso a datos que se puede utilizar
para recorrer el conjunto de filas de una tabla o actualización (inserción, eliminación y
edición) de filas en una tabla.
commit ()
Este método realiza la operación de actualización. Si no se llama a este método, todo lo
que hizo desde la última llamada a commit () no realiza sobre la tabla de la base de
datos.
rollback ()
En tecnologías de base de datos, un rollback es una operación que devuelve a la base de
datos a algún estado previo antes de la última llamada a commit ().
close ()
Esto cierra la conexión de base de datos.
executescript (sql_script)
Ejecuta un archivo script Sql (conjunto de sentencias Sql).
create_function (nombrefuncion, num_params, func)
Crea una función nombrefuncion que puede ser llamada por la sentencia execute. Esta
función acepta el llamado a una función python (parámetro func) con el número de
parámetros de la función aceptada (parámetro num_params ). Entonces, el parámetro
func indica que es una función de Python aceptada (que debe retornar una sentencia
SQL), como también, el num_params es el número de parámetros de la función aceptada
a ser llamada.

Métodos Objeto cursor

execute (sentencia sql [parámetros])


Ejecuta una sentencia Sql.
executemany (sentencias sql [parámetros])
Ejecuta múltiples sentencias sql.
fetchone ()
Obtiene la siguiente fila de un conjunto de resultados de consulta, devolviendo una sola
secuencia, o ninguno, cuando no hay más datos disponibles.
fetchmany ([size = cursor.arraysize])
Obtiene la siguiente serie de filas de un resultado de consulta, devolviendo una lista. Una
lista vacía se devuelve cuando no hay más filas disponibles.
El número de filas hay que seleccionar por llamada se especifica mediante el parámetro
de tamaño. Si no se le da, arraysize del cursor determina el número de filas a captar. El
método debe tratar de recoger tantas filas como indica el parámetro de tamaño. Si esto no
es posible debido al número especificado de filas que no están disponibles, menos filas
pueden ser devueltos.
Tenga en cuenta que hay consideraciones de rendimiento que participan en el parámetro
de tamaño. Para un rendimiento óptimo, es mejor usar el atributo arraysize. Si se utiliza el
parámetro de tamaño, entonces lo mejor es para que conserve el mismo valor de uno ()
fetchmany llamada y la siguiente.
fetchall ()
Obtiene todas las filas de un resultado de consulta (select), devolviendo una lista. Tenga
en cuenta que atributo arraysize del cursor puede afectar al rendimiento de esta
operación. Una lista vacía se devuelve cuando no hay filas que cumpla con el select.
rowcount()
Si bien el Cursor de clase del módulo sqlite3 implementa este atributo, el propio soporte
del motor de base de datos para la determinación de las "filas afectadas" / "filas
seleccionadas" es similar a len(fetchall) en el caso de un select.
lastrowid()
Este atributo de sólo lectura proporciona el identificador la última fila adicionada. Sólo se
establece si ha emitido una sentencia INSERT con el método execute ().
Ejemplo:
def listar(tabla): # function aceptada con 1 parámetro
query = "SELECT * FROM %s" % tabla
return query
con = sqlite3.connect(":memory:")
con.create_function("cuantos", 1, listar) # creación de función cuantos con la función
aceptada listar con un solo parámetro
cur = con.cursor()
cur.execute("cuantos(?)", ("contratos"))# ejecución de la función listar con el parámetro
con valor contratos
print cur.fetchone()[0]
Objetos Row con la class sqlite3.Row

Una instancia de un objeto Row sirve para imitar una tupla en la mayor parte de sus
características.
Es compatible con el acceso cartografía por nombre de columna e índice, iteración, la
representación, la prueba la igualdad y len () .
Si dos filas objetos tienen exactamente las mismas columnas y sus miembros son iguales,
compare iguales.
keys ()
Este método devuelve una tupla de nombres de columna. Inmediatamente después de
una consulta, es el primer miembro de cada tupla en Cursor.description.
Crear un módulo llamado bdsqlite y escribir el siguiente código:
import sqlite3 as sqlite
bd="poliza.db"
conn=""
def evaluasentencia(sentencia):
if sqlite.complete_statement(sentencia):
return True
else:
return False

def run_consulta(query=''):
global bd
global conn
if evaluasentencia(query):
conn = sqlite.connect(bd) # Conectar a la base de datos
cursor = conn.cursor() # Crear un cursor
cursor.execute(query) # Ejecutar una consulta
data = cursor.fetchall() # Traer los resultados de un select
cursor.close() # Cerrar el cursor
conn.close() # Cerrar la conexión
return data
else:
return -1

def run_actualizacion(query=''):
global bd
global conn
if evaluasentencia(query):
conn = sqlite.connect(bd) # Conectar a la base de datos
cursor = conn.cursor() # Crear un cursor
cursor.execute(query) # Ejecutar una actualizacion
conn.commit() # Realizar transaccion
cursor.close() # Cerrar el cursor
conn.close() # Cerrar la conexión
return "Exito en Actualizacion"
else:
return "Error en Actualizacion"
def creartablaservicios():
query = "CREATE TABLE servicios (idservicio integer, nombre text);"
result=run_actualizacion(query)
print (result)

def creartablacontratos():
query = "CREATE TABLE contratos (idcontrato integer, nombre text);"
result=run_actualizacion(query)
print (result)
def adicion_tabla_referencia(tabla,llave,valor):# Adicion en una tabla de referencia
query = "INSERT INTO %s VALUES ('%s','%s');" % (tabla,llave,valor)
result=run_actualizacion(query)
print (result)
def consulta(tabla): # Consultar todos los registros de una tabla
query = "SELECT * FROM %s;" % tabla
result = run_consulta(query)
print (result)
def consultallave(tabla,llave,valor): # Consultar el registro por llave primaria
query = "SELECT * FROM %s where %s='%s';" % (tabla,llave,valor)
lista=run_consulta(query)
if lista==-1:
print ("error en consulta")
else:
if len(lista)>0:
print ("valor de llave existia")
else:
print ("valor de llave no existia")
def borrado(tabla,llave,valor): # Borrar un registro
query = "DELETE FROM %s where %s='%s';" % (tabla,llave,valor)
result=run_actualizacion(query)
print (result)
def edicion(tabla,campo,nuevovalor,llave,valor): # Edita un registro
query = "UPDATE %s set %s='%s' where %s='%s';" %
(tabla,campo,nuevovalor,llave,valor)
result=run_actualizacion(query)
print (result)
Comprobar:
PARTE 2. PYTHON CONEXIÓN BASE DE DATOS MYSQL

PRIMER MOMENTO. INSTALACIÓN python 2.7

En primer lugar se descarga el programa de instalación de python 2.7, disponible


gratuitamente en la URL:

https://www.python.org/download/

Seleccionar y pulsar un clic sobre

 Python 2.7.6 Windows Installer (Windows binary -- does not include source)
Pulsar Ejecutar
Pulsar Finish
SEGUNDO MOMENTO. INSTALACIÓN MYSQLDB(Conector MySQL y Python)

Se descarga el conector MySQL- python, disponible gratuitamente en la URL:

https://pypi.python.org/pypi/MySQL-python

Seleccione y de un clic sobre


Seleccione y de un clic sobre:
Pulsar Botón Siguiente
Pulsar Botón Siguiente

Pulsar Botón Finalizar


TERCER MOMENTO. INSTALACIÓN MySQL Server 5.5

Se va a mostrar como instalar MySQL Server 5.5 en el sistema operativo Windows XP,
del conocido y popular motor de bases de datos gratuito de la empresa MySQL.

En primer lugar se descarga el programa de instalación de MySQL Server 5.5, disponible


gratuitamente en la URL:

http://www.filehippo.com/es/download_mysql/tech/12987/

Descarga en Mozilla

Si sale este cuadro, por favor pulsar el botón Guardar Archivo.


Pulsar el Botón Ejecutar

Descarga en Internet Explorer

Se ejecuta el archivo mysql-5.5.27-win32.msi, desde cdn.mysql.com. Puede que aparezca


una ventana de ejecución Windows, de ser así, se pulsa el botón "Ejecutar":

O
Inicio de Asistente de Instalación

Se iniciará el asistente de instalación de MySQL Server 5.5, se pulsa el botón "Next" para
iniciar el asistente de instalación.

Se acepta los términos. Se Pulsa el Botón Next


Se Selecciona el tipo de instalación en la ventana "Setup Type", en nuestro caso se
marca la opción "Custom" (choose which program features you want installed and where
they will be installed. Recommended for advanced users), mediante esta opción se puede
seleccionar los componentes que se quiera instalar. Pulsar el Botón Next

Se instala por defecto en archivos de programa\MySQL.

Pulsar el Botón Next.


Pulsar el Botón Install
Pulsar botón Next

Pulse el botón Next


Pulsar el Botón Finish

Pulsar el Boton Next


Seleccionar la opción "Standard Configuration" que pedirá menos parámetros de
configuración, aunque es menos configurable. En este caso se marca "Detailed
Configuration" ("Choose this configuration type to create the optimal server setup for this
machine"). Esta opción pedirá más parámetros de configuración, por lo que se podra
ajustar más la configuración de MySQL Server 5.5 a nuestras necesidades.

Pulsar el Botón Next

En primer lugar se indica el tipo de servidor de MySQL Server, según para el uso que se
quiera dar:

 Developer Machine: este tipo de uso del servidor de MySQL Server se utiliza
como testeo y desarrollo de aplicaciones que utilicen MySQL Server. Se creará la
instancia de MySQL Server consumiendo los mínimos requisitos posibles. Esto es
útil sólo para servidores de bases de datos de pruebas, no es recomendable para
servidores de MySQL Server en producción con conexión de varios usuarios a la
vez.
 Server Machine: este modo de uso de MySQL Server se usa en situaciones de
necesidades "medias", sirve para pruebas y para el uso de varios usuarios
conectados a la vez (no más de 10, aunque esto depende del volumen de
transacciones que se necesiten). Con este modo SQL Server necesitará un uso de
memoria medio, más alto que el anterior tipo y más bajo que el siguiente.
 Dedicated MySQL Server Machine: este tipo de instalación sólo es
recomendable cuando el servidor donde se instala va a ser un servidor dedicado,
es decir, cuando el equipo sólo servirá como servidor de bases de datos MySQL
Server. Así pues, en este caso, MySQL Server utilizará toda la memoria
disponible.

En este, puesto que MySQL Server sólo lo se utiliza para pruebas y desarrollo de
aplicaciones, se marca la opción " Server Machine " y se pulsa la tecla "Next" para
continuar

A continuación se debe indicar el tipo de transacciones que se ejecutarán en el servidor


de SQL Server:

 Multifuncional Database: este tipo de configuración de la instancia de SQL


Server se usa para bases de datos de propósito general, sirve para pruebas y para
base de datos en producción. Se podrán utilizar tanto el motor InnoDB (admite
gestión de transacciónes, más lento que MyISAM) como el motor MyISAM (no
admite gestión de transacciones, más rápido que InnoDB. Esta opción suele ser la
más habitual, pues servirá para aplicaciones que hagan inserciones,
modificaciones y consultas de datos.
 Transactional Database Only: este tipo de instancia de SQL Server sólo sirve y
está optimizada para realizar transacciones. Sólo admite InnoDB, no admite
MyISAM. Es recomendable sólo para aplicaciones con varios usuarios
concurrentes que puedan realizar eliminaciones, modificaciones e inserciones de
datos, pues habrá control de transacciones y de bloqueos. En cambio no es
recomendable para, por ejemplo, gestores de contenidos web como PHP-Nuke ó
PostNuke, pues éstos a penas permiten modificaciones e inserciones, sólo para
usuarios administradores, en cambio sí necesitan bastante velocidad en la
consulta.
 Non-Transactional Database Only: este tipo sólo admite el motor MyISAM, por lo
que sólo será útil para aplicaciones que no requieran de transacciones
(monitorización, logeo, aplicaciones web de consulta, análisis de programas, etc).

Lo más sencillo, para poder disponer de los dos motores: InnoDB (transaccional) y
MyISAM (no transaccional), marcaremos "Multifuncional Database", de esta forma, al
crear las tablas en MySQL Server, podremos indicar el tipo de motor (engine) a utilizar.
Pulsar el Botón Next

A continuación se indica la ruta donde se ubicarán los archivos de la base de datos


(datafiles), si es una base de datos en producción que tendrá muchos usuarios
conectados concurrentemente y con muchas transacciones (modificaciones, inserciones,
consultas), es recomendable que los archivos de datos se encuentren en un disco duro
diferente del sistema operativo y lo más rápido posible.

En este caso, al tratarse de una base de datos de pruebas, dejaremos el directorio de


instalación por defecto. Pulsaremos "Next" para continuar.
A continuación se indica la configuración para el número de usuarios concurrentes que se
estiman que tomaran servicios de la base de datos MySQL Server:

 Decision Support (DSS)/OLAP: esta opción es recomendable para unos 20


usuarios concurrentes (conectados a la base de datos a la vez).
 Online Transaction Processing (OLTP): para unos 500 usuarios concurrentes.
 Manual Setting: en esta opción podremos indicar al asistente de configuración que
configure MySQL Server para el número de usuarios que indiquemos.

En este caso, puesto que sólo tomaran servicios de la base de datos MySQL Server unos
15 usuarios se marca la opción "Manual Setting" e introduciremos en "Concurrent
connections": 15, pulsaremos "Next" para continuar.
A continuación se indica al asistente si se quiere permitir conexiones externas (de otros
equipos de la red) al servidor MySQL Server, para ello se marca "Enable TCP/IP
Networking", también, se debe indicar el puerto que utilizará MySQL Server, en "Port
Number", por defecto es el 3306 por donde escucha el Servidor MySQL. Cambiar a
Puerto 3307. Se Pulsa el botón "Next" para continuar.

Seleccione Best Support for Multilingualismo. Pulse el Boton Next


Se indica que el asistente de configuración de MySQL Server cree un servicio de
Windows o un archivo de proceso por lotes (.bat). Aquí se puede utilizar el método que
más convenga para iniciar MySQL Server, cada uno tiene sus ventajas e inconvenientes.
El más "profesional" es "Install As Windows Service", pues se puede indicar el modo de
inicio: manual, automático, etc. también se puede deshabilitarlo o reiniciarlo desde otras
aplicaciones en caso necesario. Si se marca esta opción se debe indicar el nombre que
se le dará al servicio en "Service Name", en este caso, seleccione MySQL5. Marcando la
opción "Launch the MySQL Server automatically" se indica que el servicio de MySQL
Server 5.5 arranca de forma automática al iniciarse el sistema operativo. Si se marca la
opción "Include Bin Directory in Windows PATH" el asistente creará varios archivos de
proceso por lotes (.bat), ejecutables, para iniciar, detener SQL Server 5.5, la carpeta
donde se creen será añadida a la variable de entorno PATH, para que se pueda iniciar o
detener MySQL Server desde cualquier carpeta en modo MS-DOS.
Se indica también la contraseña para el superusuario root, que será el que tenga acceso a
todos los esquemas (schemas). Si marcamos la opción "Enable root access from remote
machines" se indica a MySQL Server que permita el acceso desde otros equipos de la red
(o Internet) mediante este superusuario. Si se marca la opción "Create An Anonymous
Account" creará una cuenta anónima, por lo que se permitirá el acceso a MySQL sin
introducir usuario y contraseña (sólo recomendable en caso de bases de datos MySQL
Server 5.5 de pruebas, no en producción):

En el root password digite root y confirme con root. Pulse tecla Next

 Username: root. Usuario con permisos suficientes para acceder a MySQL Server
5.5, como es la primera vez sólo se puede acceder con el superusuario root, luego
se podrá crear otros usuarios con permisos más restringidos.
 Password: root. Contraseña del superusuario root.
Pulse el botón Execute
Si no hay ningún conflicto con el puerto indicado o el nombre del servicio de Windows
indicado aparecerán todas las operaciones (Prepare configuration, Write configuration file
(C:\Archivos de programa\...my.ini), Start Service y Apply security settings. También
mostrará el mensaje: "Configuration file created, Windows service MySQL installed,
Service started succesfully, Security settings applied".

Pulsar botón "Finish" para terminar.


ACCESO A LOS SERVICIOS DEL SERVIDOR

Se accede a los Servicios de Windows, desde "Inicio" - "Ejecutar" - "services.msc",


podremos comprobar que el servicio MYSQL5.5 se ha creado e iniciado correctamente:

Haciendo doble clic sobre el servicio podremos ver sus propiedades:

 Nombre de servicio: MySQL5


 Nombre para mostrar: MySQL5
 Ruta de acceso al ejecutable: "C:/Archivos de programa/MySQL/MySQL Server
5.5/bin/mysqldt" --defaults-file="C:/Archivos de programa/MySQL/MySQL Server
5.5/my.ini" MySQL5
 Tipo de inicio: Automático.
 Estado del servicio: Iniciado
También se puede ver el proceso creado al iniciarse el servicio de MySQL5, "mysqld.exe":
CREACION DE UNA BASE DE UN ESQUEMA O BASE DE DATOS

Para crear un nuevo esquema (schema) ó base de datos en MySQL Server 5.5 podremos
utilizar, por ejemplo, MySQL Administrator, una herramienta gratuita dispoble en la web de
MySQL.

Esta herramienta se puede descargar de:

http://mysql-administrator.softonic.com/

Una vez Instalando se puede ejecutar:

Ejecutando MySQL Administrator debemos indicar los siguientes datos para acceder al
servidor de bases de datos MySQL Server 5.5:

 Server Host: IP ó nombre de red del equipo en el que hemos instalado MySQL
Server 5.5
 Username: usuario con permisos suficientes para acceder a MySQL Server 5.5,
como es la primera vez sólo podremos acceder con el superusuario root, luego
podremos crear otros usuarios con permisos más restringidos.
 Password: contraseña del superusuario root.
Desde MySQL Administrator se puede ver información sobre el MySQL Server 5.5 en
"Server Information":

Para crear un nuevo "Catálogo" ó "Catalog" ó "Esquema" ó "Schema" se pulsa en


"Catalogs". A continuación en el Item Information Schema se pulsa el botón derecho del
ratón y se selecciona "Create New Schema":
Se introduce el nombre del esquema, base de datos, schema clientes y se pulsa tecla
"OK":

A continuación, se selecciona el nuevo esquema creado "clientes" y, en la parte derecha


de la ventana de MySQL Administrator, y se pulsa en el botón "Create Table" para crear
una nueva tabla. Se muestra una ventana de creación de tabla donde se puede indicar el
nombre, el comentario y los campos que contendrá esta tabla con sus tipos de datos.
También se puede indicar los índices.
Se debe colocar el nombre de la tabla y sobre la columna denominada Column Name se
debe dar un clic, para así, editar el campo.
Los Campos de la tabla son:

Cedula, entero, llave primaria

Nombre, cadena(longitud 30), no null

Direccion, cadena(longitud 30), no null

Telefono, entero, no null

Correo, cadena(longitud 60), no null


Una vez creados todos los campos y todos los índices para la tabla se pulsa el botón
"Apply Changes".

Aparece la siguiente ventana de confirmación.


Se pulsa el botón execute.

Pulsar el botón Close


Haciendo uso de MySQL command Line

Es una interfaz de línea de comandos para los usuarios finales gestionar los objetos de
datos de usuario. "Mysql" tiene las siguientes características principales:

 "Mysql" es la interfaz de línea de comandos. No se trata de una interfaz gráfica de


usuario (GUI).
 "Mysql" soporta todos los estándares SQL Data Definition Language (DDL) para el
servidor de comandos para ejecutar.
 "Mysql" apoya todos los estándares SQL Lenguaje de manipulación de datos
(DML) instrucciones al servidor a ejecutar.
 "Mysql" apoya muchas de no SQL comandos "mysql" se ejecutará por sí mismo.
 "Mysql" proporciona acceso al sistema de ayuda del lado del servidor.
 "Mysql" permite que los archivos de comandos que se ejecuta en un modo por
lotes.
 "Mysql" permite salida de la consulta para tener el formato de las tablas HTML.
 "Mysql" permite salida de la consulta para tener el formato de elementos XML.

Se ejecuta de la siguiente manera:

Pasaporte root
Se inicia sesión.

LENGUAJE DDL (LENGUAJE DESCRIPTOR DE DATOS)

Abrir la base de datos clientes (use clientes;)

Listar las tablas de la base de datos (show tables;)

Visualizar la estructura de la tabla cliente (describe cliente;)


Se desea modificar la columna correo para que los valores sean obligatorios:

Alter table cliente modify correo varchar(60) not null;

Sintaxis de ALTER TABLE

Tomado de: http://dev.mysql.com/doc/refman/5.0/es/alter-table.html

ALTER [IGNORE] TABLE tbl_name


alter_specification [, alter_specification] ...

alter_specification:
ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (column_definition,...)
| ADD INDEX [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
UNIQUE [index_name] [index_type] (index_col_name,...)
| ADD [FULLTEXT|SPATIAL] [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP INDEX index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col_name
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| table_options

En SQL, 'Alter' es un comando de la categoría DDL (Data Definition Language) y como su


nombre lo indica sirve para alterar objetos ya creados en un base de datos, su uso
principal es la modificación de tablas. Como en otros artículos de LinuxTotal.com.mx
enseñaré su sintaxis a través de varios ejemplos de uso. Se asume que ya tienes creada
la base de datos y que sabes como usar el monitor (interface de línea de comandos de
MySQL), asi que esta guía es como un referencia rápida (cheat sheet) para cuando la
requieras.

REFERENCIA DE USO DE 'ALTER TABLE' EN MYSQL


SOBRE UNA TABLA
ALTER TABLE ejemplo ENGINE = InnoDB
Cambiar el tipo de motor (engine) de la tabla 'ejemplo'
ALTER TABLE personas RENAME usuarios
Cambia el nomnbre de la tabla 'personas' a 'usuarios'
ALTER TABLE ejemplo AUTO_INCREMENT=1000
En la tabla 'ejemplo' cualquiera que sea la columna que tenga 'AUTO_INCREMENT' en
sus propiedades (solo puede haber una), los nuevos registros comenzarán a partir de
'1000' o cualquier número indicado, no es posible utilizar un valor ya existente.
ALTER TABLE ejemplo CONVERT TO CHARACTER SET latin1
La tabla 'ejemplo' ahora almacenará sus valores en base al juego de caracteres 'latin1'
(iso-8859-1).
OPERACIONES CON DROP
ALTER TABLE ejemplo DROP COLUMN nombre
Elimina la columna 'nombre' de la tabla 'ejemplo'.
ALTER TABLE ejemplo DROP COLUMN nombre, DROP COLUMN paterno
Elimina más de una columna.
ALTER TABLE ejemplo DROP COLUMN nombre, DROP COLUMN paterno
Elimina más de una columna.
ALTER TABLE ejemplo DROP INDEX usuario
Elimina el índice 'usuario'.
ALTER TABLE ejemplo DROP PRIMARY KEY
Elimina la llave primaria de la tabla 'ejemplo'
ALTER TABLE ejemplo DROP FOREIGN KEY id_usuario
Elimina de la tabala 'ejemplo' la llave foranea 'id_usuario'.

OPERACIONES CON CHANGE Y MODIFY


ALTER TABLE ejemplo CHANGE monto cantidad FLOAT(8,2)
Cambia el nombre de la columna 'monto' al nuevo nombre 'cantidad' con la definición del
tipo de datos.
ALTER TABLE ejemplo CHANGE cantidad cantidad FLOAT(10,2)
Cambia solo el tipo de datos de la columna, conservando el mismo nombre.
ALTER TABLE ejemplo MODIFY cantidad FLOAT(10,2)
Cambia solo el tipo de datos de la columna, conservando el mismo nombre. (Igual que el
anterior)
ALTER TABLE ejemplo MODIFY cantidad FLOAT(6,2) NOT NULL
Cambia el tipo de datos de la columna 'cantidad' y especifica que no admite nulos.
ALTER TABLE ejemplo MODIFY paterno VARCHAR(30)
Modifica el tamaño de la columna 'paterno'.
ALTER TABLE ejemplo MODIFY correo CONVERT TO CHARACTER SET utf8
Es posible convertir solo una columna, en este caso 'correo' a un juego de caracteres
distinto al de todo el resto de la tabla.
OPERACIONES CON ADD
ALTER TABLE ejemplo ADD fecha DATE
Añade una columna llamada 'fecha' del tipo 'DATE' al final de todas las demás existentes.
ALTER TABLE ejemplo ADD INDEX(categoria)
Añade un índice a la columna 'categoria'.
ALTER TABLE ejemplo ADD INDEX(categoria), ADD PRIMARY KEY(clave)
Añade un índice a la columna 'categoria' y además crea la llave primaria en la columna
'clave'.
ALTER TABLE ejemplo ADD UNIQUE(email)
Añade a la columna 'email' un índice del tipo único, no puede haber dos iguales.
ALTER TABLE ejemplo ADD consecutivo BIGINT AUTO_INCREMENT, ADD
INDEX(consecutivo)
Añade la columna 'consecutivo' con la característica de auto incremento y además
genera un índice sobre la misma.
ALTER TABLE ejemplo ADD materno VARCHAR(20) AFTER paterno
Añade la columna 'materno' después de la columna 'paterno'.
ALTER TABLE ejemplo ADD id INT FIRST
Añade la columna 'id' en primer lugar con respecto a las existentes.
ALTER TABLE usuarios ADD FOREIGN KEY(id) REFERENCES entradas(id_user)
Añade un 'Foreign key' en la columna 'id' de la tabla 'usuarios' que apunta a la columna
'id_user' de la tabla 'entradas'.

LENGUAJE DML (MANEJADOR DE DATOS)

Adición de un Registro
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
O:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
Consulta

Se sale del MySQL Server digitando la palabra exit

Taller a Realizar
Recordar….Haciendo uso de MySQL command Line

Es una interfaz de línea de comandos para los usuarios finales gestionar los objetos de
datos de usuario. "Mysql" tiene las siguientes características principales:
 "Mysql" es la interfaz de línea de comandos. No se trata de una interfaz gráfica de
usuario (GUI).
 "Mysql" soporta todos los estándares SQL Data Definition Language (DDL) para el
servidor de comandos para ejecutar.
 "Mysql" apoya todos los estándares SQL Lenguaje de manipulación de datos
(DML) instrucciones al servidor a ejecutar.
 "Mysql" apoya muchas de no SQL comandos "mysql" se ejecutará por sí mismo.
 "Mysql" proporciona acceso al sistema de ayuda del lado del servidor.
 "Mysql" permite que los archivos de comandos que se ejecuta en un modo por
lotes.
 "Mysql" permite salida de la consulta para tener el formato de las tablas HTML.
 "Mysql" permite salida de la consulta para tener el formato de elementos XML.
Se ejecuta de la siguiente manera:
Pasaporte root

Se inicia sesión.
DROP DATABASE IF EXISTS `servicios`;
CREATE DATABASE `servicios`;
USE `servicios`;

CREATE TABLE `encuesta` (


`cedula` BIGINT( 10 ) UNSIGNED NOT NULL ,
`nombre` VARCHAR( 30 ) NOT NULL ,
`ciudad` VARCHAR( 30 ) NOT NULL ,
`domicilio` VARCHAR( 30 ) NOT NULL ,
`telefono` INT( 10 ) NOT NULL ,
`idcontrato` INT( 2 ) NOT NULL ,
`idservicio` INT( 2 ) NOT NULL ,
PRIMARY KEY ( `cedula` ) ) ENGINE = InnoDB ;
CREATE TABLE `servicios` (
`idservicio` INT( 2 ) UNSIGNED NOT NULL ,
`nombre` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `idservicio` ) ) ENGINE = InnoDB ;

CREATE TABLE `contratos` (


`idcontrato` INT( 2 ) UNSIGNED NOT NULL ,
`nombre` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `idcontrato` ) ) ENGINE = InnoDB ;

INSERT INTO `servicios`.`contratos` (


`idcontrato` ,
`nombre`
)
VALUES (
'01', 'Mensual'
), (
'02', 'Bimensual'
);

INSERT INTO `servicios`.`servicios` (


`idservicio` ,
`nombre`
)
VALUES (
'01', 'Familiar'
), (
'02', 'Premiere'
);

ALTER TABLE encuesta ADD FOREIGN KEY (idcontrato )


REFERENCES contratos (idcontrato);
ALTER TABLE encuesta ADD FOREIGN KEY ( idservicio )
REFERENCES servicios ( idservicio ) ;

SELECT *
FROM encuesta ;
SELECT *
FROM contratos;
SELECT *
FROM servicios;
CUARTO MOMENTO. MODULO sqldb
Traducción desde: http://mysql-python.sourceforge.net/MySQLdb.html
_mysql
_mysql proporciona una interfaz que implementa API MySQL con lenguaje C (Módulo
SQLite).
Traducción API MySQL C
El API C de MySQL ha sido desarrollado bajo el paradigma orientado a objetos. Las
únicas estructuras de datos MySQL, que se aplican son los de tipos MySQL (conexión a
base de datos) y MYSQL_RES (manejador del resultset) tipos. En general, cualquier
función que toma MYSQL * mysql como argumento es ahora un método del objeto de
conexión, y cualquier función que toma MYSQL_RES * es un argumento de un objeto
resultset. Las Funciones que no requieren ninguna de las estructuras de datos de MySQL
se implementan como funciones en un módulo. Funciones que requieren una de las otras
estructuras de datos MySQL en general, no se aplican. Funciones obsoletas no se
implementan. En todos los casos, el prefijo mysql_ se aplica con su respectivo método. La
mayoría de los métodos enumerados conn también están disponibles como métodos del
objeto Connection MySQLdb. Su uso no es portátil.
MySQL C correlación de funciones de la API
C API (Módulo SQLite) _mysql
mysql_affected_rows () conn.affected_rows ()
mysql_autocommit () conn.autocommit ()
mysql_character_set_name () conn.character_set_name ()
mysql_close () conn.close ()
mysql_commit () conn.commit ()
mysql_connect () _mysql.connect ()
mysql_data_seek () result.data_seek ()
mysql_debug () _mysql.debug ()
mysql_dump_debug_info conn.dump_debug_info ()
mysql_escape_string () _mysql.escape_string ()
mysql_fetch_row () result.fetch_row ()
mysql_get_character_set_info () conn.get_character_set_info ()
mysql_get_client_info () _mysql.get_client_info ()
mysql_get_host_info () conn.get_host_info ()
mysql_get_proto_info () conn.get_proto_info ()
mysql_get_server_info () conn.get_server_info ()
mysql_info () conn.info ()
mysql_insert_id () conn.insert_id ()
mysql_num_fields () result.num_fields ()
mysql_num_rows () result.num_rows ()
mysql_options () varias opciones para _mysql.connect ()
mysql_ping () conn.ping ()
mysql_query () conn.query ()
C API (Módulo SQLite) _mysql
mysql_real_connect () _mysql.connect ()
mysql_real_query () conn.query ()
mysql_real_escape_string () conn.escape_string ()
mysql_rollback () conn.rollback ()
mysql_row_seek () result.row_seek ()
mysql_row_tell () result.row_tell ()
mysql_select_db () conn.select_db ()
mysql_set_character_set () conn.set_character_set ()
mysql_ssl_set () opción ssl para _mysql.connect ()
mysql_stat () conn.stat ()
mysql_store_result () conn.store_result ()
mysql_thread_id () conn.thread_id ()
mysql_thread_safe_client () conn.thread_safe_client ()
mysql_use_result () conn.use_result ()
mysql_warning_count () conn.warning_count ()
Client_ * MySQLdb.constants.CLIENT. *
CR_ * MySQLdb.constants.CR. *
ER_ * MySQLdb.constants.ER. *
FIELD_TYPE_ * MySQLdb.constants.FIELD_TYPE. *
Flag_ * MySQLdb.constants.FLAG. *
Conexión Bases de Datos _mysql
La conexión más sencilla es:
import _mysql
db = _mysql.connect ()
Esto crea una conexión con el servidor MySQL se ejecuta en la máquina local utilizando
conexión con nombre en Windows, su nombre de usuario (a partir de la variable de
entorno USER), sin contraseña, y no utiliza una base de datos.
La manera más completa es la siguiente:
import _mysql
conn = _mysql.connect(user = 'root', passwd = 'root', db = 'servicios', host =
'localhost',port=3307)
MySQLdb
MySQLdb es un módulo Python que importa y ejecuta la interfaz _mysql haciendolo
compatible con la interfaz API de Python DB (versión 2).
Funciones MySQLdb
connect (parámetros. ..)
Constructor para la creación de una conexión con la base de datos. Devuelve un
objeto Connection. Los parámetros son los mismos que para la API de C de
MySQL. Además, hay algunas palabras clave adicionales que corresponden a lo
que se puede pasar mysql_options () antes de conectar. Tenga en cuenta que
algunos de los parámetros deben ser especificados como argumentos clave! El
valor predeterminado de cada parámetro es NULL o cero, según el caso. Los
parámetros más importantes son:
host=
nombre de host para conectarse a. Por defecto: utilizar el localhost a través de un
socket windows (en su caso)
user=
usuario para autenticarse como. Por defecto: corriente de usuario efectivo.
passwd=
contraseña para autenticarse con. Por defecto: sin contraseña.
db=
base de datos a utilizar. Por defecto: no base de datos predeterminada.
port=
Puerto TCP del servidor MySQL. Por defecto: puerto estándar (3306).
conv=
tipo de diccionario de conversión. Por defecto: una copia
de MySQLdb.converters.conversions
connect_timeout=
Abortar si conexión no se completa en un número dado de segundos. Por defecto:
(?) Sin tiempo de espera
named_pipe=
Utilice una tubería con nombre (Windows). Por defecto: no.
init_command=
Comando inicial para emitir al servidor al conectarse. Por defecto: Nada.
read_default_file=
Archivo de configuración de MySQL para leer; consulte la documentación de
MySQL para mysql_options ().
read_default_group=
Grupo predeterminado para leer; consulte la documentación de MySQL
para mysql_options ().
cursorclass=
clase cursor ese cursor () usa, a menos que se invalida. Por
defecto:. MySQLdb.cursors.Cursor Este debe ser un parámetro de palabra clave.
use_unicode=
Si es True, CHAR y VARCHAR y TEXT columnas se devuelven como cadenas
Unicode, utilizando el juego de caracteres configurada. Lo mejor es establecer la
codificación predeterminada en la configuración del servidor, o la configuración del
cliente (léase con read_default_file). Si cambia el conjunto de caracteres después
de conectar (MySQL-4.1 y posteriores), tendrás que poner el nombre de juego de
caracteres correcto en connection.charset.
Si es falso, las columnas de texto-como se devuelven como cadenas normales,
pero siempre se puede escribir cadenas Unicode.
Este debe ser un parámetro de palabra clave.
charset=
Si está presente, el conjunto de caracteres de conexión cambiará a este juego de
caracteres, si no son iguales. Apoyo a cambiar el juego de caracteres requiere
MySQL-4.1 y el servidor más adelante; si el servidor es demasiado viejo, se
genera la excepción UnsupportedError. Esta opción implica use_unicode = True,
pero se puede sustituir esto con use_unicode = False, aunque probablemente no
debería.
Si no está presente, se utiliza el conjunto de caracteres por defecto.
Este debe ser un parámetro de palabra clave.
sql_mode
Si está presente, el modo SQL sesión se establece en la cadena dada. Si no está
presente, el modo SQL sesión será sin cambios.
Atributos MySQLdb
apilevel
Constante de cadena que indica el nivel de la API DB compatible. '2 .0'
threadsafety
Constante entera que indica el nivel de seguridad de los hilos de la interfaz
admite. Esto se establece en 1, lo que significa: Las roscas se pueden compartir el
módulo.
El protocolo de MySQL no puede controlar varios subprocesos utilizando la misma
conexión a la vez. . Algunas versiones anteriores de MySQLdb utilizado bloqueo
para lograr un threadsafety de 2 Si bien esto no es muy difícil de lograr mediante la
clase Cursor estándar (que mysql_store_result utiliza ()), se complica por
SSCursor (que utiliza mysql_use_result (), con la última debe asegurarse de que
todas las filas han sido leídos antes de otra consulta se puede ejecutar. Esto se
complica aún más por la suma de las operaciones, ya que las transacciones se
inician cuando un cursor ejecutar una consulta, pero terminan
cuando COMMIT o ROLLBACK es ejecutado por el objeto Connection. Dos temas
simplemente no pueden compartir una conexión, mientras que una transacción en
curso, además de no poder compartirla durante su ejecución. Esto excesivamente
complicado el código hasta el punto en que simplemente no vale la pena.
charset
El juego de caracteres utilizado por la conexión. En MySQL 4.1 y siguientes, es
posible (aunque no se recomienda) para cambiar el conjunto de caracteres de la
conexión con una sentencia SQL. Si usted hace esto, usted también tendrá que
cambiar este atributo. De lo contrario, tendrás que codificar errores.
paramstyle
Constante de cadena que indica el tipo de formato de marcador de parámetro
esperado por la interfaz. Se establece en 'formato' = ANSI códigos de formato
printf de C, por ejemplo, "... WHERE name =% s '. Si un objeto de asignación se
utiliza para conn.Execute (), a continuación, la interfaz utiliza realmente = Python
códigos "pyformat 'en formato extendido, por ejemplo," ... WHERE name =%
(name) s'. Sin embargo, la API actualmente no permite la especificación de más de
un estilo en paramstyle.
Tenga en cuenta que cualquier signos de porcentaje literales en la cadena de
consulta se pasa a ejecutar () deben escaparse, es decir,%%.
Marcadores de posición de parámetros sólo se pueden utilizar para insertar
valores de columna. No pueden ser utilizados para otras partes de SQL, tales
como nombres de tablas, declaraciones, etc
conv
Un diccionario o mapeo que controla cómo los tipos se convierten de MySQL para
Python y viceversa.
Si la clave es un tipo MySQL (. Desde field_type *), entonces el valor puede ser:
 un objeto invocable que toma un argumento de cadena (el valor de
MySQL), 'que devuelve un valor de Python
 una secuencia de 2-tuplas, donde el primer valor es una combinación de
banderas de MySQLdb.constants.FLAG, y el segundo valor es una función
que el anterior. La secuencia se prueba hasta que las banderas en el
campo coinciden con los del primer valor. Si ambos valores son Ninguna,
entonces la conversión por defecto se hace. En la actualidad esto sólo se
utiliza para distinquish columnas TEXT y BLOB.
Si la clave es un tipo de Python o clase, a continuación, el valor es un objeto de
Python que se puede llamar (por lo general de una función) tomar dos argumentos
(valor a convertir, y el Diccionario de conversión), que convierte los valores de este
tipo a un valor de cadena literal de SQL.
Esto se inicializa con los valores predeterminados razonables para la mayoría de
los tipos. Al crear un objeto Connection, puede pasar su propio diccionario
convertidor de tipos como un parámetro de palabra clave.De lo contrario, utiliza
una copia de MySQLdb.converters.conversions. Varios tipos no estándar se
devuelven como cadenas, que es como MySQL devuelve todas las
columnas. Para más detalles, consulte la documentación incorporada en el
módulo.
Objeto de conexión
Los Objetos de conexión son devueltos por la función connect ().
commit ()
Si la base de datos y las tablas admiten actualización/transacción (adición, edición
y borrado), retorna True si hay éxito en operación; de lo contrario, retorna False
(Fracaso).
rollback ()
Si la base de datos y las tablas admiten actualización/transacción (adición, edición
y borrado), se anulan las actualizaciones/transacciones en curso (devuelve a la
base de datos al estado previo antes de la última llamada a la sentencia
commit); de lo contrario genera una excepción NotSupportedError .
cursor ([cursorclass])
MySQL no soporta cursores, sin embargo, los cursores se pueden emular
mediante una clase cursor.
close ()
Cierra la conexión de base de datos.

Objeto Cursor
CallProc (procname, args)
Llama procname (procedimiento almacenado) con la secuencia de los argumentos
en args.

close ()
Cierra el cursor. Sino está abierto genera una excepción ProgrammingError. Si
está utilizando los cursores del lado del servidor, es muy importante para cerrar el
cursor cuando haya terminado con él y antes de crear uno nuevo.
execute (sentencia sql [parámetros])
Ejecuta una sentencia Sql.
executemany (sentencias sql [parámetros])
Ejecuta múltiples sentencias sql.

fetchone ()
Obtiene la siguiente fila de un conjunto de resultados de consulta, devolviendo una sola
secuencia, o ninguno, cuando no hay más datos disponibles.

fetchmany ([size = cursor.arraysize])


Obtiene la siguiente serie de filas de un resultado de consulta, devolviendo una lista. Una
lista vacía se devuelve cuando no hay más filas disponibles.
El número de filas hay que seleccionar por llamada se especifica mediante el parámetro
de tamaño. Si no se le da, arraysize del cursor determina el número de filas a captar. El
método debe tratar de recoger tantas filas como indica el parámetro de tamaño. Si esto no
es posible debido al número especificado de filas que no están disponibles, menos filas
pueden ser devueltos.
Tenga en cuenta que hay consideraciones de rendimiento que participan en el parámetro
de tamaño. Para un rendimiento óptimo, es mejor usar el atributo arraysize. Si se utiliza el
parámetro de tamaño, entonces lo mejor es para que conserve el mismo valor de uno ()
fetchmany llamada y la siguiente.
fetchall ()
Obtiene todas las filas de un resultado de consulta (select), devolviendo una lista. Tenga
en cuenta que atributo arraysize del cursor puede afectar al rendimiento de esta
operación. Una lista vacía se devuelve cuando no hay filas que cumpla con el select.
info ()
Devuelve información acerca de la última consulta.
lastrowid()
Este atributo de sólo lectura proporciona el identificador la última fila adicionada. Sólo se
establece si ha emitido una sentencia INSERT con el método execute ().
nextset ()
Desplaza el cursor a la siguiente fila del objeto resultset (objeto resultado
de un select)

rowcount()
Si bien el Cursor de clase del módulo sqlite3 implementa este atributo, el propio soporte
del motor de base de datos para la determinación de las "filas afectadas" / "filas
seleccionadas" es similar a len(fetchall) en el caso de un select.
PRACTICA
Ahora, seleccione la versión Python 2.7>>IDLE (Python GUI)
Menú File>>New
Crear un módulo llamado basededatos y escribir el siguiente código:
import MySQLdb
def run_consulta(query=''):
conn = MySQLdb.connect(user = 'root', passwd = 'root', db = 'servicios', host =
"127.0.0.1",port=3307)
cursor = conn.cursor() # Crear un cursor
cursor.execute(query) # Ejecutar una consulta
row = cursor.fetchone()
while row is not None:
print(row)
row = cursor.fetchone()

def run_query(query=''):
conn = MySQLdb.connect(user = 'root', passwd = 'root', db = 'servicios', host =
"127.0.0.1",port=3307)
cursor = conn.cursor() # Crear un cursor
cursor.execute(query) # Ejecutar una consulta
if query.upper().startswith('SELECT'):
data = cursor.fetchone()
else:
conn.commit() # Hacer efectiva la escritura de datos
data = None
cursor.close() # Cerrar el cursor
conn.close()
return data

def adicion_tabla_referencia(tabla,llave,valor):# Adicion en una tabla de referencia


query = "INSERT INTO %s VALUES ('%s','%s')" % (tabla,llave,valor)
run_query(query)
def adicion_tabla_encuesta(cedula,nombre,ciudad,domicilio,telefono,idcontrato,idservicio):
servicio=consultallave("servi cios","idservicio",idservicio)
contrato=consultallave("contratos","idcontrato",idcontrato)
encuesta=consultallave("encuesta","cedula",cedula)
if servicio & contrato:
if not encuesta:
query = "INSERT INTO ENCUESTA VALUES ('%s','%s','%s','%s','%s','%s','%s')" %
(cedula,nombre,ciudad,domicilio,telefono,idcontrato,idservicio)
run_query(query)
print ("Exito en Adicion de Encuesta")
else:
print ("Fracaso en Adicion de Encuesta")
else:
print ("Fracaso en Adicion de Encuesta")

def consulta(tabla): # Consultar todos los registros de una tabla


query = "SELECT * FROM %s" % (tabla)
run_consulta(query)

def consultallave(tabla,llave,valor): # Consultar el registro por llave primaria


query = "SELECT * FROM %s where %s='%s'" % (tabla,llave,valor)
row=run_query(query)
if row is None:
return False
else:
return True

def borrado(tabla,llave,valor): # Borrar un registro


query = "DELETE FROM %s where %s='%s'" % (tabla,llave,valor)
run_query(query)

def edicion(tabla,llave,valor): # Borrar un registro


query = "UPDATE %s set %s='%s' where %s='%s'" %
(tabla,campo,nuevovalor,llave,valor)
run_query(query)
Verificar en python:

En MySQL:
TALLER

Diccionario de Datos:
Tabla Cliente
Campo Tipo LLave
cedula integer PK
nombre text
telefono integer
domicilio text
idservicio integer FK (servicios)
idcontrato integer FK (contrato)
Tabla Servicios (Tabla de referencia)
Campo Tipo LLave
idservicio integer PK
nombre text
Tabla Contratos (Tabla de referencia)
Campo Tipo LLave
idcontrato integer PK
nombre text

Donde PK: Llave Primaria y FK: Llave Foránea

Actividades:
Haciendo uso del módulo SQLite y SQLdb realice las siguientes actividades:
1. Diseño de Tabla: Servicios (máximo 3 registros), Contratos (máximo 3 registros).
2. Operaciones CRUD en la tabla Cliente:
- Adición: se debe verificar existencia de llaves foranes(idservicio, idcontrato), ,como
también, la no existencia de llave primaria (cedula)
- Borrado: verificar existencia de llave primaria (cedula)
- Edición: verificar existencia de llave primaria (cedula). Se modifica valores de
llaves primas
- Consulta: Producto cartesiano al consultar cliente

También podría gustarte