SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
Fundamentos de Python con Orientación a Objetos y Basado en Problemas 
Por Carlos Arturo Castro Castro 
1. El Problema 
PROBLEMA EQUIPOS DE FUTBOL 
Problema diseñado por Carlos Arturo Castro Castro 
Temas: Arreglos Unidimensionales (vectores), Arreglos Bidimensionales (matrices). 
Se tiene un arreglo unidimensional (vector) con los nombres de N equipos de futbol. Un jemplo podría ser (ejemplo 6 equipos-> N=6): 
#1 
#2 
#3 
#4 
#5 
#6 
REAL 
LANÚS 
COLONIA 
LITEX 
BETIS 
NEC 
Se tiene una tabla (matriz) con los puntajes resultado del enfrentamiento entre N equipos de futbol. Cada celda (posición fila,columna) tiene un valor de 0 (cero), 3 (tres) ó 1 (uno). 
La primera columna tiene los puntajes resultado del enfrentamiento entre el equipo #1 con los demás equipos. La segunda columna tiene los puntajes resultado del enfrentamiento entre el equipo #2 con los demás equipos y así para las demás columnas. Los datos que están sobre la diagonal principal son todos cero (0) debido a que un equipo no se enfrenta con el mismo. Es decir en la celda en posición (2,1) (fila 2, columna 1) se encuentra el puntaje resultado del enfrentamiento entre el equipo #1 y el equipo #2. En la celda en posición (3,1) (fila 3, columna 1) se encuentra el puntaje resultado del enfrentamiento entre el equipo #1 y el equipo #3. En la celda en posición (i,j) (fila i, columna j) se encuentra el puntaje resultado del enfrentamiento entre el equipo #j y el equipo #i.Ver la tabla ejemplo a continuación (N=6 equipos): 
#1 
#2 
#3 
#4 
#5 
#6 
REAL 
LANÚS 
COLONIA 
LITEX 
BETIS 
NEC 
REAL 
0 
0 
1 
1 
1 
3 
LANÚS 
3 
0 
3 
0 
3 
3 
COLONIA 
1 
0 
0 
3 
3 
3 
LITEX 
1 
3 
0 
0 
0 
0 
BETIS 
1 
0 
0 
3 
0 
0 
NEC 
0 
0 
0 
3 
3 
0 
Se requiere un vector con los puntajes totales. Es decir un vector en el cual la primera posición
corresponde al puntaje total del equipo #1. Se obtiene sumando los puntajes de la columna #1 de la matriz. En la segunda posición se encuentra el puntaje total del equipo #2. En la posición j, se encuentra el puntaje total del equipo #j (Se obtiene sumando los puntajes de la columna #j de la matriz):
#1 
#2 
#3 
#4 
#5 
#6 
REAL 
LANÚS 
COLONIA 
LITEX 
BETIS 
NEC 
REAL 
0 
0 
1 
1 
1 
3 
LANÚS 
3 
0 
3 
0 
3 
3 
COLONIA 
1 
0 
0 
3 
3 
3 
LITEX 
1 
3 
0 
0 
0 
0 
BETIS 
1 
0 
0 
3 
0 
0 
NEC 
0 
0 
0 
3 
3 
0 
6 
3 
4 
10 
10 
9 
Requerimientos: 
Vector de nombres 
Matriz de puntajes 
Vector de puntajes totales
 Llenar el vector de nombres, digitando los datos, para un número N de equipos. N también debe ser digitado. 
 Llenar la matriz de puntajes, digitando solo los datos que se encuentran por debajo de la diagonal principal, de modo que los que están por encima de la diagonal principal se generen automáticamente. Es decir si el puntaje del equipo #j es 3, en la posición i,j de la matriz se guarda 3 y la en posición j,i de la matriz se guarda 0 (cero). si el puntaje del equipo #j es 0, en la posición i,j de la matriz se guarda 0 y la en posición j,i de la matriz se guarda 3. si el puntaje del equipo #j es 1, en la posición i,j de la matriz se guarda 1 y la en posición j,i de la matriz se guarda 1. Se debe controlar que el puntaje digitado en la matriz sea cero, uno ó tres. 
 Mostrar los nombres de los equipos ordenados por puntajes totales. Se debe mostrar en primer lugar el nombre del equipo con mayor puntaje (incluyendo su puntaje), en segundo lugar el equipo con el puntaje que le sigue (incluyendo su puntaje), y así sucesivamente. Se debe ordenar el vector de puntajes totales ascendentemente pero los resultados se muestran de mayor a menor. Tenga en cuenta que el vector de nombres y el vector de puntajes totales son paralelos. En este caso no considerar diferencia de goles. 
 Mostrar la media aritm (promedio), desviación estándar, mediana y moda de los datos del vector de puntajes totales. 
