Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion A Pyqt
Introduccion A Pyqt
arearect.py
# The program calculates area of rectangle
l=8
b=5
a=l*b
print ("Area of rectangle is ", a)
seleccione Ejecutar> Módulo Ejecutar en el menú o simplemente presione F5. Usted
recibirá el
siguiente resultado:
Area of rectangle is 40
10
# Integer literal
10.50
# Floating-point literal
10.50j
# Imaginary literal
'Hello'
# String literal
"World!"
# String literal
'''Hello World!
It might rain today
# Triple-quoted string literal
Tomorrow is Sunday'''
En Python, puede usar tanto comillas simples y dobles para representar cadenas.
Las cadenas que se ejecutan a través de múltiples líneas están representados por
comillas triples.
Variables
Las variables se utilizan para almacenar datos en un programa. Para definir una
variable, se elige un nombre para la variable y, a continuación, utiliza el signo
igual seguido de los datos que almacena. Las variables pueden ser letras,
números o palabras. Por ejemplo,
l = 10
length = 10
length_rectangle = 10.0
k="Hello World!"
Se puede ver en los ejemplos anteriores la variable puede ser un solo carácter o
una palabra o palabras unidas por guiones bajos. En función de los datos
almacenados en una variable, que se ha denominado como número entero, punto
flotante, cadena, booleano, y la lista o tuplas. Al igual que en los ejemplos
anteriores, las variables l y la duración son variables enteras, length_rectangle
es
una variable de punto flotante, y k es una variable de cadena. Los siguientes son
ejemplos de boolean, lista, y las variables de tupla:
a=True # Boolean variable
b=[2,9,4] # List variable
c=('apple', 'mango', 'banana') # tuple variable
A tuple in python language refers to an ordered, immutable (non
changeable) set of
values of any data type.
Comments
# This program computes area of rectangle
a=b+c # values of b and c are added and stored in a
Printing
Para los mensajes de impresión y los resultados de los cálculos, la función print
() se utiliza con la siguiente sintaxis,
print(["message"][variable list])
donde el message es la cadena de texto encerrada entre comillas simples o
dobles. La lista de variables puede ser una o más variables que contienen el
resultado de cálculo, como se muestra en estos ejemplos:
print
print
print
print
("Hello World!")
(10)
(l)
("Length is ",l)
Division Operator
Note
Cuando ambos operandos son enteros, el operador / se comporta
como //
El siguiente programa utiliza el verdadero operador de división para
calcular el área de un triángulo.
areatriangle.py
b=17
h=13
a=1.0/2.0*b*h
print ("Area of triangle is", a)
print ("Base= %d, Height is %d, Area of triangle is %f" %(b,h,a))
Output:
Area of triangle is 110.5
Base= 17, Height is 13, Area of triangle is 110.500000
average1.py
p=q=r=10
a=1.0/3.0*(p+q+r)
print ("Average of three variables is", a)
print ("Average of three variables is %.2f" %a)
print ("Average of three variables is %d" %a)
Output:
Average of three variables is 10.0
Average of three variables is 10.00
Average of three variables is 10
En este programa, se ve que el resultado de punto flotante se
redondea a 2 lugares mediante el uso de %.2f. Además, se ve que el
valor de punto flotante se trunca a un valor decimal cuando se
aplica % e código de formato a la misma.
Mientras se utiliza el operador de división verdadera, /, es
necesario asegurarse de que alguno de los operandos es un número de
punto flotante para evitar que un entero truncar correctos. Mientras
se utiliza el operador de división cierto, es mejor comenzar el
archivo fuente con esta declaración:
average2.py
from __future__ import division
p=q=r=10
a=(p+q+r)/3
print ("Average of three variables is", a)
Output:
Average of three variables is 10.0
Exponentiation
Para aplicar la exponenciación, utilice dos asteriscos: **. Por
ejemplo, a ** b signifca ab .
Usted recibe una excepción si a es menor que cero y b es un valor de
punto flotante con una parte fraccional no nulo.También puede
utilizar la función incorporada pow() para aplicar exponenciación.
Por ejemplo, pow(a, b) es el mismo que a**b.
Usted aprenderá acerca de la gestión de excepciones en el Capítulo
6, "Administración de archivos."
Vamos a escribir un programa para calcular el volumen de una esfera.
La fórmula es 4/3 * pi * r3, donde se sabe que el valor de radio r
debe ser 3.
volsphere.py
from __future__ import division
r=3
pi=22/7
v=4/3*pi*pow(r,3)
print ("Volume of sphere is %.2f" %v)
Output:
Volume of sphere is 113.14
En este programa, se puede ver que r3 se calcula a través de
pow(). La expresión pow(r, 3) también puede ser sustituida por
r**3, ya que ambos hacen la misma tarea.
¿Hay alguna manera de obtener el valor de Pi en lugar de calcular
manualmente como 22/7?
Sí, el módulo de matemáticas, además de otras funciones importantes,
también proporciona el valor de pi para usar directamente en
expresiones aritméticas. Usted aprenderá acerca del módulo de
matemáticas en detalle en el Capítulo 4, "Funciones y Módulos."
Por ahora, vamos a ver cómo el valor de pi se puede utilizar a
través del módulo de matemáticas. Modificar el programa anterior
para utilizar el valor de pi proporcionada por el módulo de
matemáticas.
Examples
p,q,r = 10,20,30
sum, avg = p+q+r,(p+q+r)/3
Los valores en el lado derecho del operador de asignación se
asignarán sobre una base de uno a uno; por ejemplo, 10 se le
asignará a la variable p, 20 se le asignará a la variable q, y así
sucesivamente.
Del mismo modo, en el segundo ejemplo, el resultado de la expresión
p + q + r se asignará a la variable de suma, y el resultado de la
expresión (p + q + r) / 3 se asigna a la variable promedio.
escapeseq.py
print('Hello World\nIt\'s hot today')
print('Festival Discount\b\b\b\b\b\b\b\b\b Offer')
print("Isn't it?")
print('Isn\'t it?')
print("He said: \"I am going \"")
print('\\Text enclosed in back slashes\\')
print ('Bell sound \a')
print('Name\tEmail Address\tContact Number')
Note
Syntax:
type(x)
donde x es el objeto cuyo tipo de datos se devolverán. La función acepta todo
tipo de parámetros, tales como números enteros, cadenas, listas, diccionarios,
tuplas, funciones, clases y módulos.
Examples:
type(10)
type('Hello')
El programa siguiente muestra los tipos de datos enteros,
flotadores, cadenas, booleanos, y así sucesivamente.
typeexample.py
a=10
b=15.5
c="Hello"
d=[2,9,4]
e=('apple', 'mango', 'banana')
f=True
print (type(a))
print (type(b))
print (type(c))
print (type(d))
print (type(e))
print (type(f))
Output:
<class 'int' >
<class 'float'>
<class 'str' >
<class 'list' >
<class 'tuple'>
<class 'bool' >
Este programa inicializa las variables a, b, c, d, e, y
de datos enteros, punto flotante, cadena, lista, tupla,
respectivamente. A partir de entonces, el tipo de datos
variables se determina y se visualiza usando la función
f para tipos
y Booleno,
de estas
type().
octhex.py
a=0o25
b=0x1af
print ('Value of a in decimal is', a)
c=19
print ('19 in octal is %o and in hex is %x' %(c,c))
d=oct(c)
e=hex(c)
print ('19 in octal is', d, 'and in hexa is', e)
Output:
Value of a in decimal is 21
19 in octal is 23 and in hex is 13
19 in octal is 0o23 and in hexa is 0x13
En este programa, las variables a y b se les asignan valores octales
y hexa, respectivamente. El valor octal se convierte y se muestra
como un decimal. Del mismo modo, el valor decimal 19 se convierte en
octal y hexa y visualiza usando las directivas %O y % x,
respectivamente. Además, mediante el uso de las funciones oct() y
hex(), el número 19 se convierte a octal y hexadecimal,
respectivamente.
Syntax:
variable=input ('Message')
Los datos introducidos por el usuario se asigna a la variable en
formato de cadena. Si desea que los datos en otro formato (entero,
flotante, etc), se tiene que convertir de forma explícita. Antes de
ver la conversión explícita, vamos a hablar acerca de la conversión
automática (coerción) en Python.
Coercion
En Python, si usted hace algunas operaciones aritméticas sobre los
operandos del mismo tipo de datos, no hay conversión automática o la
coacción se lleva a cabo. Cuando se calculan los operandos de
diferentes tipos de datos, la coacción tiene lugar.
Python convierte el operando con el tipo "más pequeño" para el tipo
"más grande". Por ejemplo, si alguno de los operandos es un número
flotante, entonces el otro operando es también convierte a float
punto. Si el argumento es un número complejo, el otro también se
convierte en complejo.
Del mismo modo, si bien es de tipo long, el otro es convertido a
largo. Un operando entero se convierte a float mediante la adición
de 0,0 a la misma.
Un tipo no complejo se convierte en un número complejo mediante la
adición de un cero componente imaginario, 0j, a ella.
Para la conversión explícita, las funciones que se le con frecuencia
utilizando son int (), float (), y str (). La función que se
necesita para el siguiente programa es una función int().
int()
Syntax:
int([x[, base]])
La objeto x especificado se convierte en formato entero. El
parámetro de base
26 y se refiere a
de la base es 10.
cae. Por ejemplo,
arearectinput.py
l=input("Enter length: ")
b=input("Enter width: ")
a=int(l)*int(b)
print ("Area of rectangle is",a)
Output:
Enter length: 9
Enter width: 5
Area of rectangle is 45
Los valores suministrados por el usuario serán a través de la
función de input(), que devuelve los valores proporcionados en
formato de cadena y por lo tanto se convierte en el tipo de datos
entero usando la función int().
Los valores introducidos por el usuario serán asignados a las
variables L y B, respectivamente. Como se dijo anteriormente, el
método de entrada devuelve datos en formato de cadena, por lo tanto,
los valores en las variables L y B se convierte en primer lugar de
la cadena en formato entero a través de la función int() antes de
que se utilizan en cualquier operación aritmética.
El siguiente programa calcula y devuelve el área de un círculo. La
fórmula es pi * r 2 . El r en la fórmula se refiere al radio, y su
valor será suministrado por el usuario.
areacircleinput.py
from math import pi
r=int(input("Enter radius: "))
a=pi*r*r
print ("Area of the circle is", a)
print ("Area of the circle is %.2f" %a)
Output:
Enter radius: 5
Area of the circle is 78.53981633974483
Area of the circle is 78.54
Bitwise Operations
Operaciones bit a bit
Cada numérica que se introduce en un ordenador
internamente en forma de dígitos binarios. Por
decimal 25 se representa internamente en forma
como 11001. Los operadores bit a bit operan en
binarios para dar los resultados deseados.
se representa
ejemplo, el valor
de dígitos binarios
estos dígitos
Note
bitwise.py
a=10
b=7
c=a&b
d=a ^ b
e= a | b
print ('The result of 10 and 7 operation is', c)
print ('The result of 10 exclusive or 7 operation is' , d)
print ('The result of 10 or 7 operation is', e)
g=a<<2
print ('Left shifting - Multiplying 10 by 4 becomes:' , g)
h=a>>1
print ('Right shifting - Dividing 10 by 2 becomes:',h)
Output:
The result of 10 and 7 operation is 2
The result of 10 exclusive or 7 operation is 13
The result of 10 or 7 operation is 15
Left shifting - Multiplying 10 by 4 becomes: 40
Right shifting - Dividing 10 by 2 becomes: 5
Los enteros 10 y 7 y el resultado de la aplicación del operador
&(AND) en ellos se muestran en la Figura 2.2 (a). La figura muestra
que el operador AND devuelve 1 si ambos enteros son 1; de lo
contrario devuelve 0. Figura 2.2 (b) muestra el resultado de aplicar
el operador exclusiva o en los dos enteros, 10 y 7. Usted puede ver
que el operador OR exclusivo devuelve 1 si cualquiera de los dos
enteros es 1.
Figura 2.2 (c) muestra el resultado de aplicar el operador OR;
devuelve 1 si uno o ambos de los números enteros son 1.
Complex Numbers
Un número complejo es la combinación de un real y una imaginaria
componente, donde ambos están representados por-punto flotante tipo
de datos. El componente imaginaria del número complejo es un
múltiplo de la raíz cuadrada de menos uno y se denota por j.
Example:
3+1.2j
En este ejemplo, 3 es un componente real, y 1,2 es el
componente imaginario y es igual a 1,2 × √ -1.
Los componentes real e imaginaria de un objeto complejo se
puede acceder mediante el uso de sus atributos real y imag.
El siguiente programa muestra la suma de dos números complejos:
complex.py
a = 3.0 + 1.2j
b= -2.0 - 9.0j
print
c=a+b
print
print
print
Output:
The
The
The
The
two complex
addition of
addition of
addition of
Note
Los números complejos se muestran entre paréntesis()
Al escribir programas, se encuentra con una situación en la que se
desea ejecutar una sentencia de bloque de los dos bloques. Es decir,
es necesario controlar el flujo del programa y ejecute una
instrucción de bloque de opciones disponibles, dependiendo de las
condiciones prevalecientes. Vamos a ver cómo tomar decisiones en
Python.
Making Decisions
Toma de decisiones
La afirmación de que ayuda en la toma de decisiones y el control de
flujo del programa es la instrucción if ... else.
if...else statement
La instruccion if ... else decide que el bloque de instrucciones que
se ejecutarán sobre la base de la expresión lógica incluido.
Un bloque de instrucciones se adjunta con el caso, así como con los
demás, y cuando se evalúa la expresión lógica, ya sea el caso de if
o de else sera ejecutado.
Syntax:
if (logical expression):
statement(s)
else:
statement(s)
Si la expresión lógica se evalúa como true, la sentencia if es
ejecutado; de lo contrario, se ejecuta la sentencia else.
Note
The else statement is optional.
Vamos a escribir un programa que pide al usuario que introduzca las
calificaciones del estudiante. Si las calificaciones son mayores o
iguales a 60, el programa debe mostrar un mensaje, Primera División.
Si no es así, se debe mostrar el mensaje de la Segunda División.
ifelse1.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
else:
print ("Second Division")
Output:
Enter grades: 75
First Division
Enter grades: 50
Second Division
Se puede ver en este programa que el usuario introduce los grados a
través de un método de input(). Dado que el valor introducido por el
input() es en formato de cadena, se convierte a entero y se asigna a
la variable m. El uso de una instrucción if ... else, se comprueba
el valor de m variables. Si el valor en la variable m es mayor que o
igual a 60, el Si se ejecuta el bloque, la visualización de la
primera división mensaje.
Si el valor introducido es inferior a 60, el bloque else va a ser
ejecutado, muestra el texto Segunda División. La salida del programa
confirma esto.
En este programa, mayor que o igual a (> =) compara el valor de la
variable m con 60. Tabla 2.3 se enumeran los operadores de
comparación.
ifelse2.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
else:
if(m >=45):
print ("Second Division")
else:
print ("Third Division")
Output:
Enter grades: 75
First Division
Enter grades: 50
Second Division
Enter grades: 40
Third Division
Se puede ver en este programa que una instrucción if
se escribe dentro de una sentencia más de lo externo
else. El si ... else ejecutará sentencia else dentro
sentencia else if la expresión lógica incluida en el
sentencia if se evalúa como False
... else
if ...
de la
exterior
if-elif-else statement
Si tiene varias expresiones lógicas para evaluar, y sobre la base de
esas expresiones lógicas que desea ejecutar un conjunto específico
de bloque de código, es necesario utilizar una sentencia if-elifelse
Syntax:
if (logical expression):
statement(s)
elif (logical expression 1):
statement(s)
[elif (logical expression n):
statement(s)]
else:
statement(s)
Se puede ver que la sentencia else y la sentencia if anidado
en ella se fusionan para formar una declaración elif. Una
declaración elif es útil para evitar el sangrado excesivo. El
ifelse2.py programa que usted escribió anteriormente puede
reescribirse con una instrucción if-elif-else, como se
muestra aquí:
ifelif.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
elif (m >=45):
print ("Second Division")
else:
print ("Third Division")
¿Qué pasa si necesita combinar más de una expresión lógica? Utilice
los operadores lógicos para conectar las expresiones lógicas. Vamos
a echar un vistazo rápido a los operadores lógicos.
Logical Operators
Al escribir expresiones lógicas, a veces es necesario combinar dos o
más lógicas expresiones. Las expresiones lógicas se suelen combinar
con los operadores lógicos AND, OR y NOT. La lista de operadores
lógicos con una breve descripción se muestra en la Tabla 2.4.
x and y
En la combinación de las expresiones lógicas por el operador lógico
AND, primero se evalúa la expresión lógica x, y si devuelve false,
el resultado de la combinación será x; de otro modo, el resultado
será Y.
Del mismo modo, en la combinación de las expresiones lógicas x e y
por el operador lógico OR, primero se evalúa la expresión lógica x,
y si el resultado es true, el resultado de la combinación será x; de
otro modo, el resultado será Y.
El ifelse2.py programa que usted escribió anteriormente puede
reescribirse combinando las expresiones lógicas con operadores
lógicos:
ifelse3.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
if(m >=45 and m<60):
print ("Second Division")
if (m<45):
print ("Third Division")
Usted ve que si el grado introducido es mayor que 60, el primer caso
se ejecutará el bloque, mostrando la primera división mensaje. Si la
calificación introducido es mayor que 45 y menor de 60, ambas
expresiones lógicas, m> = 45 y m <60, que es verdadero, y el mensaje
en el segundo bloque if, Segunda División, se mostrará. Si la nota
introducida es inferior a 45, el tercer bloque if se ejecutará,
mostrando el mensaje de la Tercera División.
x<=y <=z
Como era de esperar, si la expresión lógica x <= y es cierto,
entonces sólo la expresión lógica y <= z se evaluará.
Por ejemplo, la declaración se utiliza en el programa anterior, m> =
45 y m <60, se pueden encadenar para que aparezca como 45 <= m <60.
Vamos a volver a escribir el programa por el encadenamiento de los
operadores de comparación.
ifelschaining.py
m=int(input("Enter grades: "))
if(m >=60):
print ("First Division")
if(45<= m <60):
print ("Second Division")
if(m<45):
print ("Third Division")
Si el grado introducido es mayor que o igual a 45, la siguiente
parte de los operadores de cadena se evalúa para ver si el valor
introducido es menos de 60.
El siguiente programa pide al usuario que introduzca un valor entre
1 y 10 e imprime un mensaje basado en el valor introducido:
opr1.py
m=int(input("Enter a number between 1 and 10: "))
if 1<= m <=10:
print ("Number is within range")
else:
print ("Number is out of range")
Output:
Enter a number between 1 and 10: 3
Number is within range
Enter a number between 1 and 10: 15
Number is out of range
Se puede ver que el programa imprime el número de mensajes está
dentro del rango si el valor introducido es entre 1 y 10; de lo
contrario, se imprime el número de mensajes está fuera de rango
El siguiente programa determina si el valor introducido es par o
impar. El programa utiliza el operador de módulo,%. Recuerde que el
operador módulo devuelve el resto de la división.
evenodd.py
m=int(input("Enter a number "))
n = m%2
if n ==0:
print ("Number is even")
else:
print ("Number is odd")
Output:
Enter a number 6
Number is even
Enter a number 9
Number is odd
En este programa, se pide al usuario que introduzca un número que se
asigna a la variable m. La variable m se divide por 2, y si el resto
es 0, es decir, el número es un múltiplo de 2, un número de mensaje
es incluso se muestra. Del mismo modo, si el resto de la operación
de división no es 0, el número no es múltiplo de 2, y el número es
impar se muestra.
Note
Python proporciona una función DIVMOD, que tiene dos numérica
argumentos y devuelve el cociente y el resto, por lo que no
tiene que usar tanto / / para el cociente y el% para el resto
Al escribir programas, a veces desea ejecutar algunas declaraciones
en varias ocasiones. Para tales situaciones, se utiliza bucles.
Vamos a ver cómo utilizar bucles en Python.
Loops- Bucles
Loops se utilizan para ejecutar un conjunto de instrucciones
mientras una expresión lógica es verdadera. Usted aprenderá dos
lazos en esta sección: el bucle while y el bucle for.
Indentation – sangría
Python utiliza sangría para expresar la estructura de bloque de un
programa. A diferencia de otros lenguajes, Python no utiliza
aparatos ortopédicos o comenzar delimitadores / fin para denotar
bloques. En su lugar utiliza la sangría para representar bloques de
instrucciones.
Un bloque es una secuencia contigua de líneas lógicas, todos con
sangría en la misma cantidad, y una línea lógica con menos sangría
termina el bloque. La primera instrucción de un bloque no debe tener
sangría-no debe comenzar con cualquier espacio en blanco. Usted
puede utilizar tabuladores o espacios para declaraciones de sangría.
Python sustituye cada ficha con hasta ocho espacios.
Note
No mezclar espacios y tabuladores para el sangrado, como
pestañas pueden ser tratados de manera diferente por
diferentes editores.
El programa siguiente muestra los números de 1 a 10 usando el bucle
while:
whileloop.py
k=1
while k <=10 :
print (k)
k=k+1
Output:
1
2
3
4
5
6
7
8
9
10
Se puede ver que el bucle while se establece para ejecutar siempre
que el valor de la variable k es menor o igual a 10. En el bucle, se
imprime el valor de la variable k y el incremento de su valor en 1
para imprimir el siguiente valor sucesivo .
También se puede ver que el bucle while termina cuando la expresión
lógica se evalúa como falsa. ¿Hay alguna otra manera de terminar un
bucle? Además, ¿y si desea saltar el bucle sobre la aparición de
alguna condición? La siguiente sección explica cómo terminar y pase
un bucle.
Syntax:
break
El programa siguiente muestra cómo utilizar una sentencia break para
terminar un bucle while para imprimir 10 números:
breakex1.py
k=1
while 1 :
print (k)
k=k+1
if(k>10):
break
Output:
1
2
3
4
5
6
7
8
9
10
Inicializa la variable k al valor 1. Además, se establece un bucle
while para ejecutar infinitamente. En el bucle, se muestra variable
k y luego incrementas su valor en 1. Cuando k se convierte en más de
10, que sale del bucle infinito a través de la sentencia break.
Recuerde que el valor 1 representa el valor true. También puede
reemplazar while 1 por while True para crear un bucle infinito.
Ahora echemos un vistazo a la declaración que le dice a Python para
omitir la parte del bucle actual y comenzar con la siguiente
iteración.
Syntax:
continue
El siguiente programa imprime los números del 1 al 10, excepto para
el valor 7:
continueex.py
k=1
while k <=10 :
if k==7:
k+=1
continue
print (k)
k=k+1
Output:
1
2
3
4
5
6
8
9
10
En primer lugar, inicializar variable k para 1. Entonces, establecer
el bucle while para ejecutar siempre y cuando k es menor que o igual
a 10. En el bucle while, imprima el valor de k y luego incrementar
su valor en 1. Asimismo, omita el cuerpo del bucle a través de una
sentencia continue cuando el valor de k es 7. Es decir, no se
imprimen k pero sólo se incrementa su valor en 1 para ejecutar el
bucle con el siguiente valor de la secuencia.
passex1.py
k=1
while k <=10 :
if k==7:
pass
else:
print (k)
k+=1
Output:
1
2
3
4
5
6
8
9
10
Se puede ver que el valor de k se inicializa a 1. El bucle
while se ejecutará hasta k se hace mayor que 10. En el bucle
while, se muestra el valor de k, y su valor se incrementa en
1 cuando el valor de k es igual a 7, se ejecuta la sentencia
pass.; k no se muestra y se incrementa en 1 para ejecutar el
bucle con el siguiente valor de secuencia.
Note
Contenedores en Python comprende el conjunto, secuencias, como
listas, tuplas, y cadenas, y las asignaciones, como diccionarios.
Usted aprenderá acerca de estos contenedores en detalle en el
Capítulo 3, "Secuencias".
Syntax:
for iterating_var in sequence:
statement1
statement2
statement3
El primer elemento de la secuencia se asigna a la variable de
iteración iterating_var y se ejecuta el bloque de instrucciones. Uno
por uno, cada elemento de la secuencia se asigna a iterating_var, y
el bloque de instrucciones se ejecuta hasta que se termine toda la
secuencia.
El programa siguiente muestra los números de 1 a 10:
forloop.py
for i in range(1,11):
print (i)
Esto imprime una secuencia de números, que se generan de 1 a 10
utilizando la función integrada range(). Dado que no se indica el
valor de paso, el valor por defecto de 1 es el valor del paso.
El programa siguiente muestra los números impares entre 1 y 10. Los
dos valores impares sucesivos difieren en 2, por lo que utilizan el
valor de paso de 2 en la funcion range().
forloop2.py
print ("Odd numbers between 1 and 10 are:")
for i in range(1,11,2):
print (i)
Output:
Odd numbers between 1 and 10 are:
1
3
5
7
9
La función range(1,11,2) en primer lugar generar un valor de 1. A
este valor se añadirá el valor del paso 2 para generar el siguiente
valor de la lista, 3. El proceso continuará hasta que el valor
generado es menor o igual a 10.
Un bucle se puede utilizar para imprimir valores aleatorios a partir
de una tupla. Vamos a discutir tuplas en detalle en el próximo
capítulo. Por ahora es suficiente saber que una tupla es un objeto
inmutable que se puede utilizar para representar un conjunto de
valores de cualquier tipo de datos.
Los valores o elementos de una tupla se incluyen entre paréntesis,
(). Un objeto inmutable es uno que no se puede cambiar una vez que
se haya creado. Usted va a utilizar los operadores de membresía para
mostrar los elementos de la tupla.
Membership Operators
Operadores de membresía
Pruebas de un operador de membresía para formar parte de una
secuencia, como cadenas, listas o tuplas. Hay dos operadores de
afiliación, como se muestra en la Tabla 2.5.
for i in ( 7, 3, 8, 1, 4 ):
print i
Aquí usted proporciona una tupla de valores en el bucle for.
El primer valor de la tupla se asignará a la variable i, y se
ejecuta el bucle. A continuación, el siguiente valor de la tupla
será asignado a i y el bucle se ejecuta. El bucle se ejecutará con
cada valor de la tupla. En el cuerpo del bucle se muestra sólo el
valor asignado a la i, que muestra todos los valores de la tupla uno
por uno.
El programa siguiente muestra un valor aleatorio entre 1 y 9. Para
obtener valores aleatorios, utilizará una función eleccion:
choice().
Note
Para utilizar la función opción() en un programa, es
necesario importar un módulo random.
Example:
k=choice([2,4,6,8,10])
Usted recibirá un valor aleatorio extraído desde la secuencia
especificada, lo cual puede ser de 2, 6, o algún otro valor de la
lista.
randomnumber.py
from random import choice
k=choice(range(1,10))
print ("Random number is",k)
Output:
Random number is 4
Random number is 1
En este programa, la función range() devolverá valores entre 1 y 9.
La función choice() recogerá cualquier valor al azar de estos nueve
valores y asignarla a la variable k, que luego se muestra en la
pantalla. Cada vez que se ejecuta el programa, la función choice()
devuelve un valor aleatorio.
La siguiente imprime los números primos entre 1 y 100.
primes.py
print (1)
for i in range(2,101):
x=1
for j in range(2, i):
n=i%j
if n==0:
x=0
break
if x==1:
print (i)
Output:
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
Summary
En este capítulo usted aprendió a aplicar operaciones aritméticas y
diferentes operadores lógicos y de membresía en programas Python.
También vio el uso de secuencias de escape. Para mejorar la
interacción con el usuario, que ha aprendido a obtener datos del
usuario y procesar los datos entrantes. Ustedes vieron la conversión
de los datos en diferentes tipos. También ha aprendido a mostrar los
valores octales y hexa, realizar operaciones a nivel de bits y
utilizar los números complejos. También vio el uso de if ... else en
la toma de decisiones. Por último se vio usando bucles while y for
para realizar tareas repetitivas.
En el próximo capítulo, usted va a aprender sobre los recipientes:
secuencias, correspondencias y conjuntos. Una secuencia incluye
cadenas, listas y tuplas, y las asignaciones incluyen diccionarios.
También aprenderá a realizar operaciones en secuencias a través de
sus respectivos métodos. Además, usted aprenderá acerca de una y
matrices bidimensionales. Por último, aprenderá a aplicar las
operaciones de conjuntos tales como los sindicatos, las
intersecciones y diferencias ..
Chapter 3. Sequences
En este capítulo se tratan los siguientes temas:
•
Sequences
Una secuencia contiene objetos que se guardan en un orden
específico. Se puede identificar un objeto en una secuencia por su
ubicación de índice. Además, se puede extraer de una secuencia con
la operación de corte. En este capítulo se verá en tres ejemplos de
secuencias: listas, tuplas, y cadenas.
•
•
•
Note
Note
A diferencia de otros lenguajes de programación, no hay ningún
tipo de datos de carácter independiente en Python. Un carácter
se considera una cadena de longitud uno.
Dónde 0,1 ... son el índice. Una cadena es terminada por un carácter
NULL, \ 0. Puede acceder a cualquier carácter de la cadena a través
de su índice. Por ejemplo, K [0] accede al primer carácter, D, K [1]
accede al segundo carácter, una, y así sucesivamente.
Cadenas de Python soportan varios métodos y funciones. ¿Cuál es la
diferencia entre las funciones y los métodos?
50
is numeric
fifty
is not numeric
Output:
Enter a string: enormous
The string entered is: enormous
The maximum alphabetical character from the string is: u
The minimum alphabetical character from the string is: e
Enter a number: 53
The number in string form is 53 its length is 2 and its first digit is 5
Se puede ver que las dos cadenas son introducidos Hola y ABC. La
cadena Hola se une a cada carácter de la cadena de ABC.
Haga cadenas en los métodos de soporte de Python que ayudan en la
búsqueda o la búsqueda de una subcadena en una cadena? Sí. La Tabla
3.2 muestra los métodos de las cadenas que ayudan en la búsqueda de
subcadenas de una cadena.
Table 3.2. String Methods Used to Find Substrings in
a String
El programa siguiente muestra el uso de diferentes funciones para
contar el número de las vocales en una frase:
countvowel.py
s=input('Enter a sentence: ')
n=len(s)
c=0
for i in range(0,n):
if(s[i]=='a' or s[i]=='A' or s[i]=='e' or s[i]=='E' or s[i]=='i' or
s[i]=='I' or s[i]
=='o' or s[i]=='O' or s[i]=='u' or s[i]=='U'):
c+=1
print ('The number of vowels in the sentence is' , c)
t=s.count('a', 0, n)+ s.count('A', 0, n)+ s.count('e', 0, n)+s.count('E', 0, n)+
s.count('i', 0, n)+ s.count('I', 0, n)+ s.count('o', 0, n)+ s.count('O', 0, n)+
s.count('u', 0, n)+s.count('U', 0, n)
print ('The number of vowels in the sentence is' , t)
v=s.count('a')+ s.count('A')+ s.count('e')+s.count('E')+ s.count('i' )+
s.count('I')+ s.count('o')+ s.count('O')+ s.count('u')+s.count('U')
print ('The number of vowels in the sentence is' , v)
Output:
Enter a sentence: amazing day in alaska
The number of vowels in the sentence is 8
The number of vowels in the sentence is 8
The number of vowels in the sentence is 8
searchstr2.py
p=input("Enter a string: ")
print ("Entered String is", p)
q=input("Enter the substring to search: ")
r=p.count(q)
if r==0:
print (q, "not found in", p)
else:
print (q, "occurs in", p, r, "times")
Output:
Enter a string: alabalabalab
Entered String is alabalabalab
Enter the substring to search: la
la occurs in alabalabalab 3 times
Este programa acepta una cadena y una subcadena desde el usuario y
utiliza el método count() para contar las apariciones de la
subcadena en la cadena dada. Aparece entonces el conteo.
¿Existe algún método de cadena para ver si una cadena comienza o
termina con un prefijo o sufijo dado? Sí, y son los siguientes:
startswith(s, [start], [end])—Devuelve true si la cadena comienza con el prefijo
especificado, de lo contrario devuelve false. El prefijo puede ser una única cadena
o una
secuencia de cadenas individuales.
endswith(suffix, [start], [end])—Devuelve true si la cadena termina con el sufijo
especificado; se devuelve false en caso contrario. La sufijo puede ser una única
cadena o
una secuencia del cadenas individuales.
Output:
Enter your first name and last name: Caroline Stevens
The name after interchanging first and last name: Stevens Caroline
En este programa, los nombres y apellidos introducidos por el
usuario se asigna a la variable n. El nombre de la variable n se
divide en tres partes sobre la presencia del espacio blanco, con el
metodo partition(): el nombre, el espacio en blanco, y apellido.
Para intercambiar el nombre y apellido, se muestra la tercera parte,
seguido de la primera parte de la cadena.
El programa siguiente muestra tres métodos: partition(), replace() y
split():
breaking.py
s='education '
k=s.partition('cat')
print('The word', s, 'is partitioned into three parts')
print('The first part is', k[0], 'separator is', k[1], 'and the third part
is',k[2])
t=input('Enter a sentence: ')
print('The original sentence is', t)
print('The sentence after replacing all the characters "a" by "#" is:',
t.replace('a','#'))
print('The sentence after replacing first three "a" characters by "#" is:',
t.replace('a', '#', 3))
u=t.split(' ')
print('The words in the entered sentence are', u)
print('The words in the entered sentence are')
for i in range(0, len(u)):
print(u[i])
u=t.split(' ',1)
print('The sentence is split into two parts:', u[0], 'and', u[1])
Output:
The word education is partitioned into three parts
The first part is edu separator is cat and the third part is ion
Enter a sentence: amazing day in alaska
The original sentence is amazing day in alaska
The sentence after replacing all the characters "a" by "#" is: #m#zing d#y in
#l#sk#
The sentence after replacing first three "a" characters by "#" is: #m#zing d#y in
alaska
The words in the entered sentence are ['amazing', 'day', 'in', 'alaska']
The words in the entered sentence are
amazing
day
in
alaska
The sentence is split into two parts: amazing and day in Alaska
Arrays
Matrices numéricas se utilizan para almacenar datos numéricos.
Puesto que no tienen caracteres NULL, arrays numéricos no son
terminados por caracteres NULL como con las cadenas, pero el
concepto de índice todavía se aplica a ellos para tener acceso a sus
elementos. Las matrices son de dos tipos, las matrices de una y de
dos dimensiones.
Los valores son los índices que se pueden utilizar para acceder a
los elementos de la matriz. Es decir, p [0] será acceder al primer
elemento de la matriz 8, p [1], accederá a la segundo elemento de la
matriz 3, y así sucesivamente.
El programa siguiente muestra la creación de una matriz numérica de
cinco elementos:
numericarr.py
p= [ 0 for i in range(5) ]
print ("Enter five numbers")
for i in range(5):
p[i]= int(input())
print ("Numbers entered in the array are", p)
print ("Numbers entered in the array are")
for n in p:
print (n)
Output:
Enter five numbers
8
3
1
6
2
Numbers entered in the array are [8, 3, 1, 6, 2]
Numbers entered in the array are
8
3
1
6
2
Two-Dimensional Arrays
Arrays de dos dimensiones se dividen en filas y columnas. . Los
índices de fila y columna comienzan a valor 0 Para acceder a cada
elemento de la matriz, debe especificar dos índices; uno representa
la fila, y el otro representa la columna. Ambos se encuentran
encerrados entre corchetes.
En la figura 3.3 se ve que todos los lugares de la matriz está
representado por una fila y ubicación de la columna. El índice p [0]
[0] hace referencia al elemento almacenado en fila 0 y la posición
de columna 0. Del mismo modo, el índice p [0] [1] se refiere al
elemento que se almacena en la fila 0 y la posición primera columna
de la matriz de dos dimensiones.
Output:
Enter values for a matrix of order 3 x 3
1
2
3
4
5
6
7
8
9 Elements of the matrix are [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Elements of the matrix are
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
The sum of elements in matrix is 45
Dictionary
Un diccionario es una combinación de pares key/value en el que cada
key tiene que ser único. Pares clave / valor están separados por dos
puntos, y los pares se separan por comas. Los pares clave / valor
están encerrados en una llaves.
Syntax:
d = {key1 : value1, key2 : value2 }
Sets – Conjuntos
Un conjunto es una colección de ciertos valores. Puede llevar a cabo
una serie de operaciones de conjunto, incluyendo la unión (|),
intersección (&), diferencia (-), y diferencia simétrica (^). Vamos
a comenzar con la operación de unión.
Union (|)
En una operación de unión, un elemento aparece en la union si existe
en un grupo u otro. Por ejemplo, considere los dos conjuntos S1 y S2
con los siguientes elementos:
S1=set([3,5,6,10,11,100])
S2=set([1,3,5,6,11,15])
Intersection (&)
En una operación de intersección, los elementos que aparecen en
ambos conjuntos aparecen en la intersección.
S1 & S2 se mostrarán la intersección como:
set([3, 5, 6, 11])
Difference (-)
En una operación de diferencia, todos los elementos que están en el
conjunto de la izquierda, pero no en el conjunto de la derecha van a
aparecer en la operación de diferencia.
S1-S2 mostrará la diferencia como:
set([10, 100])
El siguiente programa muestra el uso de métodos set como max (), min
(), any(), all(), sum(), y se sorted(). El programa también
demuestra la aplicación de unión, intersección, diferencia, y las
operaciones de fusion de los conjuntos .
setexample.py
S1=set([3,5,6,10,11,100])
S2=set([1,3,5,6,11,15])
print ('Length of set S1 is:', len(S1))
print ('Maximum value in set S1 is:' , max(S1))
print ('Minimum value in set S2 is:' , min(S2))
print ('Sum of items in set S1 is:', sum(S1))
print ('Applying any() to set S1 results into:', any(S1))
print ('Union of the two sets is:', S1 j S2)
print ('Intersection of the two sets is:', S1 & S2)
print ('Difference of S1-S2 is:' , S1 - S2)
print ('Difference of S2-S1 is:' , S2 - S1)
S1.add(0)
print ('The items in set S1 after adding an item are:' , sorted(S1))
print ('As set S1 now has a value 0, so all() will result into:',
all(S1))
S1.update(S2)
print ('The items in set S1 after merging set S2 are:' , sorted(S1))
Output:
Length of set S1 is: 6
Maximum value in set S1 is: 100
Minimum value in set S2 is: 1
Sum of items in set S1 is: 135
Applying any() to set S1 results into: true
Union of the two sets is: {1, 3, 100, 5, 6, 10, 11, 15}
Intersection of the two sets is: {11, 3, 5, 6}
Difference of S1-S2 is: {10, 100}
Difference of S2-S1 is: {1, 15}
The items in set S1 after adding an item are: [0, 3, 5, 6, 10, 11, 100]
As set S1 now has a value 0, so all() will result into: false
The items in set S1 after merging set S2 are: [0, 1, 3, 5, 6, 10, 11,
15, 100]
Functions
Una función es un grupo de sentencias que se pueden invocar
cualquier número de veces. Además de las funciones incorporadas,
puede definir sus propias funciones. La afirmación de que invoca una
función se conoce como una llamada de función.
Al llamar a una función, se pueden pasar argumentos a ella para
realizar el cálculo deseado. En Python, una función siempre devuelve
un valor que puede ser None o que representa la tarea realizada por
la función.
En Python, las funciones son tratados como objetos, y por lo que
puede pasar una función como argumento a otra función. Del mismo
modo, una función puede devolver otra función. Además, una función,
al igual que cualquier otro objeto, se puede enlazar a una variable,
un elemento de un contenedor o un atributo de un objeto.
Echemos un vistazo a las afirmaciones utilizadas en la definición de
una función.
The def Statement - La Declaración def
La instrucción def se usa para definir una función.
Syntax:
def function-name(parameters):
statement(s)
donde nombre-función es un identificador para reconocer la función.
parámetros es una lista opcional de identificadores que se enlazan a
los valores proporcionados como argumentos al llamar a la función.
Cuando se llama a una función, los datos que envíe a la función se
llama argumentos y las variables de la función que reciben los
argumentos se llaman parámetros. Por lo tanto, mientras que llamar a
una función, se debe pasar el mismo número de argumentos, ya que hay
parámetros que figuran en la definición de la función. Los
parámetros son variables locales de la función, y cada llamada a la
función se une estas variables locales a los valores
correspondientes se pasan como argumentos. El cuerpo de la función
puede contener cero o más apariciones de la sentencia return.
El programa siguiente muestra la suma de dos valores numéricos
utilizando un función.
func1.py
def sum(a, b):
return a + b
k=sum(10,20)
print ("Sum is", k)
Output:
Sum is 30
En este programa, una función sum() se llama, que pasa dos
argumentos 10 y 20. Los argumentos 10 y 20 serán asignados a los
parámetros a y b, se define en la función suma().
La función suma() calcula la suma de los valores asignados a los
parámetros a y b y devuelve el resultado al programa principal. El
resultado se asigna a la variable k en el programa principal, que se
muestra a continuación.
"one"
"two"
"three"
"four"
"one"
"two"
"three"
"four"
print (conv(2))
print (conv(0))
Output:
two
None
Se puede ver que cuando el valor 2 se pasa como un argumento a la
función conv(), el respectivo si se ejecuta la declaración para
mostrar el texto dos. Cuando 0 se pasa a la función conv(), el
primero si se ejecuta la declaración de la función.
No hace nada, ya que contiene la sentencia pass, por lo que se
devuelve None. Recuerde que la sentencia pass indica un bloque vacío
de enunciados. Se utiliza por lo general como un marcador de
posición para el código va a escribir más tarde.
keywordarg.py
def volume(l, b=5, h=10):
print ('l is', l, 'and b is', b, 'and h is', h, 'and volume
is', l*b*h)
volume(2, 4)
volume(3, h=6)
volume(h=7, l=2)
Output:
l is 2 and b is 4 and h is 10 and volume is 80
l is 3 and b is 5 and h is 6 and volume is 90
l is 2 and b is 5 and h is 7 and volume is 70
La función de volumen() tiene tres parámetros, uno que no tiene
ningún valor predeterminado y dos parámetros que hacen. En la
primera llamada a la función, el volumen (2,4), el parámetro l
obtiene el valor 2, el parámetro b se obtiene el valor 4, y h toma
su valor por defecto, 10. En la segunda llamada a la función, el
volumen (3, h = 6), el parámetro l obtiene el valor 3, debido a la
posición del argumento. Entonces, el parámetro h obtiene el valor 6
como un argumento de palabra clave. El parámetro b toma su valor por
defecto, 5. En la tercera llamada a la función, volumen (h = 7, l =
2), utiliza argumentos de palabra clave para especificar los valores
de los parámetros h y l. El parámetro h tendrá 7, l obtendrá 2, y b
obtendrá el valor por defecto 5.
El ámbito de las variables en una función depende de si se define a
nivel local o global.
Global Variables
Las variables globales no están vinculados a cualquier función
particular, y se puede acceder dentro del cuerpo de la función,
fuera del cuerpo de la función, o por cualquier otra función. Los
cambios realizados en una variable global por cualquier función
serán visibles por otras funciones. Si una función de las
necesidades de las variables globales, la primera declaración de la
función debe ser la siguiente:
global identifiers
donde los identificadores es uno o más identificadores separados por
comas. Identificadores enumerados en una declaración global se
conocen como variables globales.
Se utiliza la palabra clave global para definir una variable global;
de otro modo, una excepción Error UnboundLocal se eleva debido a que
la variable es una variable sin inicializar (sin consolidar) local.
El siguiente programa se explica el concepto de variables globales.
Lo más importante a observar en este programa es cómo los cambios
realizados en la variable global por una de las funciones se pueden
ver en otra función.
globalvar.py
def compute():
global x
print ("Value of x in compute function is", x)
x += 5
return None
def dispvalue():
global x
print ("Value of x in dispvalue function is", x)
x-=2
return None
x=0
compute()
dispvalue()
compute()
Output:
Value of x in compute function is 0
Value of x in dispvalue function is 5
Value of x in compute function is 3
Local Variables
De forma predeterminada, cualquier variable que se une dentro de un
cuerpo de la función es una variable local. Cada función tiene su
propia copia de una variable local, y su valor no es accesible o
modificable fuera del cuerpo de la función.
El siguiente programa muestra el uso de variables locales:
localvar.py
def compute(x):
x += 5
print ("Value of x in function is", x)
return None
x=10
compute(x)
print ("Value of x is still", x)
Output:
Value of x in function is 15
Value of x is still 10
El programa principal inicializa el valor de la variable local x en
10. La variable x se pasa a la función de computo() como un
argumento. En la función de computo(), el valor del parámetro x se
incrementa en 5, haciendo su valor 15. Pero ellos x es local para la
función, el valor modificado de x (15) sólo es visible dentro del
cuerpo de la función compute(). Cuando se muestra el valor de x en
la función cómpute(), se imprimirá el valor modificado 15, pero
cuando regresa al programa principal, el programa recoge el valor
anterior de x (10). Por lo tanto, el programa principal se imprime
el valor antiguo de x, 10.
A veces es necesario crear funciones muy pequeñas, que consiste en
una única línea. ¿Se puede manejar este tipo de pequeñas funciones
en Python? Sí. Vamos a ver cómo.
Lambda Functions
Para las funciones que son lo suficientemente pequeñas (una
expresión de una sola línea) y que van a ser usados sólo una vez,
por lo general no define los objetos de función. En cambio, el uso
de funciones lambda.
Una función lambda es una función anónima y de sólo un solo uso que
puede tener cualquier número de parámetros y que hace algún cálculo.
El cuerpo de la función lambda es pequeño, una sola expresión. El
resultado de la expresión es el valor cuando se aplica la lambda
para un argumento. No hay necesidad de una instrucción de retorno en
las funciones lambda.
nota
El ámbito de aplicación de una función lambda es limitada. Sólo
existe en el ámbito de la ejecución de una sola sentencia.
Considere una pequeña función que multiplica un argumento pasado por
2 y devuelve, como se muestra aquí:
def f(x):
return x*2
f(3)
6
Se puede ver que una función f toma un parámetro x que vuelva al
multiplicar por 2. Al llamar a la función con el argumento 3,
volverá 6 como salida. Puede volver a escribir esta función como una
función lambda:
g = lambda x: x*2
g(3)
6
Se puede ver que la función lambda no tiene nombre y se llama a
través de la variable que está asignado.
Usted puede utilizar una función lambda incluso sin asignarla a una
variable. La siguiente es una función lambda sin nombre que acepta
un solo argumento. Se multiplica el argumento por 2 y devuelve el
resultado:
(lambda x: x*2)(3)
6
Se puede ver que no hay paréntesis alrededor de la lista de
argumentos, y la palabra clave return no se encuentra. El regreso
está implícita en la función lambda como toda la función se compone
de una sola expresión.
nota
Una función lambda no puede contener comandos y no puede
contener más de una expresión.
Description
functionname.__doc__
functionname.__name__
functionname.__module__
functionname.__defaults__
functionname.__code__
functionname.__dict__
nota
Puede configurar y obtener sus propios atributos de función,
también.
El siguiente programa muestra el uso de la función de los atributos
para mostrar información específica de la función, como su versión,
autor, docstring y argumentos por defecto.
funcattrib.py
def sum(a, b=5):
"Adds the two numbers"
return a + b
sum.version= "1.0"
sum.author= "bintu"
k=sum(10,20)
print ('Sum is', k)
print('The documentation string is', sum.__doc__)
print('The function name is', sum.__name__)
print('The default values of the function are', sum.__defaults__)
print('The code object of the function is', sum.__code__)
print('The dictionary of the function is', sum.__dict__)
Output:
Sum is 30
The documentation string is Adds the two numbers
The function name is sum
The default values of the function are (5,)
The code object of the function is <code object sum at 0x00F11250, file
"D:\python\
funcattrib.py", line 1>
The dictionary of the function is {'version': '1.0', 'author': 'bintu'}
En este programa, la información de la versión y el autor de la
función suma() se encuentra en la forma de un diccionario, en el
patrón de clave/valor. A partir de entonces, la función suma() se
llama con dos argumentos, 10 y 20, que se asignan a los parámetros a
y b, respectivamente. La primera línea en el cuerpo de la función es
la cadena de documentación. Es decir, la cadena de documentación o
atributo __ doc__ de la función, sum(), se establece en el texto
Añade los dos números.
A partir de entonces, la cadena de documentación y sus argumentos
por defecto se visualizan mediante la impresión de los atributos
__doc__, __name__ y __defaults__. Por último, el objeto de código y
el diccionario de la función se visualizan a través de los atributos
__code__ y __dict__.
Documentation String
La cadena de documentación (docstring) ayuda a documentar el
programa mejor y hace que sea más fácil de entender. Una cadena en
la primera línea lógica de una función es la cadena de documentación
para esa función. Para mostrar una cadena de documentación, se
utiliza el atributo siguiente:
__doc__
Recursion - La recursividad
La recursividad se dice que ocurre cuando una función se llama a sí
mismo. Como era de esperar, una función que se autodenomina generará
llamadas a funciones recursivas y resultar en un bucle infinito.
Cuando la aplicación de la recursión, una condición de salida debe
ser incluido en la función.
nota
La recursión se implementa con la ayuda de una estructura
conocida como una pila.
Vamos a examinar el concepto de recursividad a través de un ejemplo.
El siguiente programa calcula la suma de 10 números utilizando
recursividad:
recurfunc.py
def addseq(x):
if x == 1: return 1
else: return x + addseq(x-1)
print ('The sum of first 10 sequence numbers is', addseq(10))
Output:
The sum of first 10 sequence numbers is 55
5 * fact(4)
La llamada a la funcion fact(4) pasará 4 al parámetro x, y de nuevo
se ejecutará la sentencia else y regresar la siguiente declaración:
4* fact(3)
Una vez más la llamada a la funcion fact(3) pasará 3 al parámetro x,
lo que resulta en la ejecución de la sentencia else otra vez. El
proceso continúa hasta que el valor asignado al parámetro x es 1, en
cuyo caso se cierra la función, devolviendo 1. La expresión completa
que resulta en la ejecución de la programa es la siguiente:
5*4*3*2*fact(1) or
5*4*3*2*1
El programa imprime el resultado como 120, que es el factorial de 5.
iter(object)
El método iter() se utiliza para obtener un objeto iterador. El
método iter (objeto) se pide que el metodo de objeto __ iter__
conseguir un objeto iterador. Una vez, se obtiene un objeto
iterador, se puede recorrer en iteración el objeto utilizando su
método next().
El siguiente programa muestra todos los elementos de una lista con
el objeto iterador:
createiter.py
names=['John', 'Kelly', 'Caroline', 'Paula']
i = iter(names)
print (i.__next__())
print (i.__next__())
print (i.__next__())
print (i.__next__())
print (i.__next__())
Output:
John
Kelly
Caroline
Paula
Traceback (most recent call last):
File "D:\python\createiter.py", line 7, in <module>
print (i.__next__())
StopIteration
yield
La declaración de yield se utiliza sólo cuando se define una funcion
de generador funciones y sólo se utiliza en el cuerpo de la función
de generador. La presencia de una declaración de yield en una
definición de la función normal de la convierte en una función de
generador. Cuando un generador de funciones se llama, devuelve un
iterador conocido como un iterador generador, o simplemente un
generador. El cuerpo de la función del generador es ejecutada por
una llamada al método del generador __ next__ () varias veces hasta
que se produzca una excepción.
generatorex.py
def fruits(seq):
for fruit in seq:
yield '%s' % fruit
f=fruits(['Apple', 'Orange', 'Mango', 'Banana' ])
print ('The list of fruits is:' )
print (f.__next__())
print (f.__next__())
print (f.__next__())
print (f.__next__())
f=fruits(['Apple', 'Orange', 'Mango', 'Banana' ])
print ('The list of fruits is:' )
for x in f:
print (x)
Output:
The list of fruits is:
Apple
Orange
Mango
Banana
The list of fruits is:
Apple
Orange
Mango
Banana
En este programa, la función de las frutas() se ha convertido en un
generador de funciones, ya que contiene una palabra clave de yield.
El generador de esta funcion frutas() devuelve esta asignacion a una
variable, f. En una llamada al método __ next__() de la f generador,
la primera cadena de la lista, Apple, se rindió. Cuando se llama al
método __ next__() por primera vez en el generador, la ejecución del
generador de la función de frutas comienza y continúa hasta que se
encuentra la palabra clave de yield.
En cada llamada sucesiva del método __ next__ (), la ejecución de la
función de generador continuará en la instrucción que sigue a la
palabra clave de rendimiento, lo que resulta en que produce la
siguiente cadena en secuencia. Desde la declaración de rendimiento
se produce dentro de un bucle, la ejecución continuará dentro del
bucle. El programa también muestra todos los cadenas a través del
objeto generador.
Si se llama a __ next__() después de eso, usted consigue una
excepción:
Traceback (most recent call last):
File "D:\python\generatorex.py", line 12, in <module>
print (f.__next__())
StopIteration
Al lado de los generadores, hay una forma más para crear iteradores,
y que es a través de la expresión del generador.
Modules
Un módulo es un archivo que consta de un par de funciones y
variables que se utilizan para una tarea particular. Un módulo puede
ser reutilizado en cualquier otro programa que lo importa. Las
funciones y variables del módulo que se disponga en el programa
actual y se pueden utilizar en el mismo. El nombre de archivo del
módulo debe tener una extensión .py.
Para importar un módulo a un programa, se utiliza la sentencia
import. Puede utilizar la importación en varias formas. Considere la
posibilidad de un módulo de calendario que muestra un calendario de
un mes y el año especificado. Vamos a echar un vistazo a las
diferentes formas de importar un módulo de calendario en el programa
actual. La primera forma es a través de esta declaración:
import calendar
Chapter 5. Classes
En este capítulo se tratan los siguientes temas:
• Definición de las clases
• El uso de atributos de clase
• Definición de funciones en una clase
• Acceso a variables de clase en los métodos de instancia
• Creación de instancias e inicializar variables de instancia a
través del método __init__ ()
• Uso de clases y métodos estáticos
• Entender Recolección de basura
• Comprender-herencia simple, multinivel, y la herencia múltiple
• El uso de los especificadores de control de acceso
• Método primordial
• La sobrecarga de operadores
• polimorfismo
• Utilización de las propiedades y los descriptores
Description
__name__
El identificador de nombre de la
clase utilizada en la declaración de
clase.
__bases__
__dict__
__doc__
La cadena de documentación de la
clase.
__module__
en un
objeto
El
en un
b=5
def area(self):
print rect.l*rect.b
Instances
Una clase es una plantilla o modelo de datos y operaciones; utilizar
los datos y operaciones de forma independiente, lo que necesita para
crear instancias. Una instancia es una variable que actúa como una
réplica de una clase. Puedes crear tantas instancias de una clase si
lo deseas.
Cada instancia recibe una copia por separado de los métodos y los
atributos definidos en la clase. Cada instancia puede tener acceso a
los métodos y atributos de la clase de forma independiente, y un
atributo de una instancia no interferir con un atributo de la otra
instancia. También significa que a través de los casos, puede
utilizar una clase para realizar operaciones con varios conjuntos de
datos diferentes. Para crear una instancia de una clase, se llama a
la clase de objeto como si fuera sin parámetros, como se muestra
aquí:
r=rect()
Usted puede ver que el objeto de clase rect se llama como si se
trata de una función. Cada llamada devuelve una nueva instancia de
esa clase. La declaración anterior devuelve una nueva instancia de
la clase, rect, y lo asigna a la variable r.
El siguiente programa calcula el área de un rectángulo mediante la
creación de una instancia de la clase y la invocación de un método a
través de la instancia:
rectclass3.py
class rect:
l=8
b=5
def rectarea(self):
return rect.l * rect.b
r=rect()
print ("Area of rectangle is ", r.rectarea())
Output:
Area of rectangle is 40
Se puede ver que el método __ init__ define los valores por defecto
para los parámetros x e y como 8 y 5. Las dos instancias de rect se
crean como r y s. La instancia r no tiene argumentos para el método
__ init__ y por lo tanto, los valores por defecto 8 y 5 en los
parámetros x e y se utilizará para inicializar sus variables de
instancia l y b.
La instancia s suministra los argumentos 10 y 20 cuando se
inicializa y se asignará a los parámetros x e y desde donde se van a
asignar a sus variables de instancia l y b. El método rectArea()
cuando se invoca por los dos casos calculará y devolver el área de
un rectángulo sobre la base de los valores asignados a sus variables
de instancia, l y b.
Por ahora, usted sabe cómo crear una instancia y cómo inicializar
sus variables a través de __ init__. Ahora vamos a ver el
procedimiento para imprimir la instancia. Recuerde, usted no está
imprimiendo las variables de instancia, pero la propia instancia.
Cuando la impresión de una instancia, se convierte en una cadena.
Syntax:
@classmethod
def f(cls, parm1, parm2, . . .):
body of the method
Este muestra un método de clase, f, con pocos parámetros parm1,
parm2, y así sucesivamente.
El programa siguiente crea una clase, así como un método de
instancia y accede a ellos para mostrar el contenido de las
variables de instancia y de clase.
classmethod.py
class book:
price=100
@classmethod
def display(cls):
print (cls.price)
def show(self,x):
self.price=x
print (self.price)
b=book()
c=book()
book.display()
b.display()
b.show(200)
c.show(300)
Output:
100
100
200
300
destructor.py
class rect:
n=0
def __init__(self,x,y):
rect.n +=1
self.l=x
self.b=y
def __del__(self):
rect.n -=1
class_name = self.__class__.__name__
print(class_name,' destroyed')
def rectarea(self):
print ('Area of rectangle is ', self.l * self.b)
def noOfObjects(self):
print ('Number of objects are: ', rect.n)
r=rect(3,5)
r.rectarea()
s=rect(5,8)
s.rectarea()
r.noOfObjects()
del r
s.noOfObjects()
del s
Output:
Area of rectangle
Area of rectangle
Number of objects
rect destroyed
Number of objects
rect destroyed
is 15
is 40
are: 2
are: 1
Inheritance – herencia
La herencia es una técnica de copiar los miembros de datos y las
funciones miembro de una clase existente en otra clase. Es decir, en
lugar de comenzar desde cero, una clase existente se puede heredar,
y los miembros adicionales de datos y funciones de miembro puede ser
definido. La clase que se hereda se llama clase base o la super
clase, y la clase heredada se denomina clase derivada o subclase. La
subclase hereda todas las propiedades de la clase base y por lo
tanto da lugar a ahorrar tiempo y esfuerzo.
Clase B hereda la
clase A o clase B se
deriva de la clase A. Una clase derivada tiene que identificar la
clase de la que se deriva. Supongamos, por ejemplo, desea obtener la
clase de triángulo de la clase Rect. La definición de la clase de
triángulo aparecerá así:
class triangle(rect):
Esta declaración indica que rect es una clase base, y el triángulo
es una clase derivada.
Considere el siguiente programa de la herencia simple. En este
programa, una clase de triángulo hereda la clase base, rect, como
resultado de la cual la instancia de la clase triángulo puede
acceder a las funciones miembro públicas de la clase Rect (al lado
de sus propias funciones miembro).
inherit1.py
from __future__ import division
class rect:
def __init__(self):
self.l = 8
self.b = 5
def rectarea(self):
return self.l * self.b
class triangle(rect):
def __init__(self):
rect.__init__(self)
self.x = 17
self.y = 13
def trigarea(self):
return 1/2*self.x * self.y
r=triangle()
print ("Area of rectangle is ", r.rectarea())
print ("Area of triangle is ", r.trigarea())
Output:
Area of rectangle is 40
Area of triangle is 110.5
nota
Si tiene __ init__ en ambas clases, el método de la clase base
__ init__ debe hacerse desde el método __ init__ de la clase
derivada.
Este programa define una clase Rect que consiste en un __ init__ y
un método rectArea(). Una clase más, triángulo, se define en el
programa que se deriva de Rect. La clase triángulo formado por
metodos __ init__ y trigarea().
Se crea una instancia r de triángulo. Puesto que la clase triángulo
deriva de rect, la instancia de r puede invocar los métodos de la
clase base rect, así como la de su propia clase. Después de la
creación de la instancia de r, el método __ init__ de triángulo se
ejecuta, lo que a su vez invoca el método __ init__ de su clase
base, rect. Recordemos que el método __ init__ debe llamar
explícitamente al método del ancestro __ init__ si está allí. El
método __ init__ de la clase Rect inicializa los valores de las
variables de instancia l y b a 8 y 5.
Después de la ejecución del método __ init__ de la clase Rect, el
método __ init__ de la clase triángulo se ejecutará, que inicializa
los valores de las variables de instancia x e y a 17 y 13. Ser capaz
de llamar a los métodos de ambos las clases, la instancia r invoca
los metodos rectArea() y trigarea() para calcular y mostrar el área
del rectángulo y el triángulo.
class worker:
...
...
class officer(worker):
...
...
class manager(officer):
...
...
La clase de administrador hereda de la clase de oficiales, que es
una clase derivada de la clase trabajadora. En este escenario,
worker es la clase base, officer es una clase base intermedia, y el
manager es una clase derivada.
Administrador hereda las propiedades de officer directamente y las
propiedades de la clase worker indirectamente a través de la clase
de officer. La clase de administrador puede tener acceso a los
miembros públicos de la clase de officer, que a su vez pueden tener
acceso a los miembros públicos de la clase worker.
Vamos a examinar el concepto a través de un programa.
multilevel.py
from __future__ import division
class worker:
def __init__(self, c, n, s):
self.code = c
self.name= n
self.salary = s
def showworker(self):
print ("Code is ", self.code)
print ("Name is ", self.name)
print ("Salary is ", self.salary)
class officer(worker):
def __init__(self, c,n,s):
worker.__init__(self,c,n,s)
self.hra = s*60/100
def showofficer(self):
worker.showworker(self)
print ("HRA - House Rent Allowance is ", self.hra)
class manager(officer):
def __init__(self, c,n,s):
officer.__init__(self,c,n,s)
self.da = s*98/100
def showmanager(self):
officer.showofficer(self)
print ("DA - Dearness Allowance is ", self.da)
w=worker(101, 'John' , 2000)
o=officer(102, 'David', 4000)
m=manager(103, 'Ben' , 5000)
print ("Information of worker is ")
w.showworker()
print ("\nInformation of officer is ")
o.showofficer()
print ("\nInformation of manager is ")
m.showmanager()
Output:
Information of worker is
Code is 101
Name is John
Salary is 2000
Information of officer is
Code is 102
Name is David
Salary is 4000
HRA - House Rent Allowance is 2400.0
Information of manager is
Code is 103
Name is Ben
Salary is 5000
HRA - House Rent Allowance is 3000.0
DA - Dearness Allowance is 4900.0
Multiple Inheritance
herencia múltiple
Si una clase se deriva de más de una clase base, usted lo llama
herencia múltiple, como se muestra en la Figura 5.3. Por lo general,
cuando se necesita para utilizar los miembros de dos o más clases
(sin relación) a través de otra clase, que combina las
características de todas las clases heredando ellos.
Ya ves que, sin conexión entre ellos, las dos clases de bases,
trabajador y oficial, se heredan de la clase manager. Ahora
administrador puede tener acceso a los miembros públicos de los
trabajadores, así como de oficiales.
nota
Todas las clases de base que han de ser heredado tienen que ser
separados por comas.
El siguiente programa explica la herencia múltiple. Dos clases, los
estudiantes y la ciencia, son heredadas por tercera clase,
resultados.
multiple.py
from __future__ import division
class student:
def __init__(self, r, n):
self.roll = r
self.name= n
def showstudent(self):
print ("Roll : ", self.roll)
print ("Name is ", self.name)
class science:
def __init__(self, p,c):
self.physics = p
self.chemistry=c
def showscience(self):
print ("Physics marks : ", self.physics)
print ("Chemistry marks : ", self.chemistry)
class results(student,science):
def __init__(self, r,n,p,c):
student.__init__(self,r,n)
science.__init__(self,p,c)
self.total = self.physics+self.chemistry
self.percentage=self.total/200*100
def showresults(self):
student.showstudent(self)
science.showscience(self)
print ("Total marks : ", self.total)
print ("Percentage marks : ", self.percentage)
s=results(101, 'David', 65, 75)
print ("Result of student is ")
s.showresults()
Output:
Result of student is
Roll : 101
Name is David
Physics marks : 65
Chemistry marks : 75
Total marks : 140
Percentage marks : 70.0
Two Base Classes Having a Method with the Same Name and
Signature
Dos clases de base que tiene un método con el mismo nombre
y firma
¿Qué sucederá si las dos clases que se derivan de una tercera clase
contiene un método con la misma firma? Supongamos que hay dos
clases, A y B, que tienen un método con el mismo nombre y la firma,
area(), y una tercera clase C hereda de ambos A y B. La instancia de
C tendrá dos copias del método área(). ¿Qué métodode area() va a
ejecutar, el de A o el de B?
La respuesta es que se ejecutará el método de la clase A. El
siguiente programa confirma que será visitada el método de la
primera clase, si dos clases tienen un procedimiento de la misma
firma en la herencia múltiple:
basefunc.py
from __future__ import division
class rect:
def __init__(self):
self.l = 8
self.b = 5
def area(self):
return self.l * self.b
class triangle:
def __init__(self):
self.x = 17
self.y = 13
def area(self):
return 1/2*self.x * self.y
class both(rect, triangle):
pass
r=both()
print ("Area of rectangle is ", r.area())
Output:
Area of rectangle is 40
Operator Overloading
sobrecarga de operadores
Para sobrecargar un operador estándar significa que usted solicita
operadores aritméticos para una instancia de clase para realizar las
operaciones deseadas. Puede sumar, restar, multiplicar y dividir los
casos utilizando los operadores estándar de la misma forma en que se
utilizan con los números. Por ejemplo, el método __ add__ se utiliza
para agregar instancias al igual que hace el operador de suma (+).
Cuando se utiliza un operador como +, Python llama al método
especial __ add__ en el fondo. Todo lo que necesitas hacer es
implementar __ add__ para agregar dos instancias.
El siguiente programa, añade las instancias r1 y r2 de la clase rect
mediante el operador +:
operatorovr1.py
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def __str__(self):
return 'Length is %d, Breadth is %d' %(self.l, self.b)
def __add__(self, other):
return rect(self.l+ other.l, self.b+other.b)
def rectarea(self):
return self.l * self.b
r1=rect(5,8)
r2=rect(10,20)
r3=r1+r2
print (r3)
print ("Area of rectangle is ", r3.rectarea())
Output:
Length is 15, Breadth is 28
Area of rectangle is 420
Polymorphism
polimorfismo
Poli significa muchos, y metamorfosis significa cambio. A través de
polimorfismo, se puede tener un método con el mismo nombre en
diferentes clases para realizar diferentes tareas. Usted puede
manejar objetos de diferentes tipos de la misma manera.
Para implementar el polimorfismo, se define un número de clases o
subclases que tienen el método (s) con el mismo nombre. Estas clases
o subclases son polimórficos. Puede acceder a los métodos
polimórficos sin saber que clase o subclase es incovado.
Por ejemplo, el porcentaje de comisión por la venta de un libro
puede ser diferente para un almacenero, un distribuidor y un
minorista. Se puede definir un método de comisión() en tres clasesalmacenistas,
distribuidores y minoristas, donde cada método calcula
un porcentaje diferente de comisión.
En la ejecución del programa, el método respectiva comisión() se
llama en cada instancia. Este es un programa completo que muestra
polimorfismo.
polymorphism.py
class book:
def __init__(self,x):
self.price = x
class stockist(book):
def __init__(self,x):
book.__init__(self,x)
def commission(self):
self.comm=self.price*5/100
print ("Commission of Stockist is %.2f" %self.comm)
class distributor(book):
def __init__(self,x):
book.__init__(self,x)
def commission(self):
self.comm=self.price*8/100
print ("Commission of Distributor is %.2f" %self.comm)
class retailer(book):
def __init__(self,x):
book.__init__(self,x)
def commission(self):
self.comm=self.price*10/100
print ("Commission of Retailer is %.2f" %self.comm)
r = stockist(100)
s = distributor(100)
t = retailer(100)
prncomm = [r,s,t]
for c in prncomm:
c.commission()
Output:
Commission of Stockist is 5.00
Commission of Distributor is 8.00
Commission of Retailer is 10.0
Properties - Propiedades
Las propiedades se utilizan para administrar los atributos con
métodos get / set. En versiones anteriores de Python, la gestión de
los atributos se hace reemplazando con metodos __ getattr__ y __
setattr__.
Para evitar la sobrecarga de anular estos dos métodos, se utilizan
las propiedades. Se utiliza propiedades para redirigir conjunto de
un atributo, obtener, o incluso borrar la operación a una función.
propertyex.py
class product(object):
def __init__(self, name):
self._name = name
def set_name(self, name):
print ('Setting product name: %s' % name)
self._name = name
def get_name(self):
return self._name
def del_name(self):
del self._name
name = property(get_name, set_name)
p = product('Camera')
print('Getting product name ', p.name)
p.name='Cell'
print('Getting product name ', p.name)
Output:
Getting product name Camera
Setting product name: Cell
Getting product name Cell
Descriptors – Descriptor
Los descriptores son las clases que nos permiten gestionar instancia
atribuye de manera eficiente. Para administrar los atributos de
instancia, se utilizan tres métodos: __ set__, __ get__ y __
delete__. Los descriptores son de dos tipos:
-Los datos no descriptor.-La clase que implementa sólo el
método __ get__ para un objeto se conoce como un descriptor no
datos.
-Descriptor de datos.- La clase que implementa los metodos __
delete__ y __ set__ así como el método __ get__ para un objeto
que se conoce como un descriptor de datos.
Al acceder a un atributo de instancia, Python obtiene el valor del
atributo llamando __ get__ en el descriptor correspondiente. Del
mismo modo, cuando se asigna un valor a una instancia de atributo
con un descriptor correspondiente, el valor de ese atributo se
establece llamando __ set__ en el descriptor.
La sintaxis de los descriptores de codificación es la siguiente:
class Descriptor:
def __get__(self, instance, owner):
...
def __set__(self, instance, value):
...
def __delete__(self, instance):
...
El programa siguiente muestra cómo utilizar los metodos __ set __ y
__ get__ en establecer y obtener instancia atributos:
descript.py
class product:
def __init__(self, name, x=5):
self.name = name
self.price=x
def __set__(self, obj, value):
print ('Setting attribute' , self.name)
self.price = value
def __get__(self, obj, objtype):
print ('Getting attribute',self.name)
return self.price
class cart:
p = product('butter',7)
k=cart()
print(k.p)
k.p=10
print(k.p)
Output:
Getting attribute butter
7 Setting attribute butter
Getting attribute butter
10
getsetattr.py
class product:
price=25
def __init__(self, name):
self.name=name
def __setattr__(self,name,value):
self.__dict__[name]=value
def __getattr__(self,name):
return self.name
p=product('Camera')
print (p.price)
print (p.name)
p.price=15
p.name="Cell"
print (p.name)
print(p.price)
Output:
25
Camera
Cell
15
Una clase de producto se define mediante tres métodos: __ init__, __
setattr__ , __getattr__. La clase contiene un atributo de clase,
precio, inicializado a 25. Se crea una instancia p de producto que
inicializa su variable de instancia nombre a la cámara.
A continuación se accede a precio y name de los atributos de
instancia, lo que resulta en la invocación __ getattr__. El método
__ getattr__ devuelve el valor de la variable de instancia nombre.
Además, el programa asigna los valores 15 y Cell al precio y nombre,
lo que resulta en __ setattr__ está invocando. En el método __
setattr__, los valores se asignan a las variables de instancia
utilizando el diccionario para evitar las llamadas recursivas.
Summary -
resumen
La apertura de un archivo
Realización de acciones en el archivo (lectura, escritura,
actualización de los contenidos)
Cierre el archivo
For example:
f = open('xyz.txt', 'w')
proposito
close()
read([n])
readline([n])
readlines([n])
flush()
write(string)
Escribe la cadena dada en el
fichero.
writelines(list)
seek(offset,location)
Para entender
programas. El
aboutbook.txt
escrito en el
pantalla.
createfile1.py
matter = '''Python is a great language
Easy to understand and learn
Supports object Oriented Programming
Also used in web development '''
f = open('aboutbook.txt', 'w')
f.write(matter)
f.close()
f = open('aboutbook.txt')
while True:
line = f.readline()
if len(line) == 0:
break
print (line,)
f.close()
Output:
Python is a great language
Easy to understand and learn
Supports Object Oriented Programming
Also used in web development
Method/Attribute
fileno()
isatty()
closed
mode
name
un archivo
Serialization(Pickling) - Serialización(decapado)
Serialización (también conocido como pickling - decapado) es un
proceso de conversión de datos estructurados en formato de flujo de
datos. A través de la serialización, estructuras como listas,
tuplas, funciones y clases se conservan utilizando caracteres ASCII
entre valores de datos. El formato de datos en serie está
estandarizada, por lo que las estructuras serializados con la
serialización se pueden deserializar con cPickle y viceversa.
La serialización se hace cuando el almacenamiento de datos, y
deserialización se hace cuando la recuperación de datos. Para
decapado- pickling, puede utilizar cualquiera de los módulos, Pickle
o cPickle. Ambos módulos funcionan de la misma, excepto que el
módulo cPickle está escrito en el lenguaje C y es más rápido y da
como resultado un mejor rendimiento. El siguiente programa utiliza
el módulo Pickle para almacenar una instancia en un archivo:
pickleprog.py
import pickle
class rect:
def __init__(self, x,y):
self.l = x
self.b = y
def rectarea(self):
return "Area of rectangle is", self.l * self.b
r=rect(5,8)
f = open('studentinfo.bin', 'wb')
pickle.dump(r, f)
f.close()
del r
f = open('studentinfo.bin','rb')
storedobj = pickle.load(f)
print (storedobj.rectarea())
Output:
('Area of rectangle is',40)
Exception Handling
Manejo de excepciones
Las excepciones se producen cuando ciertas situaciones surgen en un
programa. Por ejemplo, la división de un valor de 0, el acceso a un
elemento de la lista fuera de su rango de índice, o la lectura de un
archivo que no existe, son situaciones que provocan excepciones.
Cuando se produce una excepción, Python normalmente muestra un
mensaje técnico que es un poco difícil de entender. Para hacerlo más
fácil para un usuario para entender lo que salió mal y ofrecer una
oportunidad de corregir el error, puede capturar las excepciones
específicas y mostrar mensajes de uso fácil. Los errores de sintaxis
son diferentes de las excepciones en que los errores de sintaxis se
producen cuando cualquier declaración no coincide con la gramática
de la intérprete de Python. Falta de ortografía en una declaración o
un paréntesis o comilla faltante son todos los errores de sintaxis.
Para controlar las excepciones, se escribe el código en un bloque
que comienza con la palabra try. Hay dos tipos de bloques try:
try/except: El código que podría generar un error se escribe en
el bloque try, y todos los errores y las excepciones se manejan
a través de la cláusula de excepción. La cláusula except puede
manejar un solo error o excepción especificada. Si no se
especifica ningún nombre de error o excepción, salvo se
encargará de todos los errores y excepciones que aparecen en el
código escrito en el bloque try. Tiene que haber al menos una
cláusula except asociado con cada bloque try. Si no se maneja
cualquier error o excepción, entonces el manejador de Python
por defecto se invoca, lo que detiene la ejecución del programa
y muestra el mensaje de error.
try/finally: El código escrito en el bloque finally siempre se
ejecuta si se produce una excepción o no. Es decir, el código
que se desea ejecutar en todas las situaciones se escribe en un
bloque finally. Por lo general, las declaraciones de cierre los
archivos abiertos, liberando la memoria, y como se escriben en
un bloque finally.
Exception
Description
AssertionError
AttributeError
EOFError
FloatingPointError
IOError
IndexError
KeyError
OSError
TypeError
ValueError
Raising an Exception
Lanzar una excepción
Las excepciones son lanzados de forma automática cuando alguna
situación no deseada se produce durante la ejecución del programa.
Puede provocar una excepción explícita a través de la sentencia
raise en un bloque try/except.
Syntax:
raise customException, statement for customException
Al plantear una excepción en un bloque try, el formato será el
siguiente:
try:
if condition:
raise customException, statement for customException
except customException, e:
statements for customException
El programa siguiente muestra cómo crear y elevar una excepción:
raiseexcepclass.py
class myException(Exception):
def __init__(self, quantity):
Exception.__init__(self)
self.quantity = quantity
try:
s = int(input('Enter quantity '))
if s <=0 :
raise myException(s)
except EOFError:
print ('You pressed EOF ')
except myException as ex:
print ('myException: The quantity entered is %d, it must be
some positive value' % ex.quantity)
else:
print ('No exception raised.')
Output:
Enter quantity -3
myException: The quantity entered is -3, it must be some positive value
Enter quantity 5
No exception raised.
El programa crea una clase MyException que hereda de la clase
Exception. La clase contiene __ init__, que inicializa la variable
de instancia la cantidad de la clase y que llama al método __ init__
de la superclase, Excepción. Se le pide al usuario que introduzca la
cantidad de un artículo que se asigna a la variable s. Si el valor
introducido es inferior a cero, el excepción personalizada
MyException se eleva, la invocación de la clase y pasar el valor de
la cantidad a la misma. Si el usuario presiona Ctrl + D en lugar de
proporcionar un valor para la cantidad, se produce una excepción
EOFError, mostrando Ha pulsado EOF. Cuando se eleva MyException,
MyException: La cantidad introducida es _, debe ser que aparezca
algún valor positivo. Si la excepción no es lanzada , se ejecuta la
sentencia en el bloque de los demás, mostrando ninguna excepción
lanzada.
The program creates a myException class that inherits from the Exception class. The
class
contains __init__, which initializes the quantity instance variable of the class
and that
calls the __init__ method of the super class, Exception. The user is asked to enter
the
quantity of an item that is assigned to variable s. If the value entered is less
than zero, the
custom exception myException is raised, invoking the class and passing the value of
quantity to it. If the user presses Ctrl+D instead of providing a value for
quantity, an
EOFError exception is raised, displaying You pressed EOF. When myException is
raised,
myException: The quantity entered is _, it must be some positive value is
displayed. If no exception is raised, the statement in the else block will be
executed,
displaying No exception raised.
Summary
En este capítulo usted aprendió a realizar diferentes operaciones en
los archivos. Usted aprendió a abrir un archivo en diferentes modos
y para leer su contenido, actualizar el contenido existente, borrar
el contenido, y añadir nuevo contenido. También vio cómo copiar un
archivo, leer un archivo secuencialmente o al azar, y sólo lectura
de contenido específico. También ha aprendido a crear un archivo
binario y de pickle y objetos unpickle. Por último, ha aprendido
para implementar el control de excepciones y el procedimiento de
elevar excepciones.
En el próximo capítulo usted aprenderá a desarrollar aplicaciones
GUI en Python a través de PyQt. Usted aprenderá a instalar y
utilizar PyQt Qt Designer para desarrollar Aplicaciones GUI.
Chapter 7. PyQt
En el capítulo anterior usted aprendió sobre el manejo de archivos.
Usted aprendió a abrir un archivo en diferentes modos, leer su
contenido, actualizar el contenido existente, borrar el contenido,
añadir nuevos contenidos, y hacer una copia. Usted aprendió a leer
los archivos de forma secuencial, así como al azar. Además de esto,
también aprendió a crear archivos binarios, pickle y objetos
unpickle, y poner en práctica el manejo de excepciones.
Las aplicaciones que se han creado hasta ahora son las aplicaciones
basadas en la consola. De ahora en adelante será aprender a
desarrollar la interfaz gráfica de usuario (GUI) aplicaciones en
Python a través de PyQt. En este capítulo se tratan los siguientes
temas:
•
•
•
•
•
•
•
•
•
•
•
•
•
Qt Toolkit
Toolkit Qt, conocido simplemente como Qt, es una aplicación multiplataforma y un
marco de interfaz de usuario desarrollado por
Trolltech que se utiliza para el desarrollo de aplicaciones GUI. Se
ejecuta en varias plataformas, incluyendo Windows, Mac OS X, Linux y
otras plataformas UNIX. También se le conoce como un conjunto de
herramientas Widget porque proporciona widgets, como botones,
etiquetas, cuadros de texto, botones y cuadros de lista, que son
necesarios en el diseño de una interfaz gráfica de usuario. lo
incluye un conjunto de plataformas cruzadas de las clases, las
herramientas de desarrollo integradas y un IDE multiplataforma.
PyQt
PyQt es un conjunto de enlaces Python para el conjunto de
herramientas Qt. PyQt combina todas las ventajas de Qt y Python. Con
PyQt, puede incluir librerías Qt en el código Python, lo que le
permite escribir aplicaciones gráficas en Python. En otras palabras,
PyQt le permite acceder a todos los servicios proporcionados por Qt
a través del código Python. Desde PyQt necesita las librerías Qt
para ejecutar, al instalar PyQt, la versión necesaria de Qt también
se instala automáticamente en el equipo.
Installing PyQt
You need to have Python Interpreter installed on your system before
you install PyQt. Recall from Chapter 1, “Python and its Features,”
that you have already installed Python 3.2 on your system, so you
can go ahead and download PyQt from
http://www.riverbankcomputing.co.uk/software/pyqt/download. The
latest version at the time of this writing is PyQt version 4.8.5 for
Python 3.2. The name of the downloaded file is PyQt-Py3.2-x86-gpl4.8.5-1.exe. Just
double-click the downloaded file to begin
installation. The first screen that you see is a welcome screen to
the PyQt Setup Wizard, as shown in Figure 7.1. The screen displays
general information about the components that come with PyQt. Select
Next to move forward.
Note
Your operating system may complain, saying the program is from
an unknown publisher and may harm your computer. Select the Yes
button to proceed with the installation. If you don’t see a Yes
button, select Actions to see the list of possible actions. In the
dialog that appears, select the More Options drop-down and select
Run to begin with the installation procedure.
The next screen shows the License Agreement, which you need to read
and agree to before installing PyQt. Select I Agree to continue
installation. Next, you get a screen that shows the list of
components that you can install with PyQt (see Figure 7.2). You can
select or deselect any component. The dialog also shows the disk
space that will be required for installing the selected components.
Let’s go ahead with Full Installation and select Next to move on.
The next screen will prompt you to specify the name and location of
the folder where Python 3.2 is installed. The reason is that PyQt is
installed in the sitepackages folder of the Python installation. The
wizard auto-detects and shows the location of the Python
installation by default, as shown in Figure 7.3. You can also select
Browse to modify the folder name. After specifying the location of
the Python installation, select Install to begin copying and
installing the PyQt files.
When PyQt files are copied and installed, you will be prompted to
select Finish to close the wizard.
Note
Don’t forget to set the path of the PyQt folder so that you can
access it from any folder on your computer.
en pyscriter:
probando:
•
Layouts - presentaciones
Spacers - espaciadores
Buttons - botones
Item Views (Model-Based)- Articulos Vistas(basado en modelos)
Item Widgets (Item-Based)
Containers - contenedores
Input Widgets
Display Widgets
Phonon
Layouts
Description
Vertical Layout
(QVBoxLayout)
Horizontal Layout
(QHBoxLayout)
Description
Horizontal Spacer
(Spacer)
Vertical Spacer
(Spacer)
Buttons
Widget
Description
Push Button (QPushButton)
Radio Button
(QRadioButton)
Button Box
(QDialogButtonBox)
Widget
Description
List View (QListView)
Tree View
(QTreeView)
Table View
(QTableView
Column View
(QColumnView)
Tree Widget
(QTreeWidget)
Table Widget
(QTableWidget)
Containers
Description
Frame (QFrame)
Widget (QWidget)
MdiArea (QMdiArea)
Input Widgets
Widget
Description
Date/Time Edit
(QDateTimeEdit)
Vertical Scrollbar
(QScrollBar)
QsciScintilla
Scintilla es un componente de
edición que realiza el estilo de
sintaxis, autocompletado de
código, romper puntos, sangría
automática, y otras tareas.
Es muy útil en la edición y
depurar el código fuente. El
componente Scintilla está dentro
QsciScintilla y utiliza de Qt
Designer para desarrollar
aplicaciones GUI como cualquier
otro widget de Qt.
Display Widgets
Label (QLabel)
Text Browser
(QTextBrowser)
Graphics View
(QGraphicsView)
Progress Bar
(QProgressBar)
QDeclarativeView
QWebView
Phonon
Description
Phonon::VideoPlayer
Phonon::SeekSlider
Phonon::VolumeSlide
Toolbar
En la parte superior de Qt Designer es una barra de herramientas con
iconos como se muestra en la Figura 7.8.
Figure 7.8. Qt Designer toolbar.
•
•
Displaying Text
Para mostrar texto no editable o una imagen, se utilizan widgets de
etiquetas; Una etiqueta es una instancia de la clase QLabel. Un
widget Label es un widget muy popular para la visualización de
mensajes y la información al usuario. Los métodos proporcionados por
la clase QLabel se muestran en la Tabla 7.10.
Tabla 7.10. Métodos proporcionados por la clase Qlabel
Methods
Usage
setText()
setPixmap()
setNum()
clear()
Usage
setEchoMode()
maxLength()
setText()
text()
clear()
setReadOnly()
isReadOnly()
setEnabled()
setFocus()
Las señales emitidas por el widget Line Edit son los siguientes:
TextChanged(): La señal se emite cuando se cambia el texto en el
widget Line Edit.
returnPressed(): La señal se emite cuando se pulsa Return o Enter.
editingFinished (): La señal se emite cuando el foco se pierde en el
widget Line Edit, lo que confirma la tarea de edición ha terminado
en él.
El siguiente widget es la forma más común de iniciar acciones en
cualquier aplicación.
Displaying Buttons
Viendo Botones
Para mostrar botones (normalmente Botones de comando) en una
aplicación, es necesario crear una instancia de la clase
QpushButton. Al asignar texto a los botones, puede crear teclas de
acceso directo precediendo cualquier carácter en el texto con un
símbolo de unión. Por ejemplo, si el texto asignado a un pulsador es
&Click Me, se subrayó el carácter C para indicar que se trata de una
tecla de acceso, y el usuario puede seleccionar el botón pulsando
Alt + C. El botón emite una señal clicked() si se activó.
Además de texto, un icono también se puede mostrar en el pulsadorpushbutton. Los
métodos para la visualización de texto y un icono de
un botón son estas:
setText(): Se utiliza para asignar el texto al pulsador.
setIcon(): Se utiliza para asignar icono para el botón.
El único concepto dejó de examinar antes de comenzar con su primera
aplicación en QtDesigner es la gestión de eventos. Vamos a ver cómo
los eventos se manejan en PyQt.
nota
Para una vista previa de un formulario durante la edición,
seleccione el Formulario, Vista previa o Ctrl + R.
¿Quieres un poco de acción a pasar cuando el usuario selecciona
Borrar en el formulario, por lo que necesita para conectar la señal
de empuje de Button al slots de la línea de edición.
QtCore.QMetaObject.connectSlotsByName(Dialog)