Módulos - Universidad de Costa Rica

Anuncio
100
Excelente.
Universidad de Costa Rica | Facultad de Ingeniería
Escuela de Ingeniería Eléctrica | Programación Bajo Plataformas Abiertas
Modulo Python | Laboratorio #5
Erick Carvajal Barboza | B01395
Módulos
Cree un módulo que implemente una clase que permita representar matrices n × m. La clase
debe implementar métodos para establecer y obtener el valor de una posición determinada.
Además deben implementarse métodos que permitan sumar, restar y comparar matrices usando
los operadores estándar de Python. En otro archivo, escriba un pequeño programa de prueba que
use la clase Matriz creada en el punto anterior
Para implementar el programa deseado, se utilizaron 2 módulos, el primero, consiste en una librería en
la cual se crea un objeto tipo matriz y se definen todas las funciones que se pueden llevar a cabo con
esta clase de objetos, el segundo consiste en un programa para probarlo. Estos se muestran a
continuación.
Libreria de Matrices
#!/usr/bin/python
# ­*­ coding: latin­1 ­*­
#La línea 'shebang', le indica a la consola donde se encuentra el intérprete de python. La segunda línea declara la codificación del código fuente de python, como esto se podrán utilizar caracteres como tildes, etc.
import sys
#Importa la librería 'sys' la cual permite utilizar la lista de entradas desde consola
class Matriz(object):
#Este metodo es el constructor de objetos tipo Matriz, para que se pueda construir debe ser, de mayor tamaño a 1x1, y de un numero entero de filas. Si esto sucede se definen los atributos filas, columnas y Matriz la cual se rellena con ceros inicialmente. De lo contrario se imprime un error
def __init__(self, filas, columnas):
if filas > 1 and columnas > 1 and filas % 1 == 0 and columnas % 1 == 0:
self.columnas = columnas
self.filas = filas
self.matriz = [[0 for columna in range(columnas)] for fila in range(filas)]
else:
print "Tamano no valido"
sys.exit(1)
#Este metodo define las operaciones suma y permite que se llame a las misma mediante el uso de "+", este método devuelve una MatrizSuma la cual contiene la suma término a término de 2 matrices. Si las matrices no tienen el mismo tamaño se genera un error
def __add__(self, matriz2):
MatrizSuma = Matriz(self.filas, self.columnas)
if self.filas == matriz2.filas and self.columnas == matriz2.columnas:
for fila in range(self.filas):
for columna in range(self.columnas):
MatrizSuma.matriz[fila][columna] = self.matriz[fila]
[columna] + matriz2.matriz[fila][columna]
return MatrizSuma
else:
print "Matrices de distintos tamanos, no se pueden sumar"
sys.exit(1)
#Este metodo define las operaciones resta y permite que se llame a las misma mediante el uso de "­", este método devuelve una MatrizResta la cual contiene la resta término a término de 2 matrices. Si las matrices no tienen el mismo tamaño se genera un error
def __sub__(self, matriz2):
MatrizResta = Matriz(self.filas, self.columnas)
if self.filas == matriz2.filas and self.columnas == matriz2.columnas:
for fila in range(self.filas):
for columna in range(self.columnas):
MatrizResta.matriz[fila][columna] = self.matriz[fila]
[columna] ­ matriz2.matriz[fila][columna]
return MatrizResta
else:
print "Matrices de distintos tamanos, no se pueden restar"
sys.exit(1)
#Este metodo devuelve un booleano el cual dice si las matrices son iguales término a término, se puede llamar utilizando "=="
def __eq__(self, matriz2):
Iguales = True
if self.filas == matriz2.filas and self.columnas == matriz2.columnas:
for fila in range(self.filas):
for columna in range(self.columnas):
if not self.matriz[fila][columna] == matriz2.matriz[fila]
[columna]:
Iguales = False
return Iguales
else:
print "Matrices de distintos tamanos, no se pueden comparar"
#Este metodo devuelve un string el cual contiene las filas y columnas de la matriz en forma de matriz, y no como números separados, se puede llamar utilizando "print"
def __str__(self):
a = '\n'
for fila in range(self.filas):
for columna in range(self.columnas):
a += "%d " %(self.matriz[fila][columna])
a += "\n"
return a
#Este metodo agrega un valor a una posicion de la matriz determinada por el usuario, se puede llamar utilizando "AgregarDato(fila, columna, valor a ingresar)", si no es una posicion valida o lo que se desea ingresar no es un numero devuelve un error
def AgregarDato(self, posfila, poscolumna, valor):
if posfila >= 0 and poscolumna >= 0 and posfila < self.filas and poscolumna < self.columnas and (valor ­ valor % 1) % 1 == 0:
self.matriz[posfila][poscolumna] = valor
else:
print "No se puede guardar"
Modulo de Prueba
#!/usr/bin/python
# ­*­ coding: latin­1 ­*­
#La línea 'shebang', le indica a la consola donde se encuentra el intérprete de python. La segunda línea declara la codificación del código fuente de python, como esto se podrán utilizar caracteres como tildes, etc.
#Importa la librería 'sys' la cual permite utilizar la lista de entradas desde consola, y se importa la libreria creada "matriz"
import sys, matriz
#Se crea un objeto Matriz llamado m1 de tamaño 3x3
m1 = matriz.Matriz(3, 3)
#Se crea una matriz de la forma:
# 1 0 0
# 0 1 0
# 0 0 1
m1.AgregarDato(0, 0, 1)
m1.AgregarDato(1, 1, 1)
m1.AgregarDato(2, 2, 1)
#Se imprime la matriz anterior
print m1
#Se crea un objeto Matriz llamado m1 de tamaño 3x3
m2 = matriz.Matriz(3, 3)
#Se crea una matriz de la forma:
# 2 0 0
# 0 2 0
# 0 0 2
m2.AgregarDato(0, 0, 2)
m2.AgregarDato(1, 1, 2)
m2.AgregarDato(2, 2, 2)
#Se imprime la matriz anterior
print m2
#Se crea un objeto Matriz llamado msuma el cual es la suma de m1 y m2
msuma = m1 + m2
print msuma
#Se crea un objeto Matriz llamado mresta el cual es la resta de m1 y m2
mresta = m1 ­ m2
print mresta
#Se comprueba si las matrices son iguales
if m1 == m2:
print "Son Iguales"
else:
print "Son Distintas"
Descargar