Para el ejemplo planteado N=6, debe mostrar: 
LITEX 
BETIS 
NEC 
REAL 
COLONIA 
LANÚS 
10 
10 
9 
6 
4 
3 
Media 
7,00 
DesvEst. 
3,09838668 
Mediana 
7,50 
Moda 
10
2. La Herramientas 
Intérprete de Python: Versión 2.7.8 
https://www.python.org/downloads/
Diseñador de Ambiente gráfico para python 2.7 
PYQT (Windows 32 bit installer) 
http://www.riverbankcomputing.co.uk/software/pyqt/download
IDE para python 2.7 
PyScripter-v2.5.3 (32 bit) 
https://code.google.com/p/pyscripter/downloads/list
3. Instalar Herramientas 
Instalar Python 2.7
Finalizar 
Instalar PyQt4-4.11.3-gpl-Py2.7-Qt4.8.6-x32
Finalizar 
Instalar PyScripter-v2.5.3-Setup
Finalizar 
4. Definir la arquitectura del software
Se definió trabajar con dos paquetes de clases. El paquete Vista con los métodos que implementan la interacción del programa con el usuario. Y el paquete Control, con los métodos que poseen cálculos reutilizables e independientes de la forma como se ingresan los datos y/o se muestran los resultados. 
4.1 Crear una carpeta llamada proyectoEquipos 
4.2 Paquete Control: 
Se crea un archivo en blanco llamado __init__.py y se guarda en una carpeta llamada control
Se crea un módulo con la clase Matriz y métodos reutilizables
# -*- coding: utf-8 -*- #La anterior Línea permite usar caracteres utf8 (tildes, eñes entre otros) #------------------------------------------------------------------------------- # Name: Matriz # Author: Carlos Arturo # Created: 29/11/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #------------------------------------------------------------------------------- class Matriz: #atributos o propiedades mat=[] #se declara una arreglo numFilas=0 #se declara un entero numColumnas=0 #Métodos #Método para llenar matriz (Es decir asignar los datos en la matriz que se pasa como parámetro) def llenarMatriz(self,mat): self.mat=mat def obtenerNumFilas(self): self.numFilas=len(self.mat) return self.numFilas def obtenerNumColumnas(self):
self.numColumnas=len(self.mat[0]) return self.numColumnas #método para retornar un vector en el que se obtiene la suma de cada columna def obtenerSumaColumnas(self): sum=0 vec = [] nc=self.obtenerNumColumnas() #ciclo para. Inicializa el vector con nc ceros for i in range(nc): vec.append(0) #ciclos para anidados. Suma cada columna de la matriz y la lleva a un vector for j in range(self.obtenerNumColumnas()): sum=0 for i in range(self.obtenerNumFilas()): sum=sum+self.mat[i][j] vec[j]=sum return vec 
Se crea un módulo con la clase Vector y métodos reutilizables 
# -*- coding: utf-8 -*- #-------------------------------------------------------------------------------
# Name: Vector # Author: Carlos Arturo # Created: 29/11/2014 # Copyright: (c) Carlos Arturo 2014 #------------------------------------------------------------------------------- #ver https://docs.python.org/2/library/functions.html import math class Vector: #atributos vec=[] def __init__(self,vec): #método para inicilaizar atributos self.vec=vec def obtenerNumElementos(self): return len(self.vec) def obtenerMedia(self): return float(sum(self.vec))/len(self.vec) #algoritmo tradicional de la media def obtenerMedia1(self): Acum=0 for i in range(len(self.vec)): Acum=Acum+self.vec[i] media=float(Acum)/self.obtenerNumElementos() #tambien media= media=float(Acum)/len(self.vec) return media def ordenarVectorAsc(self): self.vec.sort() return self.vec def ordenarVectorDesc(self): self.vec.sort() self.vec.reverse() return self.vec def ordenarVectorBurbuja(self): n=len(self.vec) for i in range(n-1): for j in range(i+1,n): if self.vec[i] > self.vec[j]: aux=self.vec[i] self.vec[i]=self.vec[j] self.vec[j]=aux return self.vec def obtenerMediana(self): self.vec.sort() n = len(self.vec) if len(self.vec) % 2 == 0: #si n es par
mediana = (self.vec[n/2-1]+ self.vec[n/2] )/2.0 #al dividirlo por 2.0 lo convierte a float else: mediana =self.vec[n/2] return mediana def obtenerModa1(self): n=len(self.vec) moda=self.vec[1] contModa=1 resultado=[contModa,moda] for i in range(n-1): cont=1 for j in range(i+1,n): if self.vec[i]==self.vec[j]: cont=cont+1 if cont >= contModa: contModa=cont moda=self.vec[i] resultado=[contModa,moda] if resultado[0]==1: moda=None else: moda=resultado[1]#aunque tenga varias modas. solo devuelve 1 return moda def obtenerVectorModas(self): n=len(self.vec) vecModas=[] for i in range(n): cont=1 for j in range(i+1,n): if self.vec[i]==self.vec[j]: cont=cont+1 #cuenta el número de veces que vec[i] se necuentra en el vector vecModas.append(cont) self.ordenarVectoresParalelos(0,vecModas,self.vec) return vecModas def obtenerDesviacionEstandarMuestral(self): media=self.obtenerMedia() n=len(self.vec) sumatoria=0.0 for i in range(n): sumatoria=sumatoria+(media-self.vec[i])**2 desVest = math.sqrt((sumatoria)/(n-1)) return desVest
def ordenarVectoresParalelos(self,fila,*parametros): mat=list(parametros) nfil=len(mat) ncol=len(mat[0]) if fila >= nfil: fila=nfil-1 elif fila < 0: fila=0 aux=[] #aux es un vector para intercambiar columnas for i in range(nfil): aux.append(None) for i in range(ncol-1): for j in range(i+1,ncol): if mat[fila][i] < mat[fila][j]: for k in range(nfil): aux[k]=mat[k][i] for k in range(nfil): mat[k][i]=mat[k][j] for k in range(nfil): mat[k][j]=aux[k] return mat 
4.3 Paquete Vista: 
Se crea un archivo en blanco llamado __init__.py y se guarda en una carpeta llamada vista
Se crea un módulo llamado pryEquiposConsola.py y se guarda en la carpeta vista 
Se importan las clases del paquete control 
Se ingresan los datos por consola a un Vector de nombres de equipos y a una matriz de puntajes. 
Se Obtienen la medidas estadísticas invocando a los métodos correspondientes
# -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: pryEquiposConsola # Purpose: # # Author: Carlos Arturo # # Created: 30/11/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #------------------------------------------------------------------------------- def main(): pass if __name__ == '__main__': main() from control.Matriz import * from control.Vector import * #vector de nombres vecNombres=[] continuar=True i=1 while (continuar == True): try: #Control de Excepciones nombreEquipo= raw_input("Ingrese Nombre del equipo # " + str(i)) i=i+1 vecNombres.append(nombreEquipo) except KeyboardInterrupt: continuar=False #Matriz de Puntajes matPuntajes=[] n= len(vecNombres) for i in range(n): matPuntajes.append( [0] * n ) #n filas for j in range(n): i=0 while i < n: #matPuntajes[i][j] = int(raw_input('Dame el componente (%i,%i): ' % (i, j))) if i>j: #por debajo de la diagonal principal matPuntajes[i][j] = int(input(" Puntaje del equipo " + vecNombres[j] + " al enfrentarse con el equipo " + vecNombres[i] + " :")) if matPuntajes[i][j]==3:
matPuntajes[j][i]=0; else: if matPuntajes[i][j]==0: matPuntajes[j][i]=3; else: if matPuntajes[i][j]==1: matPuntajes[j][i]=1; else: print("Debe ingresar 1, 3 o 0") i=i-1 i=i+1 #contador para el mientras #print matPuntajes for i in range(n): print matPuntajes[i] #crear un objeto de la clase Matriz objMatriz = Matriz() objMatriz.llenarMatriz(matPuntajes) #obtner el Vector de puntajes totales vectPunajesTolates=[] vectPunajesTolates = objMatriz.obtenerSumaColumnas() vectPunajesTolates1 = objMatriz.obtenerSumaColumnas() print '____________' print vectPunajesTolates #Crear un objeto de la clase Vector objVector = Vector(vectPunajesTolates) #Obtener Medidas estadísticas media = objVector.obtenerMedia() mediana = objVector.obtenerMediana() moda = objVector.obtenerModa1() desviacionEstandar = objVector.obtenerDesviacionEstandarMuestral() print 'Media =' + str(media) print 'mediana =' + str(mediana) print 'moda =' + str(moda) print 'desviación Estándar =' + str(desviacionEstandar) print '____________' print vectPunajesTolates print vectPunajesTolates1 print '____________'
#Ordenar el vector de Puntajes totales vectoresParalelos= objVector.ordenarVectoresParalelos(0,vectPunajesTolates1,vecNombres) print '____________' print vectoresParalelos print '____________' print vectoresParalelos[1] #nombres de los equipos print vectoresParalelos[0] #puntajes totales de los equipos 
Puede usarse la función random.randint(1,3), para generar un aleatorio entero entre 1 y 3 y simular los puntajes ingresados por un usuario 
Para esto se requiere importar el módulo random. 
Se creó un nuevo proyecto denominado: pryEquiposConsolaRandom.py 
# -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: pryEquiposConsola # Purpose: # # Author: Carlos Arturo # # Created: 30/11/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #------------------------------------------------------------------------------- def main(): pass if __name__ == '__main__':
main() from control.Matriz import * from control.Vector import * import random #vector de nombres vecNombres=[] continuar=True i=1 while (continuar == True): try: #Control de Excepciones nombreEquipo= raw_input("Ingrese Nombre del equipo # " + str(i)) i=i+1 vecNombres.append(nombreEquipo) except KeyboardInterrupt: continuar=False #Matriz de Puntajes matPuntajes=[] n= len(vecNombres) random.seed() #inicia generador de n{umeros aleatorios for i in range(n): matPuntajes.append( [0] * n ) #n filas for j in range(n): i=0 while i < n: #matPuntajes[i][j] = int(raw_input('Dame el componente (%i,%i): ' % (i, j))) if i>j: #por debajo de la diagonal principal #matPuntajes[i][j] = int(input(" Puntaje del equipo " + vecNombres[j] + " al enfrentarse con el equipo " + vecNombres[i] + " :")) matPuntajes[i][j]= random.randint(1,3) #aleatorio entre 1 y 3 if matPuntajes[i][j]==3: matPuntajes[j][i]=0; else: if matPuntajes[i][j]==0: matPuntajes[j][i]=3; else: if matPuntajes[i][j]==1: matPuntajes[j][i]=1; else: print("Debe ingresar 1, 3 o 0") i=i-1 i=i+1 #contador para el mientras #print matPuntajes for i in range(n): print matPuntajes[i]
#crear un objeto de la clase Matriz objMatriz = Matriz() objMatriz.llenarMatriz(matPuntajes) #obtner el Vector de puntajes totales vectPunajesTolates=[] vectPunajesTolates = objMatriz.obtenerSumaColumnas() vectPunajesTolates1 = objMatriz.obtenerSumaColumnas() print '____________' print vectPunajesTolates #Crear un objeto de la clase Vector objVector = Vector(vectPunajesTolates) #Obtener Medidas estadísticas media = objVector.obtenerMedia() mediana = objVector.obtenerMediana() moda = objVector.obtenerModa1() desviacionEstandar = objVector.obtenerDesviacionEstandarMuestral() print 'Media =' + str(media) print 'mediana =' + str(mediana) print 'moda =' + str(moda) print 'desviación Estándar =' + str(desviacionEstandar) print '____________' print vectPunajesTolates print vectPunajesTolates1 print '____________' #Ordenar el vector de Puntajes totales vectoresParalelos= objVector.ordenarVectoresParalelos(0,vectPunajesTolates1,vecNombres) print '____________' print vectoresParalelos print '____________' print vectoresParalelos[1] #nombres de los equipos print vectoresParalelos[0] #puntajes totales de los equipos
5. Clase Archivo 
Se escribe el código para una clase con métodos que permitan manejar las operaciones básicas con archivos planos: Abrir, Cerrar, Escribir una línea de texto en el archivo, leer una línea de texto del archivo # -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: Archivo # Purpose: # # Author: carlos.castro # # Created: 01/12/2014 # Copyright: (c) carlos.castro 2014 # Licence: <your licence> #------------------------------------------------------------------------------- #ver http://www.tutorialspoint.com/python/python_files_io.htm def main(): pass if __name__ == '__main__': main() import os class Archivo: f="" #Se declara la variable tipo archivo rutaYNombre="" mensaje="ok" def __init__(self,rutaYNombre): self.rutaYNombre =rutaYNombre def abirArchivo(self): try: if os.path.exists(self.rutaYNombre): self.f = open(self.rutaYNombre,'r+')#abre archivo para lectura escritura else: self.f = open(self.rutaYNombre,'a+')#crea archivo para lectura escritura except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje def cerrarArchivo(self): self.mensaje="ok" try: self.f.close() except IOError as objIOError:
self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje def contarNumLineasArchivo(self): self.mensaje="ok" n=0 try: for LineaTexto in self.f: n=n+1 except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje return n def leerUnaLinea(self): self.mensaje="ok" try: lineaTexto = self.f.readline() if lineaTexto[-1] == 'n': lineaTexto=lineaTexto[:-1] #elimina el n except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje return lineaTexto def escribirUnaLineaDebajo(self,lineaTexto): self.mensaje="ok" print lineaTexto try: self.f.writelines(lineaTexto+"n") except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje def escribirUnaLineaAlFrente(self,lineaTexto): self.mensaje="ok" print lineaTexto try: self.f.writelines(lineaTexto) except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje
6. Diseño de la Interfaz gráfica 
Para la interfaz gráfica se seleccionó PYQY 
6.1 ejecutar el diseñador que está en C:Python27Libsite-packagesPyQt4 
Seleccionar Main Window -> Crear
Dibujar: dos Label, un Text Edit , tres TableView, un ListView , un Push Button: 
Guardar el archivo en la carpeta C:Python27Libsite-packagesPyQt4 con el nombre de: 
pryEquiposConsolaRandomGUIPYQT4
Cerrar el Qt Designer 
Crear el archivo pryEquiposConsolaRandomGUIPYQT4.py a partir del archivo pryEquiposConsolaRandomGUIPYQT4.ui 
En el PyScripter: Herramientas->Herramientas->Command Prompt
Se cambia a la carpeta donde está el conversor: 
>cd C:Python27Libsite-packagesPyQt4
Se ejecuta: 
> pyuic4 -x pryEquiposConsolaRandomGUIPYQT4.ui -o pryEquiposConsolaRandomGUIPYQT4.py 
Se copia el archivo pryEquiposConsolaRandomGUIPYQT4.py en la carpeta vista del proyecto
Se abre el archivo pryEquiposConsolaRandomGUIPYQT4.py con PYSCRIPTER
Al ejecutarlo queda así:
Se programa un método que se identificará como btnCalcularClick en el que se programan los llamados a los métodos que realizan los cálculos y se muestran los resultados en los objetos gráficos: # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'pryEquiposConsolaRandomGUIPYQT4.ui' # # Created: Tue Dec 02 18:50:03 2014 # by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(1157, 720) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.label = QtGui.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(330, 0, 211, 21)) font = QtGui.QFont() font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName(_fromUtf8("label")) self.tableView = QtGui.QTableView(self.centralwidget) self.tableView.setGeometry(QtCore.QRect(30, 70, 861, 51)) self.tableView.setObjectName(_fromUtf8("tableView")) self.label_2 = QtGui.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(40, 40, 201, 16)) font = QtGui.QFont() font.setPointSize(10) font.setBold(True) font.setWeight(75) self.label_2.setFont(font) self.label_2.setObjectName(_fromUtf8("label_2")) self.textEdit = QtGui.QTextEdit(self.centralwidget) self.textEdit.setGeometry(QtCore.QRect(250, 40, 201, 21)) self.textEdit.setObjectName(_fromUtf8("textEdit")) self.tableView_2 = QtGui.QTableView(self.centralwidget) self.tableView_2.setGeometry(QtCore.QRect(30, 130, 861, 331)) self.tableView_2.setObjectName(_fromUtf8("tableView_2")) self.tableView_3 = QtGui.QTableView(self.centralwidget) self.tableView_3.setGeometry(QtCore.QRect(30, 480, 861, 61)) self.tableView_3.setObjectName(_fromUtf8("tableView_3")) self.pushButton = QtGui.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(420, 590, 141, 41)) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.listView = QtGui.QListView(self.centralwidget) self.listView.setGeometry(QtCore.QRect(920, 130, 211, 321)) self.listView.setObjectName(_fromUtf8("listView")) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1157, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) self.label.setText(_translate("MainWindow", "Equipos de Futbol", None))
self.label_2.setText(_translate("MainWindow", "Número de equipos de fútbol", None)) self.pushButton.setText(_translate("MainWindow", "PushButton", None)) #************************************************************************** **************************** #Se agrega la siguiente línea para programar el evento click sobre el botón e invoque qoe método btnCalcularClick QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.btnCalcularClick) #************************************************************************** **************************** def btnCalcularClick(self): from control.Matriz import * from control.Vector import * from control.Archivo import * import random,os rta='s' rta2='s' #vector de nombres vecNombres=[] if rta =='s': objArchivo=Archivo("nombres.txt") sw=objArchivo.abirArchivo() if sw == 'ok': lineaTexto=objArchivo.leerUnaLinea() lineaTexto=lineaTexto[:-1] vecNombres=lineaTexto.split(",") objArchivo.cerrarArchivo() else: pass #Matriz de Puntajes matPuntajes=[] n= len(vecNombres) #************************************************************************** **************************** #Se asigna el Cuadro de Texto con el valor de n self.textEdit.setText(str(n)) #************************************************************************** ****************************
#************************************************************************** **************************** #muestra el Vector de nombres en el Primer TableView model1 = QtGui.QStandardItemModel (1, n) #se define el modelo 1 filas y n columnas for fila in range(1): for columna in range(n): item1 = QtGui.QStandardItem(vecNombres[columna]) model1.setItem(fila, columna, item1) self.tableView.setModel(model1) #************************************************************************** **************************** random.seed() #inicia generador de números aleatorios for i in range(n): matPuntajes.append( [0] * n ) #n filas if rta2=='s': objArchivo=Archivo("puntajes.txt") sw=objArchivo.abirArchivo() for i in range(n): if sw == 'ok': lineaTexto=objArchivo.leerUnaLinea() if lineaTexto[-1]==',': lineaTexto=lineaTexto[:-1] lista=[int(numero) for numero in lineaTexto.split(",")] #convertir la lista a enteros # del(lista[-1]) #borra el último de la lista print lista matPuntajes[i]=lista objArchivo.cerrarArchivo() #************************************************************************** **************************** #muestra La Matriz de puntajes en el segundo TableView model2 = QtGui.QStandardItemModel (n, n) #se define el modelo n filas y n columnas for fila in range(n): for columna in range(n): item2 = QtGui.QStandardItem(str(matPuntajes[fila][columna])) model2.setItem(fila, columna, item2) self.tableView_2.setModel(model2) #************************************************************************** **************************** else: for j in range(n): i=0 while i < n: #matPuntajes[i][j] = int(raw_input('Dame el componente (%i,%i): ' % (i, j))) if i>j: #por debajo de la diagonal principal
#matPuntajes[i][j] = int(input(" Puntaje del equipo " + vecNombres[j] + " al enfrentarse con el equipo " + vecNombres[i] + " :")) matPuntajes[i][j]= random.randint(1,3) #aleatorio entre 1 y 3 if matPuntajes[i][j]==3: matPuntajes[j][i]=0; else: if matPuntajes[i][j]==0: matPuntajes[j][i]=3; else: if matPuntajes[i][j]==1: matPuntajes[j][i]=1; else: print("Debe ingresar 1, 3 o 0") i=i-1 i=i+1 #contador para el mientras #Guarda los puntajes en un archivo open('puntajes.txt', 'w').close() #borra el contenido del archivo y lo cierra objArchivo=Archivo("puntajes.txt") sw=objArchivo.abirArchivo() for j in range(n): for i in range(n): if sw == 'ok': objArchivo.escribirUnaLineaAlFrente(str(matPuntajes[i][j])+",") objArchivo.escribirUnaLineaDebajo("") objArchivo.cerrarArchivo() #Muest for i in range(n): print matPuntajes[i] #crear un objeto de la clase Matriz objMatriz = Matriz() objMatriz.llenarMatriz(matPuntajes) #obtner el Vector de puntajes totales vectPunajesTolates=[] vectPunajesTolates = objMatriz.obtenerSumaColumnas() vectPunajesTolates1 = objMatriz.obtenerSumaColumnas() print '____________' print vectPunajesTolates #************************************************************************** **************************** #muestra el Vector de puntajes totales en el tercer TableView model3 = QtGui.QStandardItemModel (1, n) #se define el modelo 1 filas y n columnas for fila in range(1): for columna in range(n): item3 = QtGui.QStandardItem(str(vectPunajesTolates1[columna])) model3.setItem(fila, columna, item3)
self.tableView_3.setModel(model3) #************************************************************************** **************************** #Crear un objeto de la clase Vector objVector = Vector(vectPunajesTolates) #Obtener Medidas estadísticas media = objVector.obtenerMedia() mediana = objVector.obtenerMediana() moda = objVector.obtenerModa1() desviacionEstandar = objVector.obtenerDesviacionEstandarMuestral() print 'Media =' + str(media) print 'mediana =' + str(mediana) print 'moda =' + str(moda) print 'desviación Estándar =' + str(desviacionEstandar) print '____________' print vectPunajesTolates print vectPunajesTolates1 print '____________' #Ordenar el vector de Puntajes totales vectoresParalelos= objVector.ordenarVectoresParalelos(0,vectPunajesTolates1,vecNombres) print '____________' print vectoresParalelos print '____________' print vectoresParalelos[1] #nombres de los equipos print vectoresParalelos[0] #puntajes totales de los equipos #************************************************************************** **************************** #muestra Los Vectores de nombres y de Puntajes Ordenados (Vectores paralelos) en el listView. al igual que las estadísticas model4 = QtGui.QStandardItemModel(self.listView) for i in range(n): # create an item with a caption item4 = QtGui.QStandardItem(str(vecNombres[i])+"t"+str(vectPunajesTolates1[i])) model4.appendRow(item4) item4 = QtGui.QStandardItem("") model4.appendRow(item4) item4 = QtGui.QStandardItem("") model4.appendRow(item4)
item4 = QtGui.QStandardItem("") model4.appendRow(item4) item4 = QtGui.QStandardItem("La Media es:t"+str(media)) model4.appendRow(item4) item4 = QtGui.QStandardItem("La Mediana es:t"+str(mediana)) model4.appendRow(item4) item4 = QtGui.QStandardItem("La Moda es:t"+str(moda)) model4.appendRow(item4) item4 = QtGui.QStandardItem("La Desviación estándar es:t"+str(desviacionEstandar)) model4.appendRow(item4) self.listView.setModel(model4) #************************************************************************** **************************** if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) MainWindow = QtGui.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
El resultado final se muestra a continuación
Fundamentos de Python con Orientación a Objetos y Basado en Problemas

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Ejercicios Python Parte 2
Ejercicios Python Parte 2Ejercicios Python Parte 2
Ejercicios Python Parte 2
 
