Programacion Basica - Intermedia en Python - Usta
Programacion Basica - Intermedia en Python - Usta
DUAD
FACULTAD DE CIENCIAS Y TECNOLOGIAS
PROGRAMA INGENIERIA EN INFORMATICA
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.
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
+, -, * Enteros y Flotantes
/ División Flotante
% 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.
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
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.
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
Clasificación de caracteres
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);
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
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")
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>]
except (IndexError,ZeroDivisionError):
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
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
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
1 2 3 4 5. . . n
A
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
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)
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.
b
d
c
Para los casos del Autómata de Ciclo Finito:
- Incremental
- Decremental
c SENTENCIA(S) SENTENCIA(S)
d INDICE=INDICE+1 INDICE=INDICE-1
IR AL MOMENTO b IR AL MOMENTO b
Presencia
i<=n
Ausencia
ESCRIBA No exista el valor x
Presencia
i<=n AND A[i]==x
Ausencia
ESCRIBA No exista el valor x
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
c. Sentencia(s)
d. Ir al Momento b
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>
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")
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
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
2. La estructura de un Módulo.
Encabezado del Módulo o Subprograma
Cuerpo
<Declaración de Variables locales>
<Sentencias>
FinCuerpo
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
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:
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
Lambda:
Módulos
• Reuso de código
• 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:
Permite copiar atributos (funciones, variables, clases) directamente al script sin cargar
todo el modulo.
Copia de Variables.
Sentencia import *:
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).
Recargando Módulos:
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__.
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)....
funcion2()
.....
PRACTICA EN PYTHON. ADMINISTRACIÓN DE MODULOS
PRACTICA EN PYTHON. CREACION DE PAQUETES
Dónde:
Salve el archivo
Para poder acceder a un módulo de un paquete es necesario
import package[.subpackage.[.module]]
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.
Patrón Descripción
Escapar
Por ejemplo: /\(s\)/ partidos (s) 'mientras que' /(\s)/ coincide con
cualquier espacio en blanco y captura el partido.
Cuantificadores
Por ejemplo: /o{1,3}/ coincide con "oo" en "dientes" y "o" en "la nariz".
Patrón delimitadores
Lookaheads
Alternancia
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.
^,$,.,?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).
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
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+$
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
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>):
La cláusula self
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>):
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.
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:
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/
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
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
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.
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)
Dónde:
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
Ejemplos:
# Genera una lista de 50 números aleatorios entre 1 y 999
lista = []
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)
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
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.
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
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
Ejemplo:
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:
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.
Ejemplo:
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.
Nota.
Se puede modificar el texto de la etiqueta mediante el comando config.
Ejemplo:
ventana = Tk()
ventana.title('usando Botones')
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:
ventana = Tk()
ventana.title('usando Botones')
boton1.grid(row=1,column=1)
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:
ventana = Tk()
ventana.title('usando Botones')
boton1.grid(row=1,column=1)
boton2.grid(row=1,column=2)
boton3.grid(row=1,column=3)
boton4.grid(row=1,column=4)
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.
Ejemplo:
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:
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
Código más preciso y más corto No apto para todas las tareas
> 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.
>>>
>>> (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].
print(result)
print(reduce(lambda a, b: a*b, data))
En ambos casos el resultado obtenido es 15.
Es así como los tipos de SQLite se convierten a los tipos de Python por defecto:
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.
import sqlite3
conn = sqlite3.connect('example.db')
o
import sqlite3
conn = sqlite3.connect(“memory:”)
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")
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
https://www.python.org/download/
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)
https://pypi.python.org/pypi/MySQL-python
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.
http://www.filehippo.com/es/download_mysql/tech/12987/
Descarga en Mozilla
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.
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
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
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.
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".
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.
http://mysql-administrator.softonic.com/
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":
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:
Pasaporte root
Se inicia sesión.
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
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
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`;
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.
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
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
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