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

in #spanish8 years ago (edited)

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

Coin Marketplace

STEEM 0.20
TRX 0.15
JST 0.029
BTC 64572.94
ETH 2630.79
USDT 1.00
SBD 2.82