Ejercicios con Python parte 3
Ejercicios con Python parte 3Ejercicios con Python parte 3
Ejercicios con Python parte 3
 
Tema 3
Tema 3Tema 3
Tema 3
 
Guia números enteros edu 692
Guia números enteros   edu 692Guia números enteros   edu 692
Guia números enteros edu 692
 
Trabajo práctico "Números enteros"
Trabajo práctico "Números enteros"Trabajo práctico "Números enteros"
Trabajo práctico "Números enteros"
 
Ej 2.4.3 CRECIMIENTO DE BACTERIAS
Ej 2.4.3 CRECIMIENTO DE BACTERIASEj 2.4.3 CRECIMIENTO DE BACTERIAS
Ej 2.4.3 CRECIMIENTO DE BACTERIAS
 
Razonamiento matematico 2
Razonamiento matematico 2Razonamiento matematico 2
Razonamiento matematico 2
 
Trabajo de infórmatica
Trabajo de infórmaticaTrabajo de infórmatica
Trabajo de infórmatica
 
Tema 2
Tema 2Tema 2
Tema 2
 
Ejercicios en netbeans con condiciones
Ejercicios en netbeans con condicionesEjercicios en netbeans con condiciones
Ejercicios en netbeans con condiciones
 
Ejercicios de Funciones.
Ejercicios de Funciones.Ejercicios de Funciones.
Ejercicios de Funciones.
 
