Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y...

17
Repaso/resumen Introducción a la programación Orientada a Objetos 1. Strings 2. Archivos 3. Clases y objetos 4. Herencia 5. Ventanas 6. Dibujos y Gráficos

Transcript of Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y...

Page 1: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Repaso/resumenIntroducción a la programación Orientada a Objetos

1. Strings

2. Archivos

3. Clases y objetos

4. Herencia

5. Ventanas

6. Dibujos y Gráficos

Page 2: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Strings s=”casa”; S=”CASA” #asignación len(s) #4 largo (nº de caracteres) de s s<S #False comparacion s[i:j] #substring entre índices i y j-1 ‘a’ in s #True for c in s: print c #muestra los caracteres de s Métodos x.__add__(y) añade y al final de x s + “do” ‘casado’ x.find(y) índice 1ª aparición (-1 si no) s.find(“as”) 1 x.count(y) cuenta apariciones de y en x s.count(“a”) 2 x.isalpha() True si x es alfabético s.isalpha() True x.isdigit() True si x es numérico s.isdigit() False x.islower() True si x en minúsculas s.islower() True x.isupper() True si x en mayúsculas s.isupper() False x.upper() reemplaza por mayúsculas s.upper() ‘CASA’ x.lower() reemplaza por minúsculas “CASA”.lower() ‘casa’ x.strip() elimina espacios “ a b “.strip() ‘a b’ x.replace(y,z) reemplaza todos los y por z s.replace(‘a’,’’) ‘cs’

Page 3: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

#inverso(“roma”)=“amordef inverso(x): s=“” for c in x: s=c+s return sdef inverso(x): #recursivo if x==“”: return “” return inverso(x[1:])+x[0] #capicua(“reconocer”)=Truedef capicua(x): return x==inverso(x)

#determinar si una frase es capicúafrase=raw_input(“frase?”).replace(“ “,””).lower()if capicua(frase): print “capicua”else: print “no es capicua”

Page 4: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Archivos#grabar líneas con información correcta:#nombre alfabético y nota numérica

#abrir archivos de lectura y escrituraa=open(“notas.txt”,”r”) #para lecturab=open(“notas1.txt”,”w”) #para escritura#leer todas las lineasfor linea in a: #si nombre es alfabético y nota numérica if linea[0:20].replace(“ “,””).isalpha() \ and linea[20:22].replace(“ “,””).isdigit(): #grabar en archivo b.write(linea)#cerrar archivosb.close()a.close

Page 5: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

#promedio de notas y % de aprobadossuma=alumnos=aprobados=0 #asignación “múltiple”a=open(“notas1.txt”) #2º parámetro “r”for linea in a: alumnos += 1 #alumnos=alumnos+1 nota=int(linea[20:22]) #conversión a int suma += nota if nota>=40: aprobados += 1print “promedio”,suma/alumnosprint “% aprobados=“, 100.0*aprobados/alumnos

Page 6: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

#alumnos con mejor notamejorNota=0mejores=“”a=open(“notas1.txt”)for linea in a: #obtener nombre y nota nombre=linea[0:20] nota=int(linea[20:22]) #mantener alumnos con mejor nota if nota>mejorNota: mejorNota=nota mejores=nombre elif nota==mejorNota: mejores += “\n” + nombrea.close()print “mejores alumnos:\n”+mejores

Page 7: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Clases

Diálogo del programaInstante1(HH:MM)?XX:XXInstante2(HH:MM)?XX:XXSuma= HH:MMDiferencia= HH:MMMayor= HH:MM

ProgramaT1=Tiempo(raw_input(“Instante1(HH:MM)?“)) T2=Tiempo(raw_input(“Instante2(HH:MM)?“))print “Suma=“, T1+T2 #T1.__add__(T2)print “Diferencia=“, T1-T2 #T1.__sub__(T2)if T1 > T2: #T1.__gt__(T2) print “Mayor=“,T1 #T1.__str()else: print “Mayor=“,T2

Page 8: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Definición (declaración) de clase Tiempo class Tiempo: def __init__(self,x,y=0): #constructor if type(x)==str: #x es string? i=x.find(":") y=int(x[i+1:])#minutos después de : x=int(x[0:i]) #horas antes de : self.m=y%60 #minutos (entre 0 y 59) self.h=x+y/60 #horas def minutos(self): return 60*self.h + self.m def __str__(self): return str(self.h)+":"+str(self.m) def __gt__(self,x): return self.minutos() > x.minutos() def __add__(self,x): return Tiempo(0,self.minutos()+x.minutos()) def __sub__(self,x): return Tiempo(0,abs(self.minutos()-x.minutos()))

