tutorial de python orientado a objetos - bienvenidos a … · 9 python poo estructura de datos –...

25
1 Tutorial de Python orientado a objetos En la primera llave creamos una clase llamada Gelantia. En la primera parte def __ init__(self, tam, color, sabor): definimos las características del objeto. En la segunda parte def desplegarC(self): podremos recuperar la información que le hemos asignado al objeto. En la segunda llave le damos las propiedades a los objetos gel1, gel2 y gel2. En la llave tres llamamos a def DesplegarC(self): para ver las propiedades que le hemos asignado a los objetos.

Upload: tranminh

Post on 02-Aug-2018

226 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

1

Tutorial de Python orientado a objetos

En la primera llave creamos una clase llamada Gelantia.

En la primera parte def __ init__(self, tam, color, sabor): definimos las características del

objeto.

En la segunda parte def desplegarC(self): podremos recuperar la información que le hemos

asignado al objeto.

En la segunda llave le damos las propiedades a los objetos gel1, gel2 y gel2.

En la llave tres llamamos a def DesplegarC(self): para ver las propiedades que le hemos

asignado a los objetos.

Page 2: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

2

Otro ejemplo para que tú lo analices

Page 3: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

3

Python Poo Herencia

Este será el resultado:

Page 4: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

4

Herencia múltiple

Hemos definido una nueva clase llamada Telefono.

La hereda la clase Celular, que recibe herencia múltiple ya que recibe la herencia

Electrodomestico.

Ya podemos utilizar cel.llamar() y cel.colgar() que definimos en la clase Telefono.

Page 5: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

5

Este será el resultado:

Nota:

Si las clases Electrodometicos y Telefonos tuvieran un método con el mismo nombre tiene

prioridad la herencia que se encuentran a la izquierda es este caso cogería el método de

Electrodomestico.

Page 6: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

6

Python Poo Encapsulamiento

Como podrás observar a la hora de dar atributos a una clase podemos definir un atributo de

tipo privado self.__dia = dia, si lo queremos recuperar nos dará un mensaje de error, en el

resultado podrás observar como el valor del mes si lo podemos visualizar pero el valor del día

nos da un mensaje de error.

Page 7: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

7

La llave grande define la creación de la clase Nacimiento.

Al método def ___init__(self): no le pasamos parámetros, se los asignamos en las líneas

continuas.

Verás que el primer valor que le asignamos es self. __anio = 2000, el doble guion bajo hacemos

que la variable sea de tipo privada, es decir que no tendremos acceso directamente como en

los ejemplos anteriores.

Definimos un método set que al estar dentro de la clase tiene acceso al valor de las variables,

en este caso def setMes(self, mes): que admite como parámetro el valor del mes y antes de ser

asignado comprueba si esta valor es correcto o no, si es correcto lo asigna con self.__mes =

mes y si es falso retorna un mensaje print(“Mes invalido.”).

Para poder ver la información del mes que no es pública utilizaremos el método get

Def getMes(self): dond nos retornoará el valor de self.__mes.

Después de crear un objeto de tipo Nacimiento objeto = Nacimiento()

Page 8: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

8

Le pasamos al mes le damos el valor 45 objeto.setMes(45).

Para ver el resultado print (objeto.getMes()) como no es un mes correcto imprime “Mes

invalido”, e imprime el valor que se le asignó al principio.

A continuación al mes le damos el valor 6 objeto.setMes(6).

Para ver el resultado print (objeto.getMes()) como el valor es correcto imprime el número

6.

Page 9: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

9

Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase principal.

Vamos a especificar todas las cosas que van a tener el elemento de la lista.

En este ejemplo vamos a trabajar con nombre y edad.

Dentro del Nodo vamos a crear el método def __init(self):

Con self. Definimos los objetos Nombre = vacío y edad = 0.

