Pensando en Python, Diferentes Formas de hacer las cosas [parte1]


Bueno por hay he visto muy buenas practicas para programar en python y estaré comentándoles sobre ellas en la semana, pero lo que realmente me ha motivado a crear esta entrada es la serie de Python Scraping NFL y es que de verdad me he visto muy motivado, ya que he visto que aun lo que no tiene nada que ver con este proyecto me ha ayudado y se en Dios que seguirá ayudándome en los proyectos que he emprendido, he comenzado a mejorar el código de la serie Python Scraping NFL y estaba viendo que hay 8 Divisiones en la NFL o Conferencias, y hay 32 equipos, 4 en cada división, y necesito sacar por lo pronto los nombres de las divisiones para agregarlo a la tabla principal Tabla_Divisiones, luego buscar los equipos y agregarlos a la Tabla Equipos_NFL, lo pensé hacer con dos bucles uno para cada tabla y creo que es lo mas lógico… Aquí el Código hasta ahora:

import requests, urllib2
from bs4 import BeautifulSoup
import re

import math

### Pagina primaria para buscar los datos
url_1er = 'http://www.espn.com.ve/futbol-americano/nfl/equipos'

            
page_1era = urllib2.urlopen(url_1er)
            
soup_1er = BeautifulSoup(page_1era, 'lxml')

diviciones  = []


divicion_Diviciones = soup_1er.find_all('div',class_="mod-header stathead" )
for enlace in divicion_Diviciones:
    nombre_divicion = enlace.get_text()
    diviciones.append(nombre_divicion)

print diviciones

print len(diviciones)

print len(diviciones)

### Buscamos las estadisticas de los equipos con esta expresion regular
equipos_1era_tabla  = []

primer_enlace_equipos = soup_1er.find_all('a',class_="bi" )
for enlace in primer_enlace_equipos:
    nombre = enlace.get_text()
    equipos_1era_tabla.append(nombre)

print equipos_1era_tabla

print len(equipos_1era_tabla)

La salida del programa es esta:

[u'NFC Este', u'AFC Este', u'NFC Oeste', u'AFC Oeste', u'NFC Norte', u'AFC Norte', u'NFC Sur', u'AFC Sur']
8

[u'Dallas Cowboys', u'New York Giants', u'Philadelphia Eagles', u'Washington Redskins', u'Buffalo Bills', u'Miami Dolphins', u'New England Patriots', u'New York Jets', u'Arizona Cardinals', u'Los Angeles Rams', u'San Francisco 49ers', u'Seattle Seahawks', u'Denver Broncos', u'Kansas City Chiefs', u'Oakland Raiders', u'San Diego Chargers', u'Chicago Bears', u'Detroit Lions', u'Green Bay Packers', u'Minnesota Vikings', u'Baltimore Ravens', u'Cincinnati Bengals', u'Cleveland Browns', u'Pittsburgh Steelers', u'Atlanta Falcons', u'Carolina Panthers', u'New Orleans Saints', u'Tampa Bay Buccaneers', u'Houston Texans', u'Indianapolis Colts', u'Jacksonville Jaguars', u'Tennessee Titans']
32

El programa hasta aquí nos dice las Divisiones, cuantas son y los equipos y cuantos son, hasta aquí todo bien y ahora necesitaba tomar las 2 listas y fundirlas en una sola para luego saber a que división(con el ID  en la tabla) es a la que pertenece cada equipo, y lo primero que se me ocurrió fue esto:


count_primer = 0

for equipo_divicion in equipos_1era_tabla:
    if count_primer <=3:
        print diviciones[0]
        print equipo_divicion
        
    elif count_primer <=7:
        print diviciones[1]
        print equipo_divicion
        
    elif count_primer <=11:
        print diviciones[2]
        print equipo_divicion  
        
        
    elif count_primer <=15:
        print diviciones[3]
        print equipo_divicion   
        
    elif count_primer <=19:
        print diviciones[4]
        print equipo_divicion
        
    elif count_primer <=23:
        print diviciones[5]
        print equipo_divicion  
        
        
    elif count_primer <=27:
        print diviciones[6]
        print equipo_divicion    
        
    elif count_primer <=31:
        print diviciones[7]
        print equipo_divicion
    count_primer += 1
    

Y la verdad el programa hace lo que estaba pensando que hiciera con unos arreglos podríamos agregarle la Base de Datos y ya tendríamos parte de lo que estamos haciendo, y estaría bien… Pero yo normalmente me pongo a pensar mas allá, y ahora imaginaba tener que introducir código en cada if, y en el peor de los casos no en todo los if, pero se me ocurrió la siguiente idea para no tener que introducir los if…

Tenemos 32 equipos y 8 divisiones sabemos que cada 4 equipos pertenecen a una división, entonces me invente crear 2 contadores mas y dividirlos en 4 partes desde 0 a 0,75, el segundo contador es para redondear hacia abajo el valor del primero  y usarlo como entero ya que las listas no soportan flotantes o decimales, y así rebaje un código que ya se estaba haciendo muy largo a uno de unas pocas lineas que funciona:

Aquí el Código:


count_primer = 0
count_divicion = 0
count_redondeado = 0
for equipo_divicion in equipos_1era_tabla:

   print diviciones[count_redondeado]
   print equipos_1era_tabla[count_primer] 
   count_primer += 1
   count_divicion +=0.25
   count_redondeado = math.floor(count_divicion)
   count_redondeado = int(count_redondeado)

 Y esto era lo que quería compartir, el como un algoritmo bien pensado nos puede ayudar mucho a reducir el código y a mejorar el rendimiento…..

Saludos y que Dios te Bendiga….. Comentar es gratis

Anuncios

2 pensamientos en “Pensando en Python, Diferentes Formas de hacer las cosas [parte1]

    • No es para tanto, se que aun me queda mucho camino que recorrer solo en python :D, pero escribir en el blog me esta dando la capacidad de pensar cada vez mas como quiero a la hora de enfrentar algún problema tanto en la programación como en la vida… Gracias, Dios te bendiga

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s