Page 9: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Definición (declaración) de clase Tiempo class Tiempo:

def __init__(self,x,y=0): #constructor if type(x)==str: #x es string?

i=x.find(":"); y=int(x[i+1:]); x=int(x[0:i]) self.m=60*x+y #minutos def minutos(self): return self.m

def __str__(self): return str(self.m/60)+":"+str(self.m%60)

def __gt__(self,x): return self.minutos() > x.minutos()

def __add__(self,x): return Tiempo(0,self.minutos()+x.minutos())

def __sub__(self,x): return Tiempo(0,abs(self.minutos()-x.minutos()))

Page 10: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Herencia class Cuenta:

def __init__(self,x,y): #constructor self.numero=x self.saldo=y def depositar(self,x): self.saldo += x

def girar(self,x): if x>self.saldo: return False self.saldo-=x return True

def consultar(self): return self.saldo

class Cuenta1(Cuenta): def girar(self,x):

self.saldo-=x return True

Page 11: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Programa principal #buscar cuenta en archivo numero=raw_input("Ingrese Nº de cuenta:") a=open("banco.txt") for linea in a: if linea[0:10]==numero: break if linea=="": exit("cuenta no existe") #crear cuenta con o sin sobregiro if linea[10]=="1": c=Cuenta(numero,int(linea[11:])) else: c=Cuenta1(numero,int(linea[11:])) #obtener y realizar la operación op=raw_input("Deposito(D), Giro(G) o Consulta(C)?") if op=="D" or op=="G": monto=input("Monto en $?") if op=="D": c.depositar(monto) else: c.girar(monto) #segun tipo de cuenta print "saldo=",c.consultar()

Page 12: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Datos privados (invisibles fuera de la clase) class Cuenta: def __init__(self,x,y): #constructor self.__numero=x #privada si nombre comienza con _ _ self.__saldo=y def depositar(self,x): self.__saldo += x def girar(self,x): if x<=self.__saldo: self.__saldo-=x return True else: return False def consultar(self): return self.__saldo class Cuenta1(Cuenta):

def girar(self,x): self._Cuenta__saldo-=x #accede a privada de Cuenta return True

Page 13: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Programar juego de adivinanza de un nº con la sgte interfaz

from Tkinter import * def obtenerNumero(x): #para Entry n=int(numero.get()) if X>n: respuesta.config(text="X>"+str(n)) elif X<n: respuesta.config(text="X<"+str(n)) else: respuesta.config(text="Felicitaciones X="+str(n)) def rendir(): #para botón respuesta.config(text="X="+str(X))

Page 14: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

import randomX=random.randint(1,100)ventana = Tk()#marco para agrupar pregunta y numeromarco=Frame(ventana)marco.pack()pregunta=Label(marco,text="X(1-100)?")pregunta.pack(side=LEFT)numero=Entry(marco)numero.pack()numero.bind("<Return>",obtenerNumero)#respuesta y botón en ventanarespuesta=Label(ventana)respuesta.pack()b=Button(ventana,text="me rindo",command=rendir)b.pack()ventana.mainloop()

Page 15: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Dibujos

from Tkinter import * ventana=Tk() W=200; H=200 #ancho y alto de canvas cv=Canvas(ventana,width=W,height=H) cv.pack() cv.create_rectangle(W/4,W/4,3*W/4,3*W/4) cv.create_oval(W/4,W/4,3*W/4,3*W/4,fill="black") cv.create_rectangle(0,0,W,H) cv.create_oval(0,0,W,H) ventana.mainloop()

Page 16: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

Graficar funciones def graficar(f,n,a,b,cv,W,H):

Ejemplo: seno con 20 ptos entre 0 y 2∏ en canvas de 200x100 pixeles

graficar(math.sin,20,0,2*math.pi,cv,200,100) Ejemplo: x2 con 20 ptos entre -100 y 100 en canvas de 200x200 pixeles

def cuadrado(x): return x*x graficar(cuadrado,20,-100,100,cv,200,200)

Page 17: Repaso/resumen Introducción a la programación Orientada a Objetos 1.Strings 2.Archivos 3.Clases y objetos 4.Herencia 5.Ventanas 6.Dibujos y Gráficos.

T=Tortuga(W/2,W/2,cv)#tortuga al medio#repetir N vecesi=1while i<=N: i=i+1 #avanzar tortuga en L(dibujando linea) t.avanzar(L) #girar tortuga t.girar(360.0/N)

Dibujos con Tortuga