Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Henoc Díaz

May 05, 2016
Tweet

More Decks by Henoc Díaz

Other Decks in Programming

Transcript

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

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

    Hackatones • Campus Party • Google Developer Summit @ Centraal @henocdz
  3. ¿Para qué lo usan? • Ciencia y análisis: Pandas, SciPy

    • Aplicaciones de escritorio: Kivy, PyQt • Desarrollo web: Django, Pyramid, Flask @henocdz
  4. Caracterís)cas • Open source • Sintaxis simple • Fácil de

    aprender • Extensible (CPython) • Portable • Mul?-paradigma @henocdz
  5. 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
  6. Tipado dinámico Una variable puede tomar cualquier valor de cualquier

    3po de dato en cualquier momento del programa >>> entero = 5 >>> entero = 'cinco' @henocdz
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. Operadores aritmé.cos # Suma (+) >>> result = 4 +

    10 14 # Resta (-) >>> 2014 - 2015 1 # Multiplicación (*) >>> 2 * 10 20 @henocdz
  15. 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
  16. 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
  17. 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
  18. Operadores de pertenencia >>> 5 in [3, 4, 10] False

    >>> 5 not in [3, 4, 10] True @henocdz
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. Input / Output >>> user_input = input('Dime tu nombre: ')

    Dime tu nombre: [[Henoc]] >>> print(user_input, type(user_input)) Henoc <class 'str'> @henocdz
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. [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
  35. [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
  36. 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
  37. Tips Puedes usar el módulo random para generar números aleatorios

    Por ejemplo: >>> import random >>> random.randint(1000, 9999) 8756 @henocdz
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. Creando instancias Podemos crear objetos o instancias así: # Nueva

    instancia >>> dany = Student( ... belt='Red', ... skills=['Python', 'Javascript'] ... ) @henocdz
  45. 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
  46. 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
  47. 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
  48. 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
  49. Aprender más • TalkPython Podcast • Fluent Python ! (el

    mejor libro) • Toptal Blog • Treehouse @henocdz