# -*- coding: utf-8 -*- import estructura estructura.crear("fraccion","numerador denominador") #sumaF: fraccion fraccion -> fraccion #suma fracciones #ej: sumF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=31, denominador=20) def sumaF(a,b): num = b.denominador*a.numerador + a.denominador*b.numerador den = b.denominador*a.denominador return fraccion(num,den) #restaF: fraccion fraccion -> fraccion #resta fracciones #ej: restaF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=-1, denominador=20) def restaF(a,b): num = b.denominador*a.numerador - a.denominador*b.numerador den = b.denominador*a.denominador return fraccion(num,den) #mulF: fraccion fraccion -> fraccion #multiplica fracciones #ej: mulF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=12, denominador=20) def mulF(a,b): num=a.numerador*b.numerador den=a.denominador*b.denominador return fraccion(num,den) #divF: fraccion fraccion -> fraccion #divide fracciones #ej: divF(fraccion(3,4),fraccion(4,5)) = fraccion(numerador=15, denominador=16)
En efecto, podemos representar una _fracción_ como una estructura formada por dos atributos: un _numerador_ y un _denominador_. ```python import estructura estructura.crear("nombre", "atributo1 atributo2 ... atributoN") ``` ### Definiendo fracciones como una estructura """ import estructura estructura.crear("fraccion", "numerador denominador") """Fijarse que la función ```estructura.crear``` crea un _molde_ para crear una o más fracciones.""" a = fraccion(1, 2) # crea la primera fracción y la guarda en a a # consultamos para ver que cosa es 'a' print(a) # que sucede si intentamos mostrar a en pantalla? a.numerador # vemos el numerador de 'a' a.denominador # vemos el denominador de 'a' b = a # se pueden copiar print(a.numerador) print(a.denominador)
# -*- coding: utf-8 -*- """ Created on Mon Sep 30 19:41:34 2019 @author: Diego Campanini """ #============================= C2 2015-1 P1 ================================== #%% import estructura from lista import * #%% crear estructura que representa a un polinomio p(x)=5x^3 + 3x estructura.crear('coeficiente', 'valor potencia') P = lista(coeficiente(5, 3), lista(coeficiente(3, 1), None)) #%% funcion para evaluar un polinomio, por ej p(10)=5*10^3 + 3*10 def evaluar(p, x): if p == None: return 0 else: coef = cabeza(p).valor exponente = cabeza(p).potencia unaParte = coef * (x**exponente) return unaParte + evaluar(cola(p), x) print print 'p(10)=5*10^3 + 3*10 =', evaluar(P, 10) #%% funcion para evaluar p(x) para una lista de valores x
import estructura # -*- coding: cp1252 -*- estructura.crear("Fecha", "dia mes ano") estructura.crear("Lista", "valor siguiente") #esLista(L): Lista(any)->bool #dice si L es una Lista #ej: esLista(Lista(4,None))==True def esLista(L): if type(L) == Lista or L == None: return True return False assert esLista(Lista(4, None)) #cabeza:Lista(any)->any #entrega el valor de una lista #ej:cabeza(Lista(4,None))==4 def cabeza(L): assert esLista(L) return L.valor assert cabeza(Lista(4, None)) == 4 #cola:Lista(any)->Lista(any) #entrega el siguiente valor de una lsita
import estructura # Diseno de la estructura # lista : valor (any = cualquier tipo) siguiente (lista) estructura.crear("lista", "valor siguiente") # identificador para listas vacias listaVacia = None # crearLista: any lista -> lista # devuelve una lista cuya cabeza es valor # y la cola es resto def crearLista(valor, resto): return lista(valor, resto) # cabeza: lista -> any # devuelve la cabeza de una lista (un valor) def cabeza(lista): return lista.valor # cola: lista -> lista # devuelve la cola de una lista (una lista) def cola(lista): return lista.siguiente # vacia: lista -> bool # devuelve True si la lista esta vacia
import estructura import random #Arbol Binario #AB: valor(any), izq(AB), der(AB) estructura.crear("AB", "valor izq der") estructura.crear("Lista", "valor siguiente") def rand_list(contador=0): if contador == 15: return None return Lista(random.randint(1, 100), rand_list(contador + 1)) def insertar(x, A): assert A == None or type(A) == AB if A == None: return AB(x, None, None) v = A.valor if x == v: return A if x < v: return AB(v, insertar(x, A.izq), A.der) if x > v: return AB(v, A.izq, insertar(x, A.der)) return def list_to_abb(L, ab): if L == None: return ab
#Distancia puntos 3D # calculoDstancia: Punto3D Punto3D -> Float # Calcula la distancia entre 2 puntos 3D # Ejemplo: calculaDistancia(Punto3D(0,0,0), Punto3D(1,1,1)) # Devuelve: 1.73205080757 import estructura from modulos import * from cerca import * estructura.crear("punto3D", "coordenadaX coordenadaY coordenadaZ") coordenadaXpuntoA = input("Punto A, coordenada x?: ") coordenadaYpuntoA = input("Punto A, coordenada y?: ") coordenadaZpuntoA = input("Punto A, coordenada z?: ") coordenadaXpuntoB = input("Punto B, coordenada x?: ") coordenadaYpuntoB = input("Punto B, coordenada y?: ") coordenadaZpuntoB = input("Punto B, coordenada z?: ") puntoA = punto3D(coordenadaXpuntoA, coordenadaYpuntoA, coordenadaZpuntoA) puntoB = punto3D(coordenadaXpuntoB, coordenadaYpuntoB, coordenadaZpuntoB) print "La distancia entre A y B es: " + str(calculoDistancia(puntoA, puntoB)) # Test 1 usando la funcion cerca epsilon = 0.0001 puntoA = punto3D(0, 0, 0) puntoB = punto3D(1, 1, 1) assert cerca(calculoDistancia(puntoA, puntoB), 1.73205080757, epsilon)
Original file is located at https://colab.research.google.com/drive/1N5bBYn4UnkxEz_bd2OImYXH_CJa4e2Ye #Auxiliar 8 - Mutación y Aliasing ### P1. ONU La ONU requiere su ayuda manteniendo un registro actualizado de los mandatarios de todos los países del mundo. Para esto desarrollaremos una función que permita cambiar el nombre del presidente de un país. ### A) Cree la estructura **no mutable** llamada 'Pais' que tenga los atributos nombre, continente y presidente_actual. """ import estructura # Pais: nombre(str) continente(str) nombre_presidente(str) estructura.crear("Pais", "nombre continente nombre_presidente") """### B) Cree la estructura **mutable** PaisMut con los atributos nombre, continente y presidente_actual. """ # PaisMut: nombre(string) continente(string) nombre_presidente(str) estructura.mutable("PaisMut", "nombre continente nombre_presidente") """### C) Defina la función cambioDeMando, que recibe un **Pais** y el nombre de un presidente, y retorne un Pais con el nuevo nombre del presidente. """ #cambioDeMando: Pais, str -> Pais #Recibe un Pais (pais) y el nombre del nuevo presidente (n), # y retorna un Pais que cambia el nombre del presidente de pais por el dado como parametro n. #Ej: cambioDeMando(Pais("EEUU", "America", "Donald Trump "), "Joe Biden") entrega Pais("EEUU", "America", "Joe Biden")
import estructura estructura.crear('tiempo', 'horas minutos') [t1, t2, t3, t4] = [tiempo(23, 59), tiempo(0, 0), tiempo(12, 0), tiempo(0, 1)] def aString(tiempo): return str(tiempo.horas) + ':' + str(tiempo.minutos) #Casos de prueba assert aString(t1) == '23:59' assert aString(t2) == '0:0' assert aString(t3) == '12:0' assert aString(t4) == '0:1' def enMinutos(tiempo): return tiempo.horas * 60 + tiempo.minutos #Casos de prueba assert enMinutos(t1) == 1439 assert enMinutos(t2) == 0 assert enMinutos(t3) == 720 assert enMinutos(t4) == 1 def sumar(tiempo1, tiempo2): if tiempo1.minutos + tiempo2.minutos >= 60:
# -*- coding: utf-8 -*- """ Created on Sat Sep 21 19:39:47 2019 @author: Diego Campanini """ # c2 2018-2 p2 #%% import estructura from lista import * #%% primero se crea la estructura y el ABB con los que se va a trabajar estructura.crear('libro', 'codigo titulo rutLector') a = libro(10, 'Python', '12345678-K' ) #ejemplo1: libro 'Python' de código 10 prestado a RUT '12345678-K' b = libro(20, 'Python 3.0', '') #ejemplo2: libro 'Python 3.0' de código 20 no está prestado c = libro(30, 'Java', '87654321-0' ) #ejemplo3: libro 'Java' de código 30 prestado a RUT '87654321-0' estructura.crear('arbol', 'valor izq der') #libros de biblioteca en arbol binario de búsqueda según valores del código de los libros bib = arbol(b, arbol(a, None, None), arbol(c, None, None)) #None es equivalente a arbolVacio # crear segundo arbol d = libro(5, 'c++', '') e = libro(12, 'hi python', '') bib2 = arbol(b, arbol(a, arbol(d, None, None), arbol(e, None, None)), arbol(c, None, None))
import estructura #Tiempo: horas(int) minutos(int) estructura.crear('Tiempo', 'horas minutos') #def esTiempo: Tiempo -> Bool #determina si un valor esta escrito en Tiempo #ej: esTiempo(Tiempo(2,20)) -> True def esTiempo(x): if type(x) == Tiempo: h=x.horas m=x.minutos return 0<=h<=24 and 0<=m<=59 else: return False assert esTiempo(Tiempo(2,20))==True #def aString: Tiempo -> str #da el string de un tiempo de la forma HH:MM #ej: aString(Tiempo(2,20))-> 2:20 def aString(x): assert esTiempo(x) return str(x.horas)+':'+str(x.minutos) assert aString(Tiempo(2,20))=='2:20' #def: enMinutos: Tiempo -> int #da el tiempo solo en minutos #ej: enMinutos(Tiempo(1,30)) -> 90 def enMinutos(x): assert esTiempo(x) return x.horas*60+x.minutos assert enMinutos(Tiempo(1,30))==90
import estructura #lista: valor(any) siguiente(lista) estructura.crear('listas', 'valor siguiente') #cabeza: lista -> any #primer valor de de una lista #ej: cabeza(lista("a",lista("b",None)))->"a" def cabeza(L): assert type(L) == lista returl.valor
import estructura import math estructura.crear('fraccion', 'numerador denominador') def simplifica_fraccion(f): """Simplifica la fraccion _f_.""" g = math.gcd(f.numerador, f.denominador) return fraccion(f.numerador / g, f.denominador / g) assert simplifica_fraccion(fraccion(4, 8)) == fraccion(1, 2) def suma_fracciones(f1, f2): """Suma dos fracciones definidas usando el modulo _estructura_.""" assert type(f1) == fraccion and type(f2) == fraccion assert f1.denominador != 0 and f2.denominador != 0 num = f1.numerador * f2.denominador + f1.denominador * f2.numerador den = f1.denominador * f2.denominador sum = fraccion(num, den) sumSimplificado = simplifica_fraccion(sum) return sumSimplificado f1 = fraccion(1, 2) f2 = fraccion(3, 4) assert suma_fracciones(f1, f2) == fraccion(5, 4)
# -*- coding: utf-8 -*- """ Created on Wed Sep 25 18:23:22 2019 @author: Diego Campanini """ #============================= C2 2017-2 P2 ================================== #%% import estructura from lista import * #%% crear estruturas que se almacenaran en un arbol #alumno: nombre(str) sexo(str) estructura.crear('alumno', 'nombre sexo') #arbol: valor(alumno) izq(arbol) der(arbol) estructura.crear('arbol', 'valor izq der') # crear arbol abb=arbol(alumno('jose','M'),\ arbol(alumno('gabi','F'),arbol(alumno('ana','F'),None,None),None),\ arbol(alumno('rosa','F'),None,None)) #%% ===== P2 (a) ======== # my solution def mybuscar(name, abb, n=0): if abb == None: return n + 1 # ojo aqui yo habia puesto solo 'n', pero para que # coincida con lo del profe es n+1
# Modulo para ser implementado en tarea2.py import estructura from lista import * from abstraccion import * estructura.crear("resultadoMesa", "circunscripcion mesa apruebo rechazo") # buscaMesa: lista(resultadoMesa) str num -> resultadoMesa # Busca una mesa dentro de una lista de mesas # Ejemplo: siendo L una lista de mesas, # si buscamos buscaMesa(L,"San Miguel",2) debe entregar resultadoMesa("San Miguel",2,200,60) def buscaMesa(L, circu, num_mesa): assert type(L) == lista or L == listaVacia assert type(circu) == str assert type(num_mesa) == int if vacia(L): return None else: if cabeza(L).circunscripcion == circu and cabeza(L).mesa == num_mesa: return cabeza(L) else: return buscaMesa(cola(L), circu, num_mesa) # Tests r1 = resultadoMesa("Santiago", 3, 100, 20) r2 = resultadoMesa("San Miguel", 2, 200, 60) L = crearLista(r1, crearLista(r2, listaVacia)) assert buscaMesa(L, "Santiago", 3) == resultadoMesa("Santiago", 3, 100, 20)
# -*- coding: utf-8 -*- """ Created on Fri Oct 25 12:45:36 2019 @author: Diego Campanini """ #%% while + cartas + list() import estructura estructura.crear('carta','calle ciudad pais') cartas = list( ) c1 = carta('Lira 123', 'Santiago', 'Chile') cartas = cartas + [ c1 ] c2 = carta('Abaroa 2128', 'Calama', 'Chile') cartas = cartas + [ c2 ] c3 = carta('Vespucio 443', 'Arica', 'Chile') cartas = cartas + [ c3 ] #%% buscar una ciudad en la list de cartas y retornar True si esta o False si no # my version def my_estaLaCiudad(cartas,ciudad): for i in range(len(cartas)): if cartas[i].ciudad==ciudad: return True return False print print 'esta la ciudad: ',my_estaLaCiudad(cartas,'lama')