In [2]:
"""
IPython Notebook v4.0 para python 2.7
Librerías adicionales: Ninguna.
Contenido bajo licencia CC-BY 4.0. Código bajo licencia MIT. (c) Sebastian Flores.
"""

# Configuracion para recargar módulos y librerías 
%reload_ext autoreload
%autoreload 2

from IPython.core.display import HTML

HTML(open("style/iwi131.css", "r").read())


Out[2]:






IWI131

Programación de Computadores

Sebastián Flores

¿Qué contenido aprenderemos?

  • 1- Reglas del curso
  • 2- Características de python
  • 3- Consejos para aprender

¿Porqué aprenderemos ese contenido?

  • Conocer las reglas -> optimizar recursos y anticipar dificultades.
  • Características de python -> ¿porqué python?
  • Consejos para aprender -> optimizar recursos.

1- Reglas del Curso

  • Evaluaciones
  • Nota final
  • Sitio web
  • Conflicto de metodología

Evaluaciones

Obligatorias

  • 3 certámenes individuales.
  • 3 tareas en equipo.
  • 5 actividades.

Opcionales

  • 1 Certamen Recuperativo: reemplaza el peor certamen
  • Asistencia a Ayudantías: reemplaza el peor trabajo en equipo

Nota final:

Calcular:

$$ PP = 60\% PC + 20\% PT + 20\% PAE $$

Si $PC ≥ 55$ y $PP ≥ 55$:

$$ NF = PP$$

Sino:

$$ NF = \min(PC,PP) $$

Sitio web del ramo

Conflicto de metodología

  • Los certámenes ($60\%$ de la nota final) son en papel e individiduales.
  • Certámenes requieren las siguientes habilidades:
    • lectura
    • análisis
    • modelamiento
    • programación

Sobre este mí

  • Ingeniero Civil Matemático - UTFSM, Chile (2000).
  • Ingeniero y Magíster en Mecánica - Ecole Polytechnique, Francia (2005).
  • Magíster en Computación y Matemática Aplicada - Stanford, EEUU (2010).
  • Esval, Peugeot-Citroen, Lexity, CMM-UCh, Thinkful.
  • Proyectos de mecánica de sólidos y fluidos, minería, química y sismología.

Actualmente

  • Clases en el mundo real: IWI131 y MAT281
  • Clases online: Data Science @ Thinkful
  • Software para propagación de tsunamis

Mi visión de la educación

  • Todos pueden aprender, si hay esfuerzo.
  • Escuchar < Ver < Reproducir < Modificar < Crear < Innovar.

Mi visión de la programación

  • Python es fácil, útil y entretenido.
  • Programar es como andar en bicicleta o tocar piano.
  • Ingenieros que no sepan programar estarán en desventaja al egresar.

2- Sobre python

  • ¿Qué es python?
  • ¿Porqué python?

¿Qué es python?

  • Lenguaje de alto nivel: programar sin conocer el hardware.
  • Navaja suiza de lenguajes de programación.
  • 2 versiones:
    • 2.7: Utilizado en este curso
    • 3.5: Versión "consistente", todavía en adopción.

¿Porqué python?

  • Ampliamente utilizado en ingeniería
  • Fácil de leer, mantener y escribir
  • Gran cantidad de librerías
  • Alto nivel de abstracción
  • Ejecución directa
  • Gratis

Sobre este paralelo piloto

  • Responsabilidad: 50% profesor, 50% estudiantes.
  • Mutable: feedback es esencial.
  • Práctico: python para la vida, no para certámenes.
  • Interactivo: participación en clases NO es opcional.

Ejemplo 1

¿Que hace el siguiente archivo?


In [4]:
a, b = 2, 3
while b < 300:
    print b,
    a, b = b, a+b


3 5 8 13 21 34 55 89 144 233

Ejemplo 2

¿Que hace el siguiente código?


In [7]:
anexos = {'Cesar':4001, 
          'Sebastian': 4002}
anexos['Claudio'] = 4003

print anexos

del anexos['Claudio']
anexos['Patricio'] = 4004

print anexos

if "Sebastian" in anexos:
    print anexos["Sebastian"]

if "sebastian" in anexos:
    print anexos["sebastian"]
    
print anexos["Luis"]


{'Sebastian': 4002, 'Cesar': 4001, 'Claudio': 4003}
{'Sebastian': 4002, 'Cesar': 4001, 'Patricio': 4004}
4002
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-020ddbb1ddd0> in <module>()
     16     print anexos["sebastian"]
     17 
---> 18 print anexos["Luis"]

KeyError: 'Luis'

Ejemplo 3

¿Que hace el siguiente archivo?


In [8]:
import urllib2

def download_file(download_url):
    response = urllib2.urlopen(download_url)
    file = open("document.pdf", 'wb')
    file.write(response.read())
    file.close()
    print("Completed")

download_file("http://progra.usm.cl/Archivos/certamenes/Libro_prograRB.pdf")


---------------------------------------------------------------------------
URLError                                  Traceback (most recent call last)
<ipython-input-8-473eb9e21f63> in <module>()
      8     print("Completed")
      9 
---> 10 download_file("http://progra.usm.cl/Archivos/certamenes/Libro_prograRB.pdf")

<ipython-input-8-473eb9e21f63> in download_file(download_url)
      2 
      3 def download_file(download_url):
----> 4     response = urllib2.urlopen(download_url)
      5     file = open("document.pdf", 'wb')
      6     file.write(response.read())

/usr/lib/python2.7/urllib2.pyc in urlopen(url, data, timeout)
    125     if _opener is None:
    126         _opener = build_opener()
--> 127     return _opener.open(url, data, timeout)
    128 
    129 def install_opener(opener):

/usr/lib/python2.7/urllib2.pyc in open(self, fullurl, data, timeout)
    402             req = meth(req)
    403 
--> 404         response = self._open(req, data)
    405 
    406         # post-process response

/usr/lib/python2.7/urllib2.pyc in _open(self, req, data)
    420         protocol = req.get_type()
    421         result = self._call_chain(self.handle_open, protocol, protocol +
--> 422                                   '_open', req)
    423         if result:
    424             return result

/usr/lib/python2.7/urllib2.pyc in _call_chain(self, chain, kind, meth_name, *args)
    380             func = getattr(handler, meth_name)
    381 
--> 382             result = func(*args)
    383             if result is not None:
    384                 return result

/usr/lib/python2.7/urllib2.pyc in http_open(self, req)
   1212 
   1213     def http_open(self, req):
-> 1214         return self.do_open(httplib.HTTPConnection, req)
   1215 
   1216     http_request = AbstractHTTPHandler.do_request_

/usr/lib/python2.7/urllib2.pyc in do_open(self, http_class, req)
   1182         except socket.error, err: # XXX what error?
   1183             h.close()
-> 1184             raise URLError(err)
   1185         else:
   1186             try:

URLError: <urlopen error [Errno -2] Name or service not known>

3- Consejos para aprender

  • Instalar python en sus computadores: gratis y sin riesgos.
  • Todo el contenido estará en los sitios web.
  • Repasen y estudien antes de cada clase: vengan a aprender.
  • Escuchar < ver < reproducir < modificar < crear < innovar.
  • Utilicen python para otros cursos y proyectos personales.

Resumen

  • Curso "interactivo": ustedes lo harán interesante.
  • Asistencia es importante.
  • Python se aprende con práctica:
    • instalen python en sus notebooks/computadores.
    • Si no tienen notebook/computador, hablen conmigo.