Página inmutable History Adjuntos

Cursos/Principiantes/Parte1

Nombre de la página: Cursos / Principiantes / Parte1



¿Lenguaje de programación?

Las computadoras son, en esencia maquinas "tontas", a las que se les requiere indicar las instrucciones de manera extremadamente detallada; para esto desde hace mas de 50 años se han creado una variedad muy grande de lenguajes de programación y así facilitar el trabajo de indicar que hacer a una computadora.

Conforme pasa el tiempo, es común que las cosas tiendan a depender de capas de abstracción inferiores.

¿Por qué aprender python?

Python es un lenguaje de alto nivel, interpretado, de propósito general y tipeado dinámico.

Esto quiere decir que se puede utilizar para una gran cantidad de fines, por mencionar algunos:

  • Programas de escritorio (convencionales)
  • Aplicaciones web
  • Aplicaciones de servidor
  • Aplicaciones móviles
  • Exploración de datos
  • Acceso a un gran ecosistema de programación científica de alto rendimiento

Variables y tipos de datos

El concepto de variable, es el mismo que en muchas otras disciplinas, es una referencia a un objecto, desde un sentido abstracto, un ejemplo practico sería decir que es como ponerle etiquetas (referencias) a un conjunto de cajones (objectos).

A lo que una variable puede hacer referencia (el objeto), esta delimitado sobre lo que el lenguaje puede entender, es donde entran los tipos de datos.

Estos son los tipos de datos básicos:

  • Enteros (Integers)
  • Boleanos (Boolean)
  • Reales (Float)
  • Cadenas (String)

Cuando se dice que python es un lenguaje dinámico, se refiere a que nuestras variables no están limitadas a contener/apuntar siempre al mismo tipo de dato durante la ejecución; el que python sea dinámico e interpretado no significa que no existan los tipos de datos.

Ejemplos

Enteros / Integers

   1     1
   2     -16
   3     -1
   4     0

Reales / Punto Flotante / Floats

   1     3.14159
   2     -13134.23
   3     -90.1

Boleanos / Booleans

Los únicos dos posibles valores:

   1    True
   2    False

Respetando la capitalización, python distingue entre mayúsculas y minúsculas

Cadenas / Strings

   1     "Café"
   2     "Reloj"
   3     'monterrey'

Espacios en blanco y sentencias

La forma de delimitar las sentencias en python es a través de espacios y saltos de lineas, muy parecido a como delimitamos nuestro lenguaje natural (español).

Estos son ejemplos de sentencias/instrucciones en python::

   1     print("Hola mundo")=
   2     1 * 90 - 23
   3     pais = "México"
   4     for i in range(10):
   5         print(i)

Comentarios

Los comentarios, es una parte esencial al momento de programar código que piensas será leído el día de mañana, simplemente, sirven como referencia para los programadores del futuro y que estos, no tiendan a insultarte por tus decisiones; ya más en serio, se considera un buena practica comentar el código que necesita ser asistido sobre la lógica que se intenta plasmar en el código, no más.

En python se usa el carácter # para representar la linea que se va a ignorar en la ejecución y ser incluido únicamente como comentario.

   1    # Esto imprime hola mundo
   2    print("Hola Mundo")
   3    # El comentario anterior es completamente irrelevante.

Operaciones matemáticas