Guia de matematicas grados septimos
Guia de matematicas grados septimos Guia de matematicas grados septimos
Guia de matematicas grados septimos
 
5 Operaciones En Otras Bases
5  Operaciones En Otras Bases5  Operaciones En Otras Bases
5 Operaciones En Otras Bases
 
Arreglos
ArreglosArreglos
Arreglos
 
Ejercicios Python Parte 1
Ejercicios Python Parte 1Ejercicios Python Parte 1
Ejercicios Python Parte 1
 
Cursos de MATLAB
Cursos de MATLABCursos de MATLAB
Cursos de MATLAB
 
Representacion interna de datos1 2014
Representacion interna de datos1 2014Representacion interna de datos1 2014
Representacion interna de datos1 2014
 
Elementos de un arreglo
Elementos de un arregloElementos de un arreglo
Elementos de un arreglo
 
Dominios f
Dominios fDominios f
Dominios f
 
Matematica3 semana 6 dia 3 solucion matematica ccesa007
Matematica3 semana 6   dia 3 solucion matematica ccesa007Matematica3 semana 6   dia 3 solucion matematica ccesa007
Matematica3 semana 6 dia 3 solucion matematica ccesa007
 

Similar a Fundamentos de Python con Orientación a Objetos y Basado en Problemas

Fi0708 ejercicios
Fi0708 ejerciciosFi0708 ejercicios
Fi0708 ejerciciosford81
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzadaMaestros en Linea
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con javadiegocastro1234
 
