Save 37% off PRO during our Black Friday Sale! »

Taller Python en Español

Taller Python en Español

Pretende cubrir un taller de 5hrs impartido para la Universidad Autónoma del Estado de Hidalgo

A04788bd45feba612272eaef0f4a01ee?s=128

Henoc Díaz

May 05, 2016
Tweet

Transcript

  1. !" @henocdz

  2. print('¡Hola!') @henocdz

  3. Python en 5 horas. algo así ! @henocdz

  4. ! " # @henocdz

  5. Henoc Díaz ! la H es muda ! @henocdz

  6. Fullstack Developer asis$a.mx @henocdz

  7. • Código Facilito • Colegio de México • Pingstamp •

    Angel Ventures México • DevF Startups • bi$el.mx • cuper.no.mx @henocdz
  8. Mentoria • Startup Weekend • AngelHack • Liga Mexicana de

    Hackatones • Campus Party • Google Developer Summit @ Centraal @henocdz
  9. sí, sí, sí ! @henocdz

  10. Vamos a lo bueno !"! @henocdz

  11. Primero ¿todos tenemos Python instalado? # terminal $ python3 -V

    Python 3.5.1 @henocdz
  12. ¿no? @henocdz

  13. ! Houston we have a problem... " @henocdz

  14. ahora sí @henocdz

  15. !" @henocdz

  16. ¿Quiénes usan Python? @henocdz

  17. ¿Para qué lo usan? • Ciencia y análisis: Pandas, SciPy

    • Aplicaciones de escritorio: Kivy, PyQt • Desarrollo web: Django, Pyramid, Flask @henocdz
  18. ¿Python ¡eh!? ! @henocdz

  19. Caracterís)cas • Open source • Sintaxis simple • Fácil de

    aprender • Extensible (CPython) • Portable • Mul?-paradigma @henocdz
  20. Caracterís)cas más técnicas @henocdz

  21. Fuertemente )pado Una variable no puede ser tratada como algún

    otro 5po sin hacer una conversión explícita >>> 5 + '5' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> 5 + int('5') 10 >>> @henocdz
  22. Tipado dinámico Una variable puede tomar cualquier valor de cualquier

    3po de dato en cualquier momento del programa >>> entero = 5 >>> entero = 'cinco' @henocdz
  23. Oye ¿es compilado o interpretado? @henocdz

  24. ¡DEPENDE! @henocdz

  25. ❓ @henocdz

  26. Python es... Python es una interfaz, existe una especificación que

    define lo que debe hacer y su comportamiento, sin embargo, dependerá de la implementación la respuesta a esta pregunta. @henocdz
  27. La implementación más común: CPython Es interpretado con una especie

    de compilación Lee el códio de Python y lo transforma a bytecode para después ser interpretado y ejecutado en la Máquina Virtual de CPython @henocdz
  28. Demasiada teoría ! " @henocdz

  29. Manos a la obra !" @henocdz

  30. Primero ” @henocdz

  31. ¿Cómo, dónde o con qué, escribo y ejecuto mi código?

    @henocdz
  32. Opción 1 Directo en el shell de Python, así $

    python3 Python 3.5.1 (default, Dec 7 2015, 21:59:10) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 5 + 5 10 >>> print('Oh Python!') Oh Python! @henocdz
  33. Opción 2 Creando un archivo de Python, por ejemplo hola.py

    # hola.py print(5 +5) print('oh Python!') Y luego lo ejecutamos, así: $ python hola.py @henocdz
  34. Que no se les olvide ! @henocdz

  35. ! @henocdz

  36. Código, código, código ! @henocdz

  37. Tipos de dato # Numbers a_integer = 2623 # Up

    to sys.int_info * a_float = 69.89 # Up to sys.float_info * #Booleans of_horse = True nope = False # Nothing my_money = None @henocdz
  38. Tipos de dato # Secuencias a_string = 'Python es genial!'

    # Son inmutables a_string_quotes = "Python es amor" a_string_triple = '''Python es vida!''' a_list = [1, [2], 1, a_string, 3.67] # Cualquier tamaño, cualquier tipo de dato a_tuple = (5, ['z'], 89, ) # Mismas reglas que las listas, pero la tuplas con inmutables a_tuple_comma = 5, ['z'], 89, # La coma es el caracter que sepera los elementos a_set = set([1, 1, 4, 1]) # =[1,4] Colección sin datos duplicados @henocdz
  39. Tipos de dato # Diccionarios a_dict = { # La

    llave puede ser cualquier objeto inmutable # (i.e, numeros, cadenas, tuplas) 'una_llave': 'algún valor', 4: 'otro valor', a_tuple: a_list # Las tuplas pueden ser llaves si sus elementos son inmutables } @henocdz
  40. Operadores @henocdz

  41. Operadores aritmé.cos # Suma (+) >>> result = 4 +

    10 14 # Resta (-) >>> 2014 - 2015 1 # Multiplicación (*) >>> 2 * 10 20 @henocdz
  42. Operadores aritmé.cos (cont) # Divisiòn (/) >>> 10 / 2

    5.0 # Tipo float # Floor Division (//) >>> 10 // 2 5 # Tipo entero # Modulo (%) >>> 14 % 2 # Exponente (**) >>> 2 ** 2 4 @henocdz
  43. Operadores de comparación # Evalúa si dos elementos son iguales?

    >>> 10 == 10 True # Evalúa si dos elementos NO son iguales >>> 10 != 5 True # Evalúa si el argumento izquierdo es menor que el derecho >>> 14 < 2 False # Viceversa >>> 14 > 2 True # >= y <= también son soportados @henocdz
  44. Operadores de asignación >>> algo = 'clásico' # Se pueden

    combinar operadores aritméticos con operadores de asignación # algo así: >>> algo *= 3 'clásicoclásicoclásico' @henocdz
  45. Operadores de pertenencia >>> 5 in [3, 4, 10] False

    >>> 5 not in [3, 4, 10] True @henocdz
  46. Formateo de cadenas La manera correcta para concatenar dos cadenas

    o combinarlas con otros objetos # La forma simple "Me gusta {}".format('programar') # La forma simple #2 "Me {1} {0}".format('programar', 'gusta') # La manera 'compleja' "Me {verbo} {accion}".format(accion='programar', verbo='gusta') @henocdz
  47. Herramientas para control de flujo @henocdz

  48. Sentencias condicionales IF-ELSE some_bool = True # if-else structure >>>

    if some_bool: ... print('Some bool it\'s True!!') >>> else: ... print('Some bool it\'s not True :(') @henocdz
  49. IF-ELSE-IF >>> alumnos = True >>> sensei = False >>>

    if alumnos and sensei: ... print('Estamos listos!') >>> elif alumnos: ... print('Esperando al sensei...') >>> elif sensei: ... print('Esperando por alumnos...') >>> else: ... print('F**k!') @henocdz
  50. INLINE IF-ELSE >>> listos = True if alumnos and sensei

    else False @henocdz
  51. FOR # Itera sobre una secuencia # (list, tuple, string,

    bytes, bytesarray, etc.) >>> alumnos = ('Sofía', 'Gustavo', 'Mariana', 'Alfonso') >>> for alumno in alumnos: ... print(alumno) Sofía Gustavo Mariana Alfonso @henocdz
  52. FOR TRADICIONAL # range(5) > [0, 1, 2, 3, 4]

    # range(4, 5) > [4] >>> for i in range(0, 5): ... print(i) 0 1 2 3 4 @henocdz
  53. WHILE # Comprueba si la expresión es verdadera, si lo

    es, ejecuta el bloque; # si la expresión es falsa, termina el ciclo >>> somos_geniales = True >>> while somos_geniales: ... mantenerse_genial() @henocdz
  54. BREAK & CONTINUE Podemos controlar los loops/ciclos con 1. break:

    termina de manera abrupta el ciclo 2. con)nue: ignora el resto del bloque y con8núa con la siguiente evaluación >>> while True: ... if estoy_cansado: ... break @henocdz
  55. I/O (Entrada/Salida) Comunicación con usuarios reales @henocdz

  56. Input / Output >>> user_input = input('Dime tu nombre: ')

    Dime tu nombre: [[Henoc]] >>> print(user_input, type(user_input)) Henoc <class 'str'> @henocdz
  57. Cast / Conversión de /pos >> int('4') 4 >> float('4')

    4.0 >> str(4) '4' @henocdz
  58. ! @henocdz

  59. Y ahora qué? ! @henocdz

  60. Ejercicios ! @henocdz

  61. Guías de es)lo Por ejemplo: No uses Cammel Case con

    funciones o variables, en su lugar debes usar snake case, es decir: def estoEsIncorrecto(): def esto_correcto(): 1. PEP8: Guía de es/los para Python (Oficial) a. h>ps:/ /www.python.org/dev/peps/pep-0008/ 2. Google Style Guide, :eye: en como comentar b. h>p:/ /google.github.io/styleguide/pyguide.html @henocdz
  62. 1: Hola Python! ! Entrada: Nombre dado por el usuario

    o vació ('') Salida: 'Hola {NOMBRE}', si el usuario indicó algún valor, 'Hola Mundo' en caso contrario Ejemplo: Dime tu nombre: Henoc Hola Henoc! # o Dime tu nombre: Hola mundo! @henocdz
  63. 2: Pangrama Pangrama: Conjunto de caracteres que incluye todas las

    letras del abecedario por lo menos una vez Entrada: Cualquier cadena de texto Salida: Indicar si la palabra es un pagrama o no Por ejemplo: ```bash Ingresa la cadena: abcdefghijklnmporstquvwxzy Es un pagrama. Ingresa la cadena: que flojera No es un pangrama ¬¬ ``` @henocdz
  64. 3: Contador de letras ! Entrada: Cualquier cadena de texto

    Salida: Letras que incluye la cadena y cuantas veces se repite en la frase Ejemplo de salida (entrada: anita lava la 3na) a: 6 n: 2 i: 2 t: 2 v: 1 @henocdz
  65. 4: Series Entrada: Una cadena que con+ene dígitos (0-9) Salida:

    Todas las subcadenas con+guas de N caracteres Por ejemplo, la cadena "49142" 4ene las series de 3 dígitos: 491 914 142 O si son de 4 dígitos 4914 9142 @henocdz
  66. ! @henocdz

  67. Sigamos ! @henocdz

  68. Funciones >>> def dime_la_verdad(): ... print('Que la fuerza esté contigo!')

    >>> def funcion_con_parametros(un_parametro): ... print(un_parametro) >>> def funcion_con_valores_por_default(un_parametro, tiene_defaults=True): ... """Params with no default value must be defined first""" ... print(un_parametro, tiene_defaults) >>> def dame_el_año(): ... # Sí, podemos usar ñ en las funciones, pero por favor no lo hagan jaja ... return 2016 @henocdz
  69. Funciones Lambda/Anónimas/Sin nombre >>> haz_algo = lambda un_numero: un_numero *

    un_numero >>> haz_algo(14) 196 @henocdz
  70. Ejecutar funciones >>> dime_la_verdad() May the force be with You!

    >>> funcion_con_parametros('A string!') A string! >>> funcion_con_valores_por_default('not a number') not a number, True >>> funcion_con_valores_por_default('a number', False) a number, False >>> funcion_con_valores_por_default('default', tiene_defaults=False) default, False >>> dame_el_año() 2016 @henocdz
  71. Exercises @henocdz

  72. [1] Traslape de listas Toma dos listas, por ejemplo: a

    = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] Escribe un programa que regresa una lista la cual con3ene elementos que ambas listas (a y b) 3enen. Asegúrate de que el programa funciona con listas de dis3ntos tamaños. @henocdz
  73. [2] Vacas y Toros Juguemos Vacas y Toros. De manera

    aleatoria genera un número de 4 dígitos. Pídele al usuario que intente adivinar los 4 dígitos del número. Por cada dígito que el usuario adivine 8enen una VACA y por cada número que introduzca mal 8ene un TORO; ten en cuenta que el dígito debe estar en la misma posición. Por cada vez que lo intente, díle al usuario cuantas vacas y cuantos toros 5ene. El juego termina cuando el usuario adivina los 4 dígitos. Al finalizar, imprime en pantalla el historial de intentos que hizo el usuario @henocdz
  74. Por ejemplo: Supongamos que el número generado aleatoriamente fue 1238.

    An example interac8on could look like this: Bienvenido al juego de Vacas y Toros! Ingresa un número: 1234 2 cows, 2 bulls Ingresa un número: 3821 1 cow, 3 bull Así hasta que el juego termine. @henocdz
  75. Tips Puedes usar el módulo random para generar números aleatorios

    Por ejemplo: >>> import random >>> random.randint(1000, 9999) 8756 @henocdz
  76. Ejercicio extra • [1] Generar dos listas aleatorias para probar

    @henocdz
  77. @henocdz

  78. Paquetes y módulos ! @henocdz

  79. Módulos Archivo que con-ene deficiones de Python como funciones, variables

    o clases. O sea que casi todos los archivos son módulos. # Archivo: my_math.py def zum(a, b): return a + b def potencia(a, b): return a ** b @henocdz
  80. We can import a module in other modules like this

    # Nombre de archivo: otro_archivo.py >>> import my_math >>> print(my_math.zum(3, 4)) 7 # O solo una definición con >>> from my_math import zum >>> print(zum(1, 2)) 2 # Una definición con alias >>> from my_math import zum as my_sum >>> print(my_zum(12, 12)) 24 @henocdz
  81. Archivo de script vs Módulo Si le pasamos el archivo

    del módulo al intérprete ($ python3), ejecutará el archivo como un archivo script, esto significa que el contenido del archivo se ejecutará tal y como está de manera inmediata. Si no queremos ese comportamiento, podemos usar la variable global __name__ para el código que queremos se ejecute como script, así: if __name__ = '__main__': print('Ejecutando en "modo" script...') La variable global __name__ con.ene el nombre del módulo, pero si el módulo es ejecutado como script, esta variable con.ene la cadena __main__ @henocdz
  82. Paquetes/Packages Carpeta que con-ene otros paquetes o módulos utils/ __init__.py

    my_math.py ... my_script.py U"liza el archivo __init__.py para conver"r un folder a paquete @henocdz
  83. Y luego podemos importar módulos del paquete u"ls así: #

    importar definicion >>> from utils.my_math import zum >>> zum(a, b) # import módulo >>> from utils import my_math >>> my_math.zum() @henocdz
  84. ! Let's rock @henocdz

  85. Programación orientada a objetos @henocdz

  86. Clases Básicas class Student(object): """The Doc string, used for documenting

    our class""" # Class attributes skills = [] def __init__(self, belt, skills): # self points to the current instance self.belt = belt self.skills = skills def get_skills(self): # self is required return self.skills @henocdz
  87. Creando instancias Podemos crear objetos o instancias así: # Nueva

    instancia >>> dany = Student( ... belt='Red', ... skills=['Python', 'Javascript'] ... ) @henocdz
  88. Llamada a métodos >>> dany.get_skills() ['Python', 'Javascript'] @henocdz

  89. Accediendo a atributos # Cualquiera tiene acceso a los métodos

    y atributos >>> dany.skills ['Python', 'Javascript'] >>> dany.belt 'Red' # We can modify class attributes >>> Student.skills [] @henocdz
  90. Herencia class A(object): def some_method(self): print('something') class B(A): def some_method(self):

    print('I\'m the class `B :)') super(B, self).some_method() # Basic Inheritance is from left to right class C(A, B): pass Algoritmo Super-pro para determinar la precedencia en herencia múl2ple : h4ps:/ /www.python.org/ download/releases/2.3/mro/_ @henocdz
  91. Magic Methods / Métodos mágicos Como este __init__ Podemos u)lizar

    estos métodos mágicos para sobre escribir el comportamiento de algunos operadores, por ejemplo: class Student(object): ... def __add__(self, other): if isinstance(other, self.__class__): skills = self.get_skills() + other.get_skills() belt = self.belt + other.belt return Student(belt, skills) @henocdz
  92. Más y Más ejercicios ! @henocdz

  93. Entornos virtuales Isolated Python environments Imagine that you have two

    applica3ons and both depends on MyPackage, but the first one requires version 1 of MyPackage and the later one requires version 2 of MyPackage. The solu)on for that is a virtual environment. In Python 3 you can do so with this command: # pyvenv command it's installed when you install Python3 $ pyvenv ENV_DIR ENV_DIR is the folder where our virtualenv will be installed. @henocdz
  94. Recursos @henocdz

  95. Aprender más • TalkPython Podcast • Fluent Python ! (el

    mejor libro) • Toptal Blog • Treehouse @henocdz
  96. Más ejercicios • exercism.io @henocdz

  97. Otros • Awesome Python • iPython • Sphinx @henocdz

  98. ¡GRACIAS! ! @henocdz

  99. !" @henocdz

  100. @henocdz