No todo programa se trata de estar haciendo muchas operaciones matemática, la mayor parte del software comercial, se trata de manipular cadenas (que luego vamos a ver a detalle), pero sin duda es absolutamente fundamental conocer al menos las operaciónes básica, las cuales tienen una representación muy parecida al lenguaje de matemáticas que estamos acostumbrados:

  • + Adición
  • - Sustracción
  • * Multiplicación
  • / División
  • **` Exponencial
  • % Módulo (residuo de una división)

Cadenas / Strings

Las cadenas son un tema central a python, en el corazón muchos tipo de programas son solo unos manipuladores de cadenas.

Las cadenas son un conjunto de caracteres (letras) que se están enlazadas formando una cadenas de caracteres, usualmente conocido como cadena o string.

Ejemplos de strings:

   1    "Esto es una cadena"
   2    'Esto es otra cadena'

Concatenando cadenas

Algo común que se llega a ver en código de python es la concatenación de cadenas (unir dos cadenas) aún y cuando no es recomendado esta concatenando cadenas a diestra y siniestra se utiliza el operador + para realizar esa labor:

   1 dia = '14'
   2 mes  = 'Junio'
   3 anio = '2013'
   4 
   5 #concatenando
   6 
   7 dia + ' ' + mes + ' ' anio # resulta en: '14 Junio 2013'

Métodos de strings

Al ser un tipo de dato común y versátil; los strings tienen un conjunto de métodos que están diseñados para operar sobre la cadenas que los contiene, siendo algunos de los mas comunes:

  • upper
  • lower
  • split
  • join

Por ejemplo:

   1   mes = "Mayo"
   2   mes.upper()
   3   mes.lower()
   4   mes.split('')

Nótese como usamos el operador punto . para llamar a cada método, de momento no vamos a adentrar sobre sus funcionalidad, en el Cursos/Principiantes/Parte5 adentramos en el tema.

Print

Print es de las instrucciones básicas, el "print" no significa que imprime cosas en un papel, si no que, representa "la impresión de caracteres en la pantalla", o mas técnico, la escritura en la salida estándar.

Ejemplos:

   1     print("Hoy es Mayo del 2013")
   2     print(1)
   3     print(24 * 34)
   4     print(3 ** 2)

Uso avanzado de print

La función print, ademas de escribir directamente lo que se le esta alimentando, puede utilizar los argumentos que recibe para construir una cadena siguiendo un formato definido para construirla.

Estos son algunos ejemplos:

   1     print("Hola %s mi nombres es %s." % ("Pedro", "Joel"))

Introducción al control de flujo

El control de flujo, se refiere a las posibles vertientes que puede tener la ejecución de un programa a partir de condiciones especiales, las usamos todo los días en nuestra vida diaria, por ejemplo:

  • "Ve a la tienda y "si hay tomates", compra dos."

eso se puede representar en python como:

   1    if tienda.tiene('tomates'):
   2         tienda.compra(2, 'tomates')

Es fragmento anterior es un adelanto de lo que viene, no se asusten si se les hace extraño, lo importante es que es código valido y aún así es muy expresivo.

Operadores de comparación

Los operadores de comparación, son símbolos especiales que nos ayudan a evaluar de forma binaria (tiene dos elementos a comparar, no tiene nada ver con 10010101), las formas de validar una condición es a través de los siguientes operadores:

`==`
Igualdad
`!=`
Desigualdad
`>`
Mayor que
`<`
Menor que
`>=`
Mayor o igual que
`<=`
Menor o igual que
`in`
Existencia en conjunto
`not in`
Ausencia en conjunto
`is`
Igualdad de identidad del objeto
`is not`
Desigualdad de identidad del objeto

Cabe destacar que luego de evaluar cualquiera de esas expresiones existen solamente dos posibles resultados falso False y verdadero True. Los cuales se mencionaron en los tipos boleanos.

Un error muy común es el de confundir = asignación con == comparación de igualdad, recuerden un símbolo de igual "=" equivale a asignación, dos símbolos de igual "==" equivale a comparación.

Se considera buen estilo el dejar un espacio entre el operador y los operados:

   1 # valido
   2 1>=0
   3 # valido y con estilo ;)
   4 1 >= 0

Conjugaciones boleanas

Una vez que tenemos la herramientas básica para hacer comparaciones podemos conjugarlas a través de los siguientes operadores:

`and`

"Y", evaluá a True cuando las dos expresiones son verdaderas (True),

de lo contrario es falso (False).

`or`

"O", evaluá a True cuando al menos una de las dos expresiones son verdaderas (True)

de lo contrario es falso False.

`not`
Negación , invierte de True a False y viceversa.

Las conjugaciones boleanas en python son short circuit, esto quiere decir que se evalúan de izquierda a derecha y si al evaluar una condición es suficiente para la conjuración, como suele suceder con or, entonces deja de evaluar la expresión. En el siguiente ejemplo vamos a definir una función, pero esas se verán a detalle en Cursos/Principiantes/Parte2:

   1 def a():
   2    print("Ejecutando a!")
   3    return True
   4 
   5 def b():
   6    print("Ejecutando b!")
   7    return False
   8 
   9 # La siguiente expresión solo evaluara a()
  10 a() or b()

Es necesario anidar en paréntesis cada expresión que se piensa conjugar a un nivel superior.

Por ejemplo:

   1 persona = None
   2 num = 99
   3 (1 > 1 and 'a' in 'bc' ) or (num >= 20 and persona is None) # True

La estructura de control: if

if es una de las sentencias fundamentales para el control de flujo de todo programa.

Su estructure básica es la siguiente:

   1 if EXPRESIONES_BOOLEANAS:
   2    SENTENCIA_1
   3    SENTENCIA_2

En este caso EXPRESIONES_BOOLEANAS representa cualquier cantidad de las conjugaciones booleanas que se mencionaron en la sección anterior, donde sin importar la cantidad de operaciones que se conjuguen termina en una expresión que evalúa a True o False.

Por lo tanto, si EXPRESIONES_BOOLEANAS fuese la expresión 'python' == 'php', las sentencias SENTENCIA_1 y SENTENCIA_2 no se ejecutaría, dado que la expresión evalúa a False.

Transformando la estructura anterior al ejemplo mencionado el código podría versé así:

   1 if 'python' == 'php':
   2     print("El balance del universo ha sido alterado")
   3     print("\o/")

La segunda forma más común de if es la siguiente:

   1 if EXPRESIONES_BOOLEANAS:
   2    SENTENCIA_1
   3    SENTENCIA_2
   4    ...
   5 else:
   6    SENTENCIA_3
   7    SENTENCIA_4
   8    ...

Lo dicho de la forma más simple de if se mantiene en esta misma con la diferencia de que ahora se definen dos bloques de sentencias: SENTENCIA_1 y SENTENCIA_2 se evalúa en caso de que la condición resulte ser verdadera, es decir True, las sentencias SENTENCIA_3 y SENTENCIA_4 serán evaluadas en caso contrario, es decir, EXPRESIONES_BOOLEANAS evalúa a falso/False.

Cabe destacar que cada rama de posible evaluación es mutuamente excluyente a la otra. Es decir, no puede existir una condición en la que SENTENCIA_1, SENTENCIA_2, SENTENCIA_3 y SENTENCIA_4 sean evaluadas en la misma ejecución de programa.

Trasladando el ejemplo de la estructura anterior en código concreto de python, quedaría de la siguiente forma:

   1 if 'python' == 'php':
   2     print("El balance del universo ha sido alterado")
   3     print("\o/")
   4 else:
   5     print("Tristemente jamas sere evaluado")
   6     print(":|")

La tercer y forma, y forma final de la condición if es la siguiente:

   1 if EXPRESIONES_BOOLEANAS:
   2    SENTENCIA_1
   3    SENTENCIA_2
   4    ...
   5 elif SUB_EXPRESIONES_BOOLEANAS_1:
   6    SENTENCIA_3
   7    SENTENCIA_4
   8    ...
   9 elif SUB_EXPRESIONES_BOOLEANAS_2:
  10    SENTENCIA_5
  11    SENTENCIA_6
  12    ...
  13 else:
  14    SENTENCIA_7
  15    SENTENCIA_8
  16    ...

La condición else al final es opcional, pero se considera buena practica siempre incluir un else aún y cuando su evaluación nunca fuese a ocurrir en los casos previstos.

En esta forma final de la estructura de control if, se usa la palabra reservada: elif, la cual, proviende de la frase "else if", en español puede interpretarse como: "sino, entonces si:", por ejemplo una forma prosaica de presentar una condición de completa de if sería:

  • Si (nombre es igual a Python Monterrey): (imprimes Hola), sino, entonces si (nombre es igual a Python Mexico): (imprimes Adios), sino (imprimes Fin).

Lo anterior sería expresado en python de la siguiente forma:

   1 if nombre == "Python Monterrey":
   2     print("Hola")
   3 elif nombre == "Python Mexico":
   4     print("Adios")
   5 else:
   6     print("Fin")

No existe un limite predefinido para las condiciones de elif, más se considera una mala practica el tener bloques extensos dentro de cada rama o que se tenga un gran número de elif la misma sentencia if. Como regla general puede considerarse que más de dos elif en el mismo bloque refiere a código que está muy anidado y puede separarse en otra función, pero el asunto de las funciones corresponde a otra clase.

Nos vemos en el próximo capitulo.