Practica 2 sistemas numericos y packet tracer
Practica 2 sistemas numericos y packet tracerPractica 2 sistemas numericos y packet tracer
Practica 2 sistemas numericos y packet tracerArana Paker
 
Intro Java 3
Intro Java 3Intro Java 3
Intro Java 3ramaguayo
 
Intro Java 3
Intro Java 3Intro Java 3
Intro Java 3ramaguayo
 
Informe de proyecto final
Informe de proyecto finalInforme de proyecto final
Informe de proyecto finalAldrin Eduardo
 
Ejercicios de Lenguaje C #08 Resol.pdf
Ejercicios de Lenguaje C #08 Resol.pdfEjercicios de Lenguaje C #08 Resol.pdf
Ejercicios de Lenguaje C #08 Resol.pdfLuis Segovia
 
Practicas en matlab
Practicas en matlabPracticas en matlab
Practicas en matlabbachispasaca
 
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)José Antonio Sandoval Acosta
 
Arreglos en PSeInt
Arreglos en PSeIntArreglos en PSeInt
Arreglos en PSeIntJerry
 

Similar a Fundamentos de Python con Orientación a Objetos y Basado en Problemas (20)

Fi0708 ejercicios
Fi0708 ejerciciosFi0708 ejercicios
Fi0708 ejercicios
 
11_Matrices.pptx
11_Matrices.pptx11_Matrices.pptx
11_Matrices.pptx
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzada
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con java
 
Arreglos y matrices
Arreglos y matricesArreglos y matrices
Arreglos y matrices
 
Practica 2 sistemas numericos y packet tracer
Practica 2 sistemas numericos y packet tracerPractica 2 sistemas numericos y packet tracer
Practica 2 sistemas numericos y packet tracer
 
Intro Java 3
Intro Java 3Intro Java 3
Intro Java 3
 
Intro Java 3
Intro Java 3Intro Java 3
Intro Java 3
 
Informe de proyecto final
Informe de proyecto finalInforme de proyecto final
Informe de proyecto final
 
Ejercicios de Lenguaje C #08 Resol.pdf
Ejercicios de Lenguaje C #08 Resol.pdfEjercicios de Lenguaje C #08 Resol.pdf
Ejercicios de Lenguaje C #08 Resol.pdf
 
Arreglos
ArreglosArreglos
Arreglos
 
Practicas en matlab
Practicas en matlabPracticas en matlab
Practicas en matlab
 
Matlab introducción
Matlab   introducciónMatlab   introducción
Matlab introducción
 
Matlab introducción
Matlab   introducciónMatlab   introducción
Matlab introducción
 
Matlab introducción
Matlab   introducciónMatlab   introducción
Matlab introducción
 
Silabo programación ii 2015-i
Silabo programación ii 2015-iSilabo programación ii 2015-i
Silabo programación ii 2015-i
 
Mat lab01
Mat lab01Mat lab01
Mat lab01
 
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
 
Aline
AlineAline
Aline
 
Arreglos en PSeInt
Arreglos en PSeIntArreglos en PSeInt
Arreglos en PSeInt
 

Último

Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 

Último (20)

Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 

