Post on 19-Aug-2021
Índice de Contenidos :.
Sesión 3 :: Transp. 2
Introducción :: 1Intérprete :: 2
Conceptos Básicos :: 3Estructuración de código :: 4
Programación OO :: 5Pygame :: 6
Scripting Python – C :: 7Referencias :: 8
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
¿Qué es Python? :.
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
● Python no es un lenguaje únicamente de consola.
● Python es potente y rápido.
● Python es muy sencillo.
● Python está en continuo crecimiento.
Sesión 3 :: Transp. 3
Características I :.
● Alto nivel
● Interpretado
● Interactivo
● Orientado a objetos
● OpenSource(certificación OSI)
- copyright pero su uso no tiene restricciones
- compatible licencia GPL a partir de versión 2.1.1
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 4
Características II :.
● Extensible- C / C++ / Fortran- Java( utilizando Jython)
● Encastrable en aplicaciones
● Multiplataforma. Portable.Unix/Linux, Windows, Mac, PalmOS, WindowsCE, RiscOS, VxWorks, QNX, OS/2, OS/390, AS/400, PlayStation, Sharp Zaurus, BeOS, VMS…
● Seguro(no: “core dumps”, “segmentation fault” )
● Rápido y cómodo
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 5
Propiedades del Lenguaje :.
● Cualquier elemento es un objeto
● Paquetes, módulos, clases, funciones
● Manejo de excepciones
● Tipado dinámico, polimorfismo
● Tipado fuerte
● Sobrecarga de operadores
● Bloques estructurales identificados por tabulación
● Sensible a mayúsculas/minúsculas
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 6
¿Para que se utiliza? :.
● Prototipado rápido
● Programación Web(tanto en cliente como en servidor)
● Scripting
● En aplicaciones científicas
● Procesamiento de XML
● Aplicaciones de bases de datos
● Aplicaciones GUI
● Educación
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 7
Interfaces con... :.
● XML● DOM● XMLRPC, SOAP, Web Services
● Bases de datos relacionales● MySQL, PostgreSQL, Oracle , ODBC, Sybase, Informix
● Java (via Jython)● Objective C● COM, DCOM (.NET también)● Muchas librerías GUI
● Multiplataforma(Tk, wxWindows, GTK, Qt)● Específicas de plataforma(MFC, Mac (classic, Cocoa), X11
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 8
Arquitectura de Python :.
¿Disponible módulo
compilado?
Script Fuente
Salida
Bytecode Compilado
Sentencia Import
Modulo Fuente
Máquina Virtual Python
CompiladorPython
Extensión C/C++
Librería C/C++
Externa
Extensión C/C++
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 9
Python vs. otros lenguajes I :.
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 10
Python vs. otros lenguajes II :.
class Hola { public static void main(String argumentos[ ]){
System.out.println("Hola, mundo"); }}
Program Hola;Begin writeln('Hola, mundo');End.
void main(){ printf ("Hola, mundo");}
print 'Hola, mundo'
Java
Pascal
Python
C
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 11
Python vs. otros lenguajes III :.
● Escribir programas en Python requiere menos de la mitad de tiempoque en Java, C o C++.
● El código resultante es la mitad de largo.
● No hay diferencias en la fiabilidad de los programas.
● El consumo de memoria es alrededor del doble frente a C y C++. Java consume alrededor del doble de Python.
● El código en Python es más rápido que en Java.
● Los lenguajes de script más rápidos son Python y Perl.
● La variación en rendimiento de los programas se debe más a los programadores que a los lenguajes.
[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos
Sesión 3 :: Transp. 12
¿Qué es un intérprete? :.
[Contenido] 2. Intérprete :: 3.Conceptos Básicos :: 4. Estructuración
● Aquel programa que recibe como entrada un programa escrito en lenguaje no máquina y lo convierte a código máquina ejecutable por el computador. ● Ejecución secuencial de instrucciones● No generación de ejecutables
● Portabilidad: cambiando el intérprete no el código...
Sesión 3 :: Transp. 13
Instalación :.
[Contenido] 2. Intérprete :: 3.Conceptos Básicos :: 4. Estructuración
Windows: Selección del directorio de destino Si/No copia de seguridad de archivos reemplazados Seleccionar componentes ...
Linux:Red Hat : rpmDebian: apt-get install python...Source: python-2.X.tgz
tar -zxvf python-2.X.tgz "./configure", "make", "make install"
http://www.python.org
URL de descarga:
Sesión 3 :: Transp. 14
Primera toma de contacto... :.
[Contenido] 2. Intérprete :: 3.Conceptos Básicos :: 4. Estructuración
● Iniciar intérprete:pythonpython fichero.py
● Salir del intéprete: Unix: Ctrl-D ó Ctrl-Z Windows: Ctrl-Z + return En ambos: “ import sys; sys.exit() ”
● Modo interactivo: “>>>” “...”
● Gestión de errores
Ejemplo A:
Ejemplo B: Como calculadora
>>> x = 1>>> if x:... print “hola mundo”...
Sesión 3 :: Transp. 15
Sintaxis :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● ¡Sin delimitadores de bloque! ⇨Tabuladores
● Esto obliga a “código sangrado”
● La instrucción termina con la línea (salvo uso “\”)
● Uso de “:” como separador de sentencias compuestas.
● Uso de “;” para separar sentencias en la misma línea.●
● Recolector de Basura: Uso del “Contador de Referencias”.
Sesión 3 :: Transp. 16
Variables :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● “Nacen” cuando se les asigna valor
● “Desaparecen” cuando se sale de su ámbito
● Peligros: - utilizar variables sin valor previamente asignado
- se tiene la variable i = 5 y se cometer el error de j=7 cuando se quiere i=7... Se crea una nueva variable
● Recordar: Python es sensible a mayúsculas/minúsculas
Sesión 3 :: Transp. 17
Tipos de Datos I :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
Sesión 3 :: Transp. 18
Tipos de Datos II :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Operaciones: + - * / **
● Paréntesis para agrupaciones
● Trunca la división entera
>>>1 / 2 >>>1.0 / 2.0
0 0.5
● La división entera retorna el valor “suelo”
>>>7 / 3 >>>7 / -3
2 -3
Sesión 3 :: Transp. 19
Tipos de Datos III :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Tamaño arbitrario
● “L”
● Ejemplos:
>>>2L * 100 200L
>>>2L ** 50
1125899906842624L
>>>123456789987654321123456789 * 2 246913579975308642246913578L
Sesión 3 :: Transp. 20
Tipos de Datos IV :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Soporte completo para punto flotante
>>>2.20 / 5.0 0.44000000000000006
>>>10. * ( 3.5 / 2.) 17.5
● Operaciones con operadores mixtos se convierten a punto flotante:
>>>3 * 4.78 / 3.
4.7800000000000002
>>>9.75 / 4 2.4375
Sesión 3 :: Transp. 21
Tipos de Datos V :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Sufijo parte imaginaria: “j” or “J”
● Formato: “(real+imagj)”
● Función complex(real,imag)
>>>1j + 4J 5j
>>>4j * 10j (-40+0j)
>>> 4+5j / 3J (5.666666666666667+0j)
>>> 1j * complex(1,1) (-1+1j)
Sesión 3 :: Transp. 22
Tipos de Datos VI :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Representados como números en punto flotante. Ejemplo:
>>> a = 1.5 + 0.5j
>>> a.real
1.5
>>> a.imag
0.5
● Funciones de conversión:● float()● int()● long()
Sesión 3 :: Transp. 23
Tipos de Datos VII :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Definidos por:
Sesión 3 :: Transp. 24
Tipos de Datos VIII :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Operaciones:
“hola”+“mundo” ‘hola mundo’ Concatenación
“hola”*2 ‘holahola’ Repetición
“hola”[0] ‘h’ Indexado positivo
“hola”[-1] ‘a’ Indexado negativo
“hola”[1:3] ‘ol’ Particionado
“hola”[:2] ‘ho’
“hola”[1:] ‘ola’
‘h’+‘ola’[:2] ‘hol’
len(“hola”) 4 Longitud
“hola” < “lola” true Comparación
‘o’ in “hola” true Búsqueda
Sesión 3 :: Transp. 25
Tipos de Datos IX :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Agrupaciones de elementos de cualquier tipo >>>a =[“hola”,100,’j’,“mundo”]
● Los mismos operadores que para las cadenas
● Indexado y particionado
● Ejemplos:
>>>a[0] = 96
>>>a[1:2] = [“hola”,”mundo”,”...”]
>>>del a[-1]
>>>len(a)
>>>a[1:-1]
>>>2*a
Sesión 3 :: Transp. 26
Tipos de Datos X :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Más operaciones...
>>>a = range(5) #[0,1,2,3,4]
>>>a.append(5) #[0,1,2,3,4,5]
>>>a.extend([6]) #[0,1,2,3,4,5,6]
>>>a.count(3) #1
>>>a.insert(0,-1) #[-1,0,1,2,3,4,5,6]
>>>a.pop() #6
>>>a.pop(0) #-1
>>>a.remove(3) #[0,1,2,4,5]
>>>a.reverse() #[5,4,2,1,0]
>>>a.sort() #[0,1,2,4,5]
Sesión 3 :: Transp. 27
Tipos de Datos XI :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Lista inmutable● Se definen igual que una lista● El conjunto de elementos se encierra entre paréntesis en lugar de entre corchetes.● Los elementos presentan un orden definido [0..n] ó [-n..-1]● Porciones (se obtienen nuevas = listas) ● No presentan métodos● ¿por qué su existencia?
Más rápidas que las listas ⇒ Ideales para- conjunto constante de valores- claves de un diccionario
Sesión 3 :: Transp. 28
Tipos de Datos XII :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
●Diccionarios
● Ejemplos...
>>> t = ("a","b","10","z","example")
>>> t
('a','b','10','z','example')
>>> t[0]
'a'
>>> t[-1]
'example'
>>> t[1:3]
('b','10')
Sesión 3 :: Transp. 29
Tipos de Datos XIII :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
● Diccionarios
● “arrays asociativos”, “tablas hash”
● Indexados por “claves”
● Las claves = cualquier tipo inmutable
● Las claves pueden ser números o cadenas
● Formación:{ clave:valor, clave:valor,...}
● Ejemplo:
>>>tel={'juan':2324, 'paco':6217}
>>>tel['paco']
6217
Sesión 3 :: Transp. 30
Tipos de Datos XIV :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos
● Secuencia● Cadenas● Listas● Tuplas
● Diccionarios
● Operaciones...>>>tel={'juan':2324,'paco':6217} #crear
>>>tel['juan']=2335 #modificar
>>>tel['luis']=3839 #insertar
>>>del tel[‘juan’] #eliminar
>>>tel.keys() #claves
['luis', 'paco']
>>>tel.values() #valores
[3839, 6217]
>>>tel.items() #elementos
[('luis', 3839), ('paco', 6217)]
>>>tel.has_key(‘carlos’) #Presencia
False
Sesión 3 :: Transp. 31
Estructuras de Control I :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● if condición: instrucciones
[elif condición: instrucciones]... else: instrucciones
● Ejemplo...>>>x = int(raw_input("Numero?"))
>>>if x < 0:
... print "numero negativo"
...elif x==0:
... print 'cero'
...elif x > 0:
... print "numero positivo"
...else:
... print "error“
...
Sesión 3 :: Transp. 32
Estructuras de Control II :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● for var in secuencia: instrucciones
Función: range()
NB: si se precisa modificar la lista sobre la que se itera debe iterarse sobre una copia: for x in s[:]:for x in s[:]:
● Ejemplo...>>>s = ['coche','casa','abrigo']
>>>for x in s:
... print x,len(x)
...
>>>range(5)
[0,1,2,3,4]
>>>for x in range(len(s)):
... print x, s[x]
...
Sesión 3 :: Transp. 33
Estructuras de Control III :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● while condición: instrucciones
● Ejemplo...>>>s = int(raw_input("Numero?"))
>>>x=0
>>>while x < s:
... print x
... x += 2
...
Sesión 3 :: Transp. 34
Estructuras de Control IV :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● break● continue● pass● return● else:
instrucciones
● Ejemplo...>>>for n in range(2,10):
... for x in range(2,n):
... if n % x == 0:
... print n,’=’,x,’*’,n/x
... break
... else:
... print n,’es numero primo’
...
>>>while True:
... Pass
...
Sesión 3 :: Transp. 35
Estructuras de Control V :.
[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código
● try: instrucciones
except tipo_excepción: instrucciones else: instrucciones
● try: instrucciones finally: instrucciones
● Ejemplo...>>>for arg in sys.argv[1:]:... try:... f = open(arg,’r’)... except IOError:... print ‘no se puede abrir’,arg... else:... print arg,’tiene’,len(f.readlines()),’lineas’... f.close()...
>>>f = open(miFichero)>>>try:... ordenaFichero(f)...finally:... close(f)...
Sesión 3 :: Transp. 36
Funciones I :.
[Contenido] 4. Estructuración de código :: 5. Programación OO
● def name(arg1, arg2,...):
"""documentación""" #cadena de documentación oficialInstrucciones
return #para procedimiento. Similar a:return Nonereturn expresión #para función
● Ejemplo...>>>def fib(n):... """Genera la serie de Fibonacci hasta n""" ... a, b = 0, 1... while b < n:... print b... a,b= b, a+b... return
Sesión 3 :: Transp. 37
Funciones II :.
[Contenido] 4. Estructuración de código :: 5. Programación OO
● Paso de argumentos: ● paso por valor aunque... paso por referencia de objeto● si cambio de referencia de una variable dentro de una función, no se afecta a la variable de la llamada.● sin embargo se puede modificar el objeto al que referencia un parámetro.
● Ejemplo 1:def func1(n): n = n + 4 print n
x = 10func1(x)print x
● Ejemplo 2:def func2(l): l.append("tres")
miLista=["uno","dos"]print miListafunc2(miLista)print miLista
● Ejemplo 3:def func3(lista): lista=["L","M","X"]
miLista=["uno","dos"]print miListafunc3(miLista)print miLista
Sesión 3 :: Transp. 38
Funciones III :.
[Contenido] 4. Estructuración de código :: 5. Programación OO
● Las parámetros pueden presentar valores por defecto● Los valores por defecto sólo se evalúan una vez● Un función puede aceptar un secuencia arbitraria de parámetros(se recogen en una tupla)
● Ejemplo 1:def func5(n, cont=1): i=0 while i<n: print i i += cont
func5(4)print "-----"func5(7,2)print "-----"func5(100,cont=10)
● Ejemplo 3:def printList(*args): for arg in args: print "arg: "+arg
printList("casa", "os", "hola")
● Ejemplo 2:def f(a,l=[]): l.append(a) return l
print f(1)print f(2)print f(3)
Sesión 3 :: Transp. 39
Módulos :.
[Contenido] 4. Estructuración de código :: 5. Programación OO
● Módulo ≈ agrupación de funciones relacionadas... ≈ script● Las definiciones de un módulo se pueden importar en otros módulos● Nombre de archivo( *.py ) ≡ Nombre módulo● Importación:
● import nombre_módulo● nombre_módulo.nombreelemento
● from nombre_módulo import función1, función2● from nombre_módulo import *
● Búsqueda de módulos en la variable de entorno PYTHONPATH y en el directorio actual
Sesión 3 :: Transp. 40
Paquetes :.
[Contenido] 4. Estructuración de código :: 5. Programación OO
● Paquete ≈ agrupación de módulos relacionados● Puede ser en varios niveles● Importación:
● from nombrePaquete.nombreMódulo... import *● from nombrePaquete.nombreMódulo... import función
Sesión 3 :: Transp. 41
Introducción :.
● Soporta gran parte de los aspectos de la programación OO
● Aspectos:✔ herencia – herencia múltiple✔ polimorfismo✔ clases abstractas
● Todos los tipos de datos son objetos
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 42
Clases I :.
class name"""documentación"""
atributos
def nombreMétodo (args):instrucciones
...
class coche: numRuedas=0 numPuertas=0
def __init__(self,numR,numP): coche.numRuedas = numR coche.numPuertas = numP
def setRuedas(self, num): coche.numRuedas = num
def setPuertas(self,num): coche.numPuertas = num
def getRuedas(self): return coche.numRuedas
def getPuertas(self): return coche.numPuertas
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 43
Clases II :.
● Creación de instancias de objetos
● Ejemplo...c = coche(4,5)c.setPuertas(3)print c.getPuertas()
● Variable de clase vs. Instancia de variable
● Ejemplo...c1 = coche(4,3)c2 = coche(4,5)print c1.getPuertas()print c2.getPuertas()
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 44
Clases III :.
● Utilización del parámetro self● Ejemplo...class coche: numRuedas=0 numPuertas=0
def __init__(self,numR,numP): self.numRuedas = numR self.numPuertas = numP
def setRuedas(self, num): self.numRuedas = num
def setPuertas(self,num): self.numPuertas = num
def getRuedas(self): return self.numRuedas
def getPuertas(self): return self.numPuertas
● Ejemplo...c1 = coche(4,3)c2 = coche(4,5)print c1.getPuertas()print c2.getPuertas()
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 45
Clases IV :.● En cualquier momento se puede añadir, modificar o borrar atributos
● Ejemplo...class coche: __numRuedas=0 __numPuertas=0
def __init__(self,numR,numP): self.__numRuedas = numR self.__numPuertas = numP
def setRuedas(self, num): self.__numRuedas = num . . .
● Ejemplo...c1 = coche(4,5)coche.marca = 'seat'c2 = coche(4,3)print c2.marcaprint c1.marca
● Atributos privados
NB: Afecta a todas las instancias de la clase
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 46
Herencia I :.● Herencia simple:
class clase1:
...
class clase2(clase1):
...
● Ejemplo...class coche: . . .
class deportivo(coche): __velocidadMax=0
def setVelocidadMax(self, v): self.__velocidadMax = v
def getVelocidadMax(self): return self.__velocidadMax
Ejemplo...c1 = deportivo(4,5)c1.setVelocidadMax(200)print c1.getVelocidadMax()print c1.getPuertas()
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 47
Herencia II :.● Herencia múltiple:
class clase1:
...
class clase2:
...
class clase3(clase1,clase2):
...
deportivo
coche avion
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 48
Herencia III :.class coche: __numRuedas=0 __numPuertas=0
def __init__(self,numR,numP): self.__numRuedas=numR self.__numPuertas=numP
def setRuedas(self, num): self.__numRuedas = num
def setPuertas(self,num): self.__numPuertas = num
def getRuedas(self): return self.__numRuedas
def getPuertas(self): return self.__numPuertas
class avion: __potencia=0 def __init__(self,pot): self.__potencia=pot
def getPotencia(self): return self.__potencia
def setPotencia(self,pot): self.__potencia=pot
class deportivo(coche,avion): __velocidadMax=0
def __init__(self,nR,nP,pot): coche.__init__(self,nR,nP) avion.__init__(self,pot)
def setVelocidadMax(self, v): self.__velocidadMax = v
def getVelocidadMax(self): return self.__velocidadMax
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 49
Herencia IV :.
● Pueden generarse problemas de ambigüedad con la herencia múltiple.
Solución: Se analizan los ancestros de la clase por orden
de declaración en la lista de herencias.
● Ejemplo...c1 = deportivo(4,5,1000)c1.setVelocidadMax(200)print c1.getVelocidadMax()print c1.getPuertas()print c1.getPotencia()
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 50
Otros Aspectos :.
● Las clases pueden agruparse en módulos y en paquetes.
● Se pueden sobrescribir métodos
● Se adecuan fácilmente para la implementación de “patrones software”
[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C
Sesión 3 :: Transp. 51
Introducción :.
● Conjunto de módulos Python (escritos en Python y C) diseñados para el desarrollo juegos.
● Recubren la librería SDL(Simple Directmedia Library)● SDL: Librería multiplataforma para manejar elementos multimedia (audio, teclado, ratón, joystick, hardware 3D via OpenGL,...) escrita en C ≅ DirectX
● Pygame + SDL adecuados para juegos 2D
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
Sesión 3 :: Transp. 52
Instalación :.
● Windows:
● Previamente instalado Python
● pygame-1.X.win32-py2.X.exe
● Linux:
● Red-Hat: RPM
● Debian: apt-get install pygame
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
http://www.pygame.org
URL de descarga:
Sesión 3 :: Transp. 53
Ejemplo I :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
import sys, pygamepygame.init() size = width, height = 640, 480speed1 = [2 , 2]speed2 = [2 , -2]
#color background: RGBdarkblue= 2,7,10
#create screenscreen = pygame.display.set_mode(size)
#create imagesball1 = pygame.image.load("ball.png")ball1Rect = ball1.get_rect()
ball2 = pygame.image.load("ball.png")ball2Rect = ball2.get_rect()
explo = pygame.image.load("bang.jpeg")exploRect = explo.get_rect()
Sesión 3 :: Transp. 54
Ejemplo II :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
#Ball2: initial positionball2Rect.centerx = 400ball2Rect.centery = 200
while 1:for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
#Move ballsball1Rect = ball1Rect.move(speed1)if ball1Rect.left < 0 or ball1Rect.right > width:
speed1[0] = -speed1[0]if ball1Rect.top < 0 or ball1Rect.bottom > height:
speed1[1] = -speed1[1]
ball2Rect = ball2Rect.move(speed2)if ball2Rect.left < 0 or ball2Rect.right > width:
speed2[0] = -speed2[0]if ball2Rect.top < 0 or ball2Rect.bottom > height:
speed2[1] = -speed2[1]
screen.fill(darkblue)
Sesión 3 :: Transp. 55
Ejemplo III :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
#collision detectionif (ball1Rect.colliderect(ball2Rect) or ball2Rect.colliderect(ball1Rect)) :
speed1[0] = -speed1[0]speed2[0] = -speed1[0]exploRect.centerx = (ball1Rect.centerx+ball2Rect.centerx)/2exploRect.centery = (ball1Rect.centery+ball2Rect.centery)/2screen.blit(explo,exploRect)
else:screen.blit(ball1, ball1Rect)screen.blit(ball2,ball2Rect)
pygame.display.flip()
Sesión 3 :: Transp. 56
Imágenes ... :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
def load_image(name, colorkey=None):fullname = os.path.join('data',name)try:
image = pygame.image.load(fullname)except pygame.error, message:
print 'No se pudo cargar imagen', fullnameraise SystemExit, message
image = image.convert()if colorkey is not None:
if colorkey is -1:colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)return image, image.get_rect()
Sesión 3 :: Transp. 57
Sonido y texto... :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
def load_sound(name):fullname = os.path.join('data',name)try:
sound = pygame.mixer.Sound(fullname)except pygame.error, message:
print 'No se pudo cargar sonido:', fullnameraise SystemExit, message
return sound
if pygame.font:font = pygame.font.Font(None,36)text = font.render(“Curso de Desarrollo de Videojuegos”,1,(10,10,10))textpos = text.get_rect(centerx=background.get_width()/2)background.blit(text, textpos)
Sesión 3 :: Transp. 58
Eventos ... :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
...for event in pygame.event.get():
if event.type == QUIT: return
elif event.type == KEYDOWN and event.key == K_ESCAPE:return
elif event.type == MOUSEBUTTONDOWN:
...
elif event.type == MOUSEBUTTONUP:
...
Sesión 3 :: Transp. 59
“Sprites” I :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
● Sprite ≈ objeto animado en un juego 2D
● Objetivo: mejorar la “rapidez” del juego
● Módulo “sprite” = clase sprite + clase group
● Un grupo es un contenedor de “sprites”
● Todo “sprite” siempre pertenece a un grupo como mínimo
● Ejemplos: “PACMAN” = pac + fantasmas + cerezas
“SPACE INVADERS” = nave + naves enemigas + disparos
Sesión 3 :: Transp. 60
“Sprites” II :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
● Tipos de grupos:● Group● GroupSingle
● Contiene el último “sprite” añadido● RenderPlain
● Varios sprites● Método draw()
● RenderClear ● Varios sprites● Método clear()
● RenderUpdates● Varios sprites● Permite obtener una lista de los objetos pygame “Rects”, los cuales representan áreas que han cambiado.
Sesión 3 :: Transp. 61
“Sprites” III :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
● Detección de colisiones:● spritecollide(sprite,group,dokill) -> list
● groupcollide(group1,group2,dokill1,dokill2) -> dictionary
for bomba in sprite.spritecollide(jugador, bombas, 1):bomba_sonido.play()explosion(bomba,0)
for alien in sprite.groupcollide(aliens, disparos, 1, 1).keys():bomba_sonido.play()explosion(alien, 0)
Sesión 3 :: Transp. 62
Propuesta :.
[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias
● Implementar el juego de:
“ Las tres en raya ”
Sesión 3 :: Transp. 63
Introducción :.
● Ventajas
✔ descomponer el código en componentes específicos. (P.e.: AI)
✔ flexibilizar y agilizar el desarrollo y mantenimiento
✔ prevención y control de errores
✔ aislar el código del motor del juego...
● Desventajas
¿?Pueden mermar el rendimiento
C/C++ Python
Java
JNI(Java Native Interface)
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 64
Integrando Python en C I :.
● Acciones que se pueden ejecutar...:
● funcionalidades disponibles en Python
● un script Python
● una función contenida en un módulo Python
● convertir los valores de los datos de C a Python
● realizar la llamada a la función Python utilizando los valores
convertidos
● convertir los valores de los datos de Python a C
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 65
Integrando Python en C II :.● Archivo de cabecera: <Python.h>
● Intérprete de Python: Py_Initialize() - Py_Finalize()
● Existen llamadas para ejecutar código en el intérprete como:
● int PyRun_SimpleString(char *command)
● int PyRun_SimpleFile(FILE *fp, char *filename)
● Ejemplo...#include <Python.h>
int main(int argc, char *argv[]){Py_Initialize();PyRun_SimpleString("import socket");PyRun_SimpleString("address = socket.gethostbyname('localhost')");PyRun_SimpleString("print \"[Ejemplo1]: Direccion IP(localhost): %s\" %address");Py_Finalize();
return 0;}
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 66
Integrando Python en C III :.● PyObject:
● Puntero a un tipo de datos que representa un objeto Python
● En más profundidad...¿cómo utilizar un función de un módulo Python?
● Inicializar el intérprete de Python: Py-Initialize()
● Importar el módulo Python:
● PyObject* PyImport_ImportModule(char *name)
● PyObject* PyString_FromString(const char *v)
PyObject* PyImport_Import(PyObject *name)
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 67
Integrando Python en C IV :.● Acceder a la función:
PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name)
● Convertir valores de datos de C a Python:
PyObject* Py_BuildValue(char *format, ...)
Py_BuildValue("") NonePy_BuildValue("i", 123) 123 Py_BuildValue("iii", 123, 456, 789) (123, 456, 789) Py_BuildValue("s", "hello") 'hello' Py_BuildValue("ss", "hello", "world") ('hello', 'world') Py_BuildValue("()") () Py_BuildValue("(i)", 123) (123,) Py_BuildValue("(i,i)", 123, 456) (123, 456) Py_BuildValue("{s:i,s:i}", "abc", 123, "def", 456) {'abc': 123, 'def': 456} Py_BuildValue("((ii)(ii)) (ii)", 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6))
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 68
Integrando Python en C V :.● Llamar a la función:
PyObject* PyEval_CallObject(PyObject* func, PyObject* args)
● Convertir valores de datos de Python a C:
int PyArg_Parse(PyObject *args, char *format, ...)
● Comprobación de excepciones:
PyObject* PyErr_Occurred( )
void PyErr_Print()
● Finalizar el intérprete: Py_Finalize()
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 69
Integrando Python en C VI :.
#include <Python.h>#define NELEM 3
int main(int argc, char *argv[]){
PyObject *mymod, *pFunc, *pName, *pValue, *pArgs, *pList;char *cReverse;int i;float num = 15.0;int lista[NELEM]={1,2,3};int listaR[NELEM];
Py_Initialize();
/* Annadir a PYTHONPATH el directorio actual de trabajo */PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('.')");
/* Importar modulo */pName = PyString_FromString("reverse");mymod = PyImport_Import(pName);
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 70
Integrando Python en C VII :.
if(mymod != NULL){
/* Invertir una cadena de texto */pFunc = PyObject_GetAttrString (mymod, "rString");pArgs = Py_BuildValue ("(s)","Hola Mundo"); pValue = PyEval_CallObject(pFunc, pArgs);PyArg_Parse(pValue, "s", &cReverse);printf("Inversa de la cadena -Hola Mundo- : %s \n", cReverse);if (PyErr_Occurred()) PyErr_Print();
/* Inversa de un numero */pFunc = PyObject_GetAttrString (mymod, "rNum");pArgs = Py_BuildValue ("(f)", num); pValue = PyEval_CallObject(pFunc, pArgs);PyArg_Parse(pValue, "f", &num);printf("Inversa del numero 15.0 : %f \n", num);if (PyErr_Occurred()) PyErr_Print();
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 71
Integrando Python en C VIII :.
/* Inversa de una lista */pFunc = PyObject_GetAttrString (mymod, "rList");pArgs = Py_BuildValue ("([i,i,i])",lista[0],lista[1],lista[2]); pList = PyEval_CallObject(pFunc, pArgs);if( PyList_Check(pList)){
for(i=0; i<NELEM; i++){pValue = PyList_GetItem(pList, i);listaR[i] =(int)PyInt_AsLong(pValue);
}}else
printf("No devuelto tipo lista");printf("Inversa de la lista [%i,%i,%i]: [%i %i %i] \n",lista[0],lista[1],
lista[2],listaR[0],listaR[1],listaR[2]);if (PyErr_Occurred()) PyErr_Print();
}else{PyErr_Print();fprintf(stderr, "Error al cargar el modulo \n");return -1;
}Py_Finalize();return 0;
}
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 72
Integrando Python en C IX :.
CFLAGS = -c -g -ansi -Wall LNKFLAGS = -g -Wall CC = gccLIBS = -L"/usr/lib/python2.3" -lpython2.3INCS = -I"/usr/include/python2.3"
OBJS = ejemplo2.o BIN = ejemplo2
all: $(BIN)
clean:rm -f $(OBJ) $(BIN)
$(BIN): $(OBJS)$(CC) $(LNKFLAGS) $(INCS) $(LIBS) $(OBJS) -o$(BIN)
ejemplo2.o: ejemplo2.c$(CC) $(CFLAGS) $(INCS) $(LIBS) -o ejemplo2.o ejemplo2.c
LINUX(Debian) - makefile
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 73
Integrando Python en C X :.Windows – Dev-c++
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 74
Integrando Python en C XI :.Windows – Dev-c++
● Generar libpython2X.a (libpython22.a, libpython23.a, ...)
1. Descargarse pexport(http://starship.python.net/crew/kernr/mingw32/pexports-0.42h.zip)
2. Obtener Python2X.dll (Python22.dll, Python23.dll)
3. Ejecutar: pexports python2X.dll > python2X.def
4. Ejecutar: (dlltoll es una utilidad de MinGW)
dlltool --dllname python2X.dll --def python2X.def --output-lib libpython2X.a
5. Copiar libpython2X.a en X:\XXX\python2X\libs\ (en la misma ubicación que python2X.lib)
[Contenido] 7. Scripting Python – C :: 8. Referencias
Sesión 3 :: Transp. 75
Referencias :.
[Contenido] 8. Referencias
● http://www.python.orgWeb oficial del lenguaje.
● http://www.cbel.com/python_programming_language/Enlaces a gran cantidad de librerías para python.
● http://pyspanishdoc.sourceforge.net/Proyecto en sourceforge de traducción de la documentación de
python al Castellano.
● http://www.pygame.org
Sesión 3 :: Transp. 76
Anexo. Tipado Dinámico :.
[Contenido] Anexo
Tipado dinámico
>>> a = 7 >>> # a es un entero ... >>> a = ‘C2P' >>> # a es una cadena ... >>> a = [1,7,‘C2P']>>> # a es una lista
>>>'C2P' + 1 Traceback (most recent call last): File "<stdin>", line 1, in ?TypeError: cannot concatenate 'str' and 'int' objects
>>>'C2P' + str(1)'C2P1'
Tipado fuerte
Sesión 3 :: Transp. 77