Mediante self.siguiente = None (con esto conseguimos apuntar el al siguiente nodo.

Nombre

Edad

Siguiente

Nombre Nombre Nombre

Edad Edad Edad

Siguiente Siguiente Siguiente

Definimos nuestro método principal def __init__(self):

Self.raiz = Nodo() Al objeto raíz le asignamos el método Nodo() que estará vacía.

Nada

Nada

Page 10: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

10

Ahora vamos a crear el método insertar.

Con el primer ‘if’ controlamos que si el nombre del primer elemento de la lista está vacia el

método raíz va a insertar el nodo al primer elemento.

Si no ‘else’ definimos la variable aux = self.raiz para que guarde la posición donde tenemos que

insertar el nuevo nodo. (Nombre y Edad).

En un bucle while, mientras este sea True que compare si aux.siguinete == None (vacio),

después le pasamos al objeto aux.siguiete el valor de nodo, si se cumple se rompe el bucle y

sino la variable aux asume el valor de aux.siguiente.

Ahora vamos a crear el método consultar.

El objeto aux y aux2 se van a encargar a recoger toda la lista entre todos sus elementos.

Con el primer ‘if’ controlaremos si la lista está vacia, si es así nos mostrará el siguiente mensaje

‘La lista está vacia’.

Sino ‘else’ que imprima el nombre y la edad y mientas ‘while’ el objeto aux.siguiente sea ¡=

(distinto) de vacío, accedemos al siguiente para que lo muestre.

Page 11: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

11

Ahora vamos a crear el método eliminar.

Para ello vamos a crear un objeto llamado aux = self.raiz para ir haciendo el recorrido.

Si ‘if’ aux.nombre == None (vacio) que nos diga que no hay elementos que se puedan eliminar.

Sino ‘else’ elemento = input(“Escribe el nombre a eliminar”) que lo asignaremos a la variable

elemento.

Si aux.nombre == elemento: la persona que queremos eliminar y además el valor de la lista

siguiente está vacio, creamos un nuevo Nodo() con lo cual quedará totalmente vacia.

Mientas ‘while’ aux.nombre ¡= None (distinto a vacío) agregaremos una condición.

Sino ‘else’ pasmos los valores de la lista siguiente a la lista actual ‘self.raiz = aux.siguiente’

La variable ‘t’ de tipo boolean le asignamos el valor True.

Sino ‘else’ mientras ‘while’ aux.siguiente ¡= None and t:

aux = aux.siguiente (ir a la siguiente posición)

Si aux.nombre == elementos (que estamos buscando) aux2.siguiente = aux.siguiente, el

aux2.siguiente va una posición atrás del aux.siguiente. y al final aux = None y t = False

aux y aux2 aux

Nombre Nombre Nombre

Edad Edad Edad

Siguiente Siguiente Siguiente

Page 12: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

12

En la clase principal vamos a instanciar un objeto lista de la clase Lista().

Creamos un menú con las siguientes opciones que se detallan con las llaves.

Por mediación de input vamos a asignar un valor al objeto ‘opcion’ para que pueda realizar las

opciones detalladas del 1 al 4.

Si opción == 1 con ‘nodo = Nodo()’ vamos a instanciar un objeto nodo de la clase Nodo().

Preguntamos por el nombre y edad que se le asignan a sus correspondientes objetos.

Con ‘lista.insertar(nodo)’ llamamos al método insertas.

Si opción == 2 con ‘lista.consultar()’ llamamos al método consultar.

Si opción == 3 con ‘lista.eliminar()’ llamamos al método eliminar.

Si opción == 4 con break rompemos el bucle y termina el programa.

Python Poo Estructura de datos Pila I Trabajando con Pilas.

Guardar los valores del 1 hasta el 10 en la pila.

Luego vemos los valores que hemos almacenado.

Guardamos los valores del 1 hasta el 10 en la pila con ayuda del ciclo for y el parámetro range.

Luego vemos los valores que hemos almacenado.

Lo mismo pero con un rango de 1 hasta 100.

Guardamos los valores del 1 hasta el 100, pero aquellos que sean pares, utilizando la condición

elemento % 2 == 0, es decir que son divisible por 2 es decir pares.

Luego vemos los valores que hemos almacenado.

Page 13: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

13

Almacenamos en la pila los valores comprendidos entre 1 hasta 100 pero a su ver los multiplica

por 5.

Luego vemos los valores que hemos almacenado.

Asignamos a la pila los valores del 1 hasta el 5.

Vemos los valores que hemos almacenado.

Con la instrucción pila.pop() eliminamos el último valor de la pila

Y luego vemos los valores que tenemos almacenados y el número 5 ya no está.

Con la instrucción pila.append(7) agregamos el valor 7 en la última posición de la pila

Vemos los valores que hemos almacenado.

Page 14: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

14

Page 15: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

15

Hemos cambiado el código del método de la consulta para que muestre la información en modo

de pila, este será el resultado:

Page 16: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

16

Si queremos que cada vez que aparezca el menú se borre la pantalla.

Para ejecutarlo desde Windows haremos doble clic sobre el archivo que hemos creado.

Forma de pila

Page 17: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

17

Ahora vamos a modificar el método eliminar() y el método consultar():

Ahora lo podrás ejecutar de nuevo.

Page 18: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

18

Python POO Estructura de datos Pila II

En la clase Nodo definimos un objeto que tendrá las siguientes variables:

Nombre, edad y atras.

En la clase Pilla creamos los siguientes métodos:

El método inicial def __init__(self): tendrá una variable ‘self.topo = Nodo()’

El método def insertar(self, nodo): comparará si la variable nombre está vacía, si es así creará

la pila para poder insertar el nombre y la edad sino se colocará antes de los datos que tiene la

pila para introducir el nuevo dato.

El método def eliminar(self): comprobamos si nombre está vacía, si es así que emprima el

mensaje ‘La pila está vacía’ y un pause para poder ver el mensaje, sino self.tope si se situa

antes del último valor, de este modo el puntero de dirección al siguiente dato se rompe,

Page 19: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

19

imprime el valor que hemos eliminado, hay una pausa para poder ver el mensaje y si aux.atras

es igual a nada que cree una nueva pila ‘self.tope = Nodo()’.

Con el método def consultar(self): la variable aux asume el valor self.tope el final de la pila, si

aux.nombre == Nove: (que está vacia) que imprima el mensaje ‘La pila está vacia’ sino es así

mientas aux sea distinto a nada que imprima el nombre y la edad, con aux = aux.atras nos

vamos a los datos anteriores para volverlos a imprimir, este bucle lo realizará mientras aux

distinto a None, al final un pause para poder ver los datos.

El método class Principal: crearemos un menú para que el usuario por teclado pueda elegir la

opción que desee y con condiciones iremos llamando los correspondientes métodos.

Page 20: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

20

Python POO Estructura de Datos-Cola I

Page 21: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

21

Python POO Estructura de Datos-Cola II

Page 22: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

22

Page 23: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

23

Python POO Especial Agenda (Capítulo final) Vamos a crear una agenda:

#Ejercicio Agenda

import os

class Archivo:

def __init__(self):

self.lista = []

def iniciarArchivo(self):

archivo = open("agenda.txt","a")

archivo.close()

def escribirArchivo(self):

archivo = open("agenda.txt","w")

self.lista.sort()

for elemento in self.lista:

archivo.write(elemento+"\n")

archivo.close()

def cargarAgenda(self):

archivo = open("agenda.txt","r")

linea = archivo.readline()

if linea:

while linea:

if linea[-1]=='\n':

linea = linea[:-1]

self.lista.append(linea)

linea = archivo.readline()

archivo.close()

def crearContacto(self):

nombre = input("escribe tu nombre: ")

telefono = input("Escribe el teléfono de " + str(nombre) + " : ")

correo = input("Escribe el correo de " + str(nombre) + " : ")

self.lista.append(nombre + "$" + telefono + "$" + correo)

def imprimirContacto(self):

self.lista.sort()

for elemento in self.lista:

arreglo = elemento.split('$')

print ("Nombre: " + arreglo[0] + "\t Teléfono: " + arreglo[1] + "\t Correo: " + arreglo[2])

print ("*******************************")

Page 24: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

24

def buscarContacto(self):

nombre = input("Inserta el nombre a buscar: ")

Noencotrado = True

for elemento in self.lista:

arreglo = elemento.split('$')

if nombre in arreglo[0]:

print ("Nombre: " + arreglo[0] + " Teléfono: " + arreglo[1] + " Correo: " + arreglo[2])

print ("*******************************")

Noencotrado = False

if Noencotrado == True:

print("Contacto no encontrado")

def eliminarContacto(self):

nombre = input("Inserta el nombre a eliminar: ")

Noencontrado = True

for elemento in self.lista:

arreglo = elemento.split('$')

if nombre in arreglo[0]:

self.lista.remove(elemento)

Noencontrado = False

if Noencontrado == True:

print("Contacto no encontrado")

archivo = Archivo()

archivo.iniciarArchivo()

archivo.cargarAgenda()

while True:

os.system('cls')

print("1.- Escribir contacto")

print("2.- Lee contactos")

print("3.- Buscar contacto")

print("4.- Eliminar contacto")

print("5.- salir contacto")

try:

opcion = int(input("Inserte la opción a elegir: "))

except:

print("Opción no valida")

os.system('pause')

continue

if opcion == 1:

archivo.crearContacto()

elif opcion == 2:

archivo.imprimirContacto()

elif opcion == 3:

archivo.buscarContacto()

Page 25: Tutorial de Python orientado a objetos - Bienvenidos a … · 9 Python Poo Estructura de Datos – Lista Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase

25

elif opcion == 4:

archivo.eliminarContacto()

elif opcion == 5:

archivo.escribirArchivo()

break

else:

print("Opción no valida")

os.system('pause')

Podrás observar que en la carpeta que tienes el proyecto se ha creado un archivo de texto

llamada agenda.txt que almacena los datos para que no se pierdan cuando salimos del

programa.