Fundamentos de Python con Orientación a Objetos y Basado en Problemas

  • 1. Fundamentos de Python con Orientación a Objetos y Basado en Problemas Por Carlos Arturo Castro Castro 1. El Problema PROBLEMA EQUIPOS DE FUTBOL Problema diseñado por Carlos Arturo Castro Castro Temas: Arreglos Unidimensionales (vectores), Arreglos Bidimensionales (matrices). Se tiene un arreglo unidimensional (vector) con los nombres de N equipos de futbol. Un jemplo podría ser (ejemplo 6 equipos-> N=6): #1 #2 #3 #4 #5 #6 REAL LANÚS COLONIA LITEX BETIS NEC Se tiene una tabla (matriz) con los puntajes resultado del enfrentamiento entre N equipos de futbol. Cada celda (posición fila,columna) tiene un valor de 0 (cero), 3 (tres) ó 1 (uno). La primera columna tiene los puntajes resultado del enfrentamiento entre el equipo #1 con los demás equipos. La segunda columna tiene los puntajes resultado del enfrentamiento entre el equipo #2 con los demás equipos y así para las demás columnas. Los datos que están sobre la diagonal principal son todos cero (0) debido a que un equipo no se enfrenta con el mismo. Es decir en la celda en posición (2,1) (fila 2, columna 1) se encuentra el puntaje resultado del enfrentamiento entre el equipo #1 y el equipo #2. En la celda en posición (3,1) (fila 3, columna 1) se encuentra el puntaje resultado del enfrentamiento entre el equipo #1 y el equipo #3. En la celda en posición (i,j) (fila i, columna j) se encuentra el puntaje resultado del enfrentamiento entre el equipo #j y el equipo #i.Ver la tabla ejemplo a continuación (N=6 equipos): #1 #2 #3 #4 #5 #6 REAL LANÚS COLONIA LITEX BETIS NEC REAL 0 0 1 1 1 3 LANÚS 3 0 3 0 3 3 COLONIA 1 0 0 3 3 3 LITEX 1 3 0 0 0 0 BETIS 1 0 0 3 0 0 NEC 0 0 0 3 3 0 Se requiere un vector con los puntajes totales. Es decir un vector en el cual la primera posición
  • 2. corresponde al puntaje total del equipo #1. Se obtiene sumando los puntajes de la columna #1 de la matriz. En la segunda posición se encuentra el puntaje total del equipo #2. En la posición j, se encuentra el puntaje total del equipo #j (Se obtiene sumando los puntajes de la columna #j de la matriz):
  • 3. #1 #2 #3 #4 #5 #6 REAL LANÚS COLONIA LITEX BETIS NEC REAL 0 0 1 1 1 3 LANÚS 3 0 3 0 3 3 COLONIA 1 0 0 3 3 3 LITEX 1 3 0 0 0 0 BETIS 1 0 0 3 0 0 NEC 0 0 0 3 3 0 6 3 4 10 10 9 Requerimientos: Vector de nombres Matriz de puntajes Vector de puntajes totales
  • 4.  Llenar el vector de nombres, digitando los datos, para un número N de equipos. N también debe ser digitado.  Llenar la matriz de puntajes, digitando solo los datos que se encuentran por debajo de la diagonal principal, de modo que los que están por encima de la diagonal principal se generen automáticamente. Es decir si el puntaje del equipo #j es 3, en la posición i,j de la matriz se guarda 3 y la en posición j,i de la matriz se guarda 0 (cero). si el puntaje del equipo #j es 0, en la posición i,j de la matriz se guarda 0 y la en posición j,i de la matriz se guarda 3. si el puntaje del equipo #j es 1, en la posición i,j de la matriz se guarda 1 y la en posición j,i de la matriz se guarda 1. Se debe controlar que el puntaje digitado en la matriz sea cero, uno ó tres.  Mostrar los nombres de los equipos ordenados por puntajes totales. Se debe mostrar en primer lugar el nombre del equipo con mayor puntaje (incluyendo su puntaje), en segundo lugar el equipo con el puntaje que le sigue (incluyendo su puntaje), y así sucesivamente. Se debe ordenar el vector de puntajes totales ascendentemente pero los resultados se muestran de mayor a menor. Tenga en cuenta que el vector de nombres y el vector de puntajes totales son paralelos. En este caso no considerar diferencia de goles.  Mostrar la media aritm (promedio), desviación estándar, mediana y moda de los datos del vector de puntajes totales. Para el ejemplo planteado N=6, debe mostrar: LITEX BETIS NEC REAL COLONIA LANÚS 10 10 9 6 4 3 Media 7,00 DesvEst. 3,09838668 Mediana 7,50 Moda 10
  • 5. 2. La Herramientas Intérprete de Python: Versión 2.7.8 https://www.python.org/downloads/
  • 6. Diseñador de Ambiente gráfico para python 2.7 PYQT (Windows 32 bit installer) http://www.riverbankcomputing.co.uk/software/pyqt/download
  • 7. IDE para python 2.7 PyScripter-v2.5.3 (32 bit) https://code.google.com/p/pyscripter/downloads/list
  • 8. 3. Instalar Herramientas Instalar Python 2.7
  • 10.
  • 11.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17. Finalizar 4. Definir la arquitectura del software
  • 18. Se definió trabajar con dos paquetes de clases. El paquete Vista con los métodos que implementan la interacción del programa con el usuario. Y el paquete Control, con los métodos que poseen cálculos reutilizables e independientes de la forma como se ingresan los datos y/o se muestran los resultados. 4.1 Crear una carpeta llamada proyectoEquipos 4.2 Paquete Control: Se crea un archivo en blanco llamado __init__.py y se guarda en una carpeta llamada control
  • 19. Se crea un módulo con la clase Matriz y métodos reutilizables
  • 20. # -*- coding: utf-8 -*- #La anterior Línea permite usar caracteres utf8 (tildes, eñes entre otros) #------------------------------------------------------------------------------- # Name: Matriz # Author: Carlos Arturo # Created: 29/11/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #------------------------------------------------------------------------------- class Matriz: #atributos o propiedades mat=[] #se declara una arreglo numFilas=0 #se declara un entero numColumnas=0 #Métodos #Método para llenar matriz (Es decir asignar los datos en la matriz que se pasa como parámetro) def llenarMatriz(self,mat): self.mat=mat def obtenerNumFilas(self): self.numFilas=len(self.mat) return self.numFilas def obtenerNumColumnas(self):
  • 21. self.numColumnas=len(self.mat[0]) return self.numColumnas #método para retornar un vector en el que se obtiene la suma de cada columna def obtenerSumaColumnas(self): sum=0 vec = [] nc=self.obtenerNumColumnas() #ciclo para. Inicializa el vector con nc ceros for i in range(nc): vec.append(0) #ciclos para anidados. Suma cada columna de la matriz y la lleva a un vector for j in range(self.obtenerNumColumnas()): sum=0 for i in range(self.obtenerNumFilas()): sum=sum+self.mat[i][j] vec[j]=sum return vec Se crea un módulo con la clase Vector y métodos reutilizables # -*- coding: utf-8 -*- #-------------------------------------------------------------------------------
  • 22. # Name: Vector # Author: Carlos Arturo # Created: 29/11/2014 # Copyright: (c) Carlos Arturo 2014 #------------------------------------------------------------------------------- #ver https://docs.python.org/2/library/functions.html import math class Vector: #atributos vec=[] def __init__(self,vec): #método para inicilaizar atributos self.vec=vec def obtenerNumElementos(self): return len(self.vec) def obtenerMedia(self): return float(sum(self.vec))/len(self.vec) #algoritmo tradicional de la media def obtenerMedia1(self): Acum=0 for i in range(len(self.vec)): Acum=Acum+self.vec[i] media=float(Acum)/self.obtenerNumElementos() #tambien media= media=float(Acum)/len(self.vec) return media def ordenarVectorAsc(self): self.vec.sort() return self.vec def ordenarVectorDesc(self): self.vec.sort() self.vec.reverse() return self.vec def ordenarVectorBurbuja(self): n=len(self.vec) for i in range(n-1): for j in range(i+1,n): if self.vec[i] > self.vec[j]: aux=self.vec[i] self.vec[i]=self.vec[j] self.vec[j]=aux return self.vec def obtenerMediana(self): self.vec.sort() n = len(self.vec) if len(self.vec) % 2 == 0: #si n es par
  • 23. mediana = (self.vec[n/2-1]+ self.vec[n/2] )/2.0 #al dividirlo por 2.0 lo convierte a float else: mediana =self.vec[n/2] return mediana def obtenerModa1(self): n=len(self.vec) moda=self.vec[1] contModa=1 resultado=[contModa,moda] for i in range(n-1): cont=1 for j in range(i+1,n): if self.vec[i]==self.vec[j]: cont=cont+1 if cont >= contModa: contModa=cont moda=self.vec[i] resultado=[contModa,moda] if resultado[0]==1: moda=None else: moda=resultado[1]#aunque tenga varias modas. solo devuelve 1 return moda def obtenerVectorModas(self): n=len(self.vec) vecModas=[] for i in range(n): cont=1 for j in range(i+1,n): if self.vec[i]==self.vec[j]: cont=cont+1 #cuenta el número de veces que vec[i] se necuentra en el vector vecModas.append(cont) self.ordenarVectoresParalelos(0,vecModas,self.vec) return vecModas def obtenerDesviacionEstandarMuestral(self): media=self.obtenerMedia() n=len(self.vec) sumatoria=0.0 for i in range(n): sumatoria=sumatoria+(media-self.vec[i])**2 desVest = math.sqrt((sumatoria)/(n-1)) return desVest
  • 24. def ordenarVectoresParalelos(self,fila,*parametros): mat=list(parametros) nfil=len(mat) ncol=len(mat[0]) if fila >= nfil: fila=nfil-1 elif fila < 0: fila=0 aux=[] #aux es un vector para intercambiar columnas for i in range(nfil): aux.append(None) for i in range(ncol-1): for j in range(i+1,ncol): if mat[fila][i] < mat[fila][j]: for k in range(nfil): aux[k]=mat[k][i] for k in range(nfil): mat[k][i]=mat[k][j] for k in range(nfil): mat[k][j]=aux[k] return mat 4.3 Paquete Vista: Se crea un archivo en blanco llamado __init__.py y se guarda en una carpeta llamada vista
  • 25. Se crea un módulo llamado pryEquiposConsola.py y se guarda en la carpeta vista Se importan las clases del paquete control Se ingresan los datos por consola a un Vector de nombres de equipos y a una matriz de puntajes. Se Obtienen la medidas estadísticas invocando a los métodos correspondientes
  • 26.
  • 27. # -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: pryEquiposConsola # Purpose: # # Author: Carlos Arturo # # Created: 30/11/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #------------------------------------------------------------------------------- def main(): pass if __name__ == '__main__': main() from control.Matriz import * from control.Vector import * #vector de nombres vecNombres=[] continuar=True i=1 while (continuar == True): try: #Control de Excepciones nombreEquipo= raw_input("Ingrese Nombre del equipo # " + str(i)) i=i+1 vecNombres.append(nombreEquipo) except KeyboardInterrupt: continuar=False #Matriz de Puntajes matPuntajes=[] n= len(vecNombres) for i in range(n): matPuntajes.append( [0] * n ) #n filas for j in range(n): i=0 while i < n: #matPuntajes[i][j] = int(raw_input('Dame el componente (%i,%i): ' % (i, j))) if i>j: #por debajo de la diagonal principal matPuntajes[i][j] = int(input(" Puntaje del equipo " + vecNombres[j] + " al enfrentarse con el equipo " + vecNombres[i] + " :")) if matPuntajes[i][j]==3:
  • 28. matPuntajes[j][i]=0; else: if matPuntajes[i][j]==0: matPuntajes[j][i]=3; else: if matPuntajes[i][j]==1: matPuntajes[j][i]=1; else: print("Debe ingresar 1, 3 o 0") i=i-1 i=i+1 #contador para el mientras #print matPuntajes for i in range(n): print matPuntajes[i] #crear un objeto de la clase Matriz objMatriz = Matriz() objMatriz.llenarMatriz(matPuntajes) #obtner el Vector de puntajes totales vectPunajesTolates=[] vectPunajesTolates = objMatriz.obtenerSumaColumnas() vectPunajesTolates1 = objMatriz.obtenerSumaColumnas() print '____________' print vectPunajesTolates #Crear un objeto de la clase Vector objVector = Vector(vectPunajesTolates) #Obtener Medidas estadísticas media = objVector.obtenerMedia() mediana = objVector.obtenerMediana() moda = objVector.obtenerModa1() desviacionEstandar = objVector.obtenerDesviacionEstandarMuestral() print 'Media =' + str(media) print 'mediana =' + str(mediana) print 'moda =' + str(moda) print 'desviación Estándar =' + str(desviacionEstandar) print '____________' print vectPunajesTolates print vectPunajesTolates1 print '____________'
  • 29. #Ordenar el vector de Puntajes totales vectoresParalelos= objVector.ordenarVectoresParalelos(0,vectPunajesTolates1,vecNombres) print '____________' print vectoresParalelos print '____________' print vectoresParalelos[1] #nombres de los equipos print vectoresParalelos[0] #puntajes totales de los equipos Puede usarse la función random.randint(1,3), para generar un aleatorio entero entre 1 y 3 y simular los puntajes ingresados por un usuario Para esto se requiere importar el módulo random. Se creó un nuevo proyecto denominado: pryEquiposConsolaRandom.py # -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: pryEquiposConsola # Purpose: # # Author: Carlos Arturo # # Created: 30/11/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #------------------------------------------------------------------------------- def main(): pass if __name__ == '__main__':
  • 30. main() from control.Matriz import * from control.Vector import * import random #vector de nombres vecNombres=[] continuar=True i=1 while (continuar == True): try: #Control de Excepciones nombreEquipo= raw_input("Ingrese Nombre del equipo # " + str(i)) i=i+1 vecNombres.append(nombreEquipo) except KeyboardInterrupt: continuar=False #Matriz de Puntajes matPuntajes=[] n= len(vecNombres) random.seed() #inicia generador de n{umeros aleatorios for i in range(n): matPuntajes.append( [0] * n ) #n filas for j in range(n): i=0 while i < n: #matPuntajes[i][j] = int(raw_input('Dame el componente (%i,%i): ' % (i, j))) if i>j: #por debajo de la diagonal principal #matPuntajes[i][j] = int(input(" Puntaje del equipo " + vecNombres[j] + " al enfrentarse con el equipo " + vecNombres[i] + " :")) matPuntajes[i][j]= random.randint(1,3) #aleatorio entre 1 y 3 if matPuntajes[i][j]==3: matPuntajes[j][i]=0; else: if matPuntajes[i][j]==0: matPuntajes[j][i]=3; else: if matPuntajes[i][j]==1: matPuntajes[j][i]=1; else: print("Debe ingresar 1, 3 o 0") i=i-1 i=i+1 #contador para el mientras #print matPuntajes for i in range(n): print matPuntajes[i]
  • 31. #crear un objeto de la clase Matriz objMatriz = Matriz() objMatriz.llenarMatriz(matPuntajes) #obtner el Vector de puntajes totales vectPunajesTolates=[] vectPunajesTolates = objMatriz.obtenerSumaColumnas() vectPunajesTolates1 = objMatriz.obtenerSumaColumnas() print '____________' print vectPunajesTolates #Crear un objeto de la clase Vector objVector = Vector(vectPunajesTolates) #Obtener Medidas estadísticas media = objVector.obtenerMedia() mediana = objVector.obtenerMediana() moda = objVector.obtenerModa1() desviacionEstandar = objVector.obtenerDesviacionEstandarMuestral() print 'Media =' + str(media) print 'mediana =' + str(mediana) print 'moda =' + str(moda) print 'desviación Estándar =' + str(desviacionEstandar) print '____________' print vectPunajesTolates print vectPunajesTolates1 print '____________' #Ordenar el vector de Puntajes totales vectoresParalelos= objVector.ordenarVectoresParalelos(0,vectPunajesTolates1,vecNombres) print '____________' print vectoresParalelos print '____________' print vectoresParalelos[1] #nombres de los equipos print vectoresParalelos[0] #puntajes totales de los equipos
  • 32. 5. Clase Archivo Se escribe el código para una clase con métodos que permitan manejar las operaciones básicas con archivos planos: Abrir, Cerrar, Escribir una línea de texto en el archivo, leer una línea de texto del archivo # -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: Archivo # Purpose: # # Author: carlos.castro # # Created: 01/12/2014 # Copyright: (c) carlos.castro 2014 # Licence: <your licence> #------------------------------------------------------------------------------- #ver http://www.tutorialspoint.com/python/python_files_io.htm def main(): pass if __name__ == '__main__': main() import os class Archivo: f="" #Se declara la variable tipo archivo rutaYNombre="" mensaje="ok" def __init__(self,rutaYNombre): self.rutaYNombre =rutaYNombre def abirArchivo(self): try: if os.path.exists(self.rutaYNombre): self.f = open(self.rutaYNombre,'r+')#abre archivo para lectura escritura else: self.f = open(self.rutaYNombre,'a+')#crea archivo para lectura escritura except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje def cerrarArchivo(self): self.mensaje="ok" try: self.f.close() except IOError as objIOError:
  • 33. self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje def contarNumLineasArchivo(self): self.mensaje="ok" n=0 try: for LineaTexto in self.f: n=n+1 except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje return n def leerUnaLinea(self): self.mensaje="ok" try: lineaTexto = self.f.readline() if lineaTexto[-1] == 'n': lineaTexto=lineaTexto[:-1] #elimina el n except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje return lineaTexto def escribirUnaLineaDebajo(self,lineaTexto): self.mensaje="ok" print lineaTexto try: self.f.writelines(lineaTexto+"n") except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje def escribirUnaLineaAlFrente(self,lineaTexto): self.mensaje="ok" print lineaTexto try: self.f.writelines(lineaTexto) except IOError as objIOError: self.mensaje= "Problemas con el archivo: Error #" + str(objIOError.errno) + " Mensaje : "+format(objIOError.strerror) return self.mensaje
  • 34. 6. Diseño de la Interfaz gráfica Para la interfaz gráfica se seleccionó PYQY 6.1 ejecutar el diseñador que está en C:Python27Libsite-packagesPyQt4 Seleccionar Main Window -> Crear
  • 35. Dibujar: dos Label, un Text Edit , tres TableView, un ListView , un Push Button: Guardar el archivo en la carpeta C:Python27Libsite-packagesPyQt4 con el nombre de: pryEquiposConsolaRandomGUIPYQT4
  • 36. Cerrar el Qt Designer Crear el archivo pryEquiposConsolaRandomGUIPYQT4.py a partir del archivo pryEquiposConsolaRandomGUIPYQT4.ui En el PyScripter: Herramientas->Herramientas->Command Prompt
  • 37. Se cambia a la carpeta donde está el conversor: >cd C:Python27Libsite-packagesPyQt4
  • 38. Se ejecuta: > pyuic4 -x pryEquiposConsolaRandomGUIPYQT4.ui -o pryEquiposConsolaRandomGUIPYQT4.py Se copia el archivo pryEquiposConsolaRandomGUIPYQT4.py en la carpeta vista del proyecto
  • 39. Se abre el archivo pryEquiposConsolaRandomGUIPYQT4.py con PYSCRIPTER
  • 41. Se programa un método que se identificará como btnCalcularClick en el que se programan los llamados a los métodos que realizan los cálculos y se muestran los resultados en los objetos gráficos: # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'pryEquiposConsolaRandomGUIPYQT4.ui' # # Created: Tue Dec 02 18:50:03 2014 # by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow"))
  • 42. MainWindow.resize(1157, 720) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.label = QtGui.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(330, 0, 211, 21)) font = QtGui.QFont() font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName(_fromUtf8("label")) self.tableView = QtGui.QTableView(self.centralwidget) self.tableView.setGeometry(QtCore.QRect(30, 70, 861, 51)) self.tableView.setObjectName(_fromUtf8("tableView")) self.label_2 = QtGui.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(40, 40, 201, 16)) font = QtGui.QFont() font.setPointSize(10) font.setBold(True) font.setWeight(75) self.label_2.setFont(font) self.label_2.setObjectName(_fromUtf8("label_2")) self.textEdit = QtGui.QTextEdit(self.centralwidget) self.textEdit.setGeometry(QtCore.QRect(250, 40, 201, 21)) self.textEdit.setObjectName(_fromUtf8("textEdit")) self.tableView_2 = QtGui.QTableView(self.centralwidget) self.tableView_2.setGeometry(QtCore.QRect(30, 130, 861, 331)) self.tableView_2.setObjectName(_fromUtf8("tableView_2")) self.tableView_3 = QtGui.QTableView(self.centralwidget) self.tableView_3.setGeometry(QtCore.QRect(30, 480, 861, 61)) self.tableView_3.setObjectName(_fromUtf8("tableView_3")) self.pushButton = QtGui.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(420, 590, 141, 41)) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.listView = QtGui.QListView(self.centralwidget) self.listView.setGeometry(QtCore.QRect(920, 130, 211, 321)) self.listView.setObjectName(_fromUtf8("listView")) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1157, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) self.label.setText(_translate("MainWindow", "Equipos de Futbol", None))
  • 43. self.label_2.setText(_translate("MainWindow", "Número de equipos de fútbol", None)) self.pushButton.setText(_translate("MainWindow", "PushButton", None)) #************************************************************************** **************************** #Se agrega la siguiente línea para programar el evento click sobre el botón e invoque qoe método btnCalcularClick QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.btnCalcularClick) #************************************************************************** **************************** def btnCalcularClick(self): from control.Matriz import * from control.Vector import * from control.Archivo import * import random,os rta='s' rta2='s' #vector de nombres vecNombres=[] if rta =='s': objArchivo=Archivo("nombres.txt") sw=objArchivo.abirArchivo() if sw == 'ok': lineaTexto=objArchivo.leerUnaLinea() lineaTexto=lineaTexto[:-1] vecNombres=lineaTexto.split(",") objArchivo.cerrarArchivo() else: pass #Matriz de Puntajes matPuntajes=[] n= len(vecNombres) #************************************************************************** **************************** #Se asigna el Cuadro de Texto con el valor de n self.textEdit.setText(str(n)) #************************************************************************** ****************************
  • 44. #************************************************************************** **************************** #muestra el Vector de nombres en el Primer TableView model1 = QtGui.QStandardItemModel (1, n) #se define el modelo 1 filas y n columnas for fila in range(1): for columna in range(n): item1 = QtGui.QStandardItem(vecNombres[columna]) model1.setItem(fila, columna, item1) self.tableView.setModel(model1) #************************************************************************** **************************** random.seed() #inicia generador de números aleatorios for i in range(n): matPuntajes.append( [0] * n ) #n filas if rta2=='s': objArchivo=Archivo("puntajes.txt") sw=objArchivo.abirArchivo() for i in range(n): if sw == 'ok': lineaTexto=objArchivo.leerUnaLinea() if lineaTexto[-1]==',': lineaTexto=lineaTexto[:-1] lista=[int(numero) for numero in lineaTexto.split(",")] #convertir la lista a enteros # del(lista[-1]) #borra el último de la lista print lista matPuntajes[i]=lista objArchivo.cerrarArchivo() #************************************************************************** **************************** #muestra La Matriz de puntajes en el segundo TableView model2 = QtGui.QStandardItemModel (n, n) #se define el modelo n filas y n columnas for fila in range(n): for columna in range(n): item2 = QtGui.QStandardItem(str(matPuntajes[fila][columna])) model2.setItem(fila, columna, item2) self.tableView_2.setModel(model2) #************************************************************************** **************************** else: for j in range(n): i=0 while i < n: #matPuntajes[i][j] = int(raw_input('Dame el componente (%i,%i): ' % (i, j))) if i>j: #por debajo de la diagonal principal
  • 45. #matPuntajes[i][j] = int(input(" Puntaje del equipo " + vecNombres[j] + " al enfrentarse con el equipo " + vecNombres[i] + " :")) matPuntajes[i][j]= random.randint(1,3) #aleatorio entre 1 y 3 if matPuntajes[i][j]==3: matPuntajes[j][i]=0; else: if matPuntajes[i][j]==0: matPuntajes[j][i]=3; else: if matPuntajes[i][j]==1: matPuntajes[j][i]=1; else: print("Debe ingresar 1, 3 o 0") i=i-1 i=i+1 #contador para el mientras #Guarda los puntajes en un archivo open('puntajes.txt', 'w').close() #borra el contenido del archivo y lo cierra objArchivo=Archivo("puntajes.txt") sw=objArchivo.abirArchivo() for j in range(n): for i in range(n): if sw == 'ok': objArchivo.escribirUnaLineaAlFrente(str(matPuntajes[i][j])+",") objArchivo.escribirUnaLineaDebajo("") objArchivo.cerrarArchivo() #Muest for i in range(n): print matPuntajes[i] #crear un objeto de la clase Matriz objMatriz = Matriz() objMatriz.llenarMatriz(matPuntajes) #obtner el Vector de puntajes totales vectPunajesTolates=[] vectPunajesTolates = objMatriz.obtenerSumaColumnas() vectPunajesTolates1 = objMatriz.obtenerSumaColumnas() print '____________' print vectPunajesTolates #************************************************************************** **************************** #muestra el Vector de puntajes totales en el tercer TableView model3 = QtGui.QStandardItemModel (1, n) #se define el modelo 1 filas y n columnas for fila in range(1): for columna in range(n): item3 = QtGui.QStandardItem(str(vectPunajesTolates1[columna])) model3.setItem(fila, columna, item3)
  • 46. self.tableView_3.setModel(model3) #************************************************************************** **************************** #Crear un objeto de la clase Vector objVector = Vector(vectPunajesTolates) #Obtener Medidas estadísticas media = objVector.obtenerMedia() mediana = objVector.obtenerMediana() moda = objVector.obtenerModa1() desviacionEstandar = objVector.obtenerDesviacionEstandarMuestral() print 'Media =' + str(media) print 'mediana =' + str(mediana) print 'moda =' + str(moda) print 'desviación Estándar =' + str(desviacionEstandar) print '____________' print vectPunajesTolates print vectPunajesTolates1 print '____________' #Ordenar el vector de Puntajes totales vectoresParalelos= objVector.ordenarVectoresParalelos(0,vectPunajesTolates1,vecNombres) print '____________' print vectoresParalelos print '____________' print vectoresParalelos[1] #nombres de los equipos print vectoresParalelos[0] #puntajes totales de los equipos #************************************************************************** **************************** #muestra Los Vectores de nombres y de Puntajes Ordenados (Vectores paralelos) en el listView. al igual que las estadísticas model4 = QtGui.QStandardItemModel(self.listView) for i in range(n): # create an item with a caption item4 = QtGui.QStandardItem(str(vecNombres[i])+"t"+str(vectPunajesTolates1[i])) model4.appendRow(item4) item4 = QtGui.QStandardItem("") model4.appendRow(item4) item4 = QtGui.QStandardItem("") model4.appendRow(item4)
  • 47. item4 = QtGui.QStandardItem("") model4.appendRow(item4) item4 = QtGui.QStandardItem("La Media es:t"+str(media)) model4.appendRow(item4) item4 = QtGui.QStandardItem("La Mediana es:t"+str(mediana)) model4.appendRow(item4) item4 = QtGui.QStandardItem("La Moda es:t"+str(moda)) model4.appendRow(item4) item4 = QtGui.QStandardItem("La Desviación estándar es:t"+str(desviacionEstandar)) model4.appendRow(item4) self.listView.setModel(model4) #************************************************************************** **************************** if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) MainWindow = QtGui.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
  • 48. El resultado final se muestra a continuación