Lectura - Introducción A La Programación
Lectura - Introducción A La Programación
Lectura - Introducción A La Programación
Python
Bienvenida
Objetivos
Conocer el alcance del módulo.
Conocer los requerimientos del módulo.
Conocer las herramientas que utilizaremos a lo largo del módulo.
Descripción
Durante este módulo se enseñan los aspectos más básicos y fundamentales para comenzar a
programar software, que corresponden a los algoritmos y a los controles de flujo. Estos conocimientos
son necesarios para programar en cualquier lenguaje de programación, no solo en Python. Luego se
introducen contenidos más específicos sobre la programación utilizando Python.
Anaconda está disponible para Windows, macOS y Linux, por lo que se requiere cualquiera de estos
sistemas operativaos. Su instalación se verá durante el desarrollo del módulo.
Introducción a la programación
Objetivos
Entender en qué consiste la programación.
Conocer el rol de un programador dentro de una organización.
Conocer la definición del algoritmo y su importancia dentro de la programación.
Conocer las entidades que forman parte de un diagrama de flujo.
Conocer la relación entre pseudocódigo y diagramas de flujo.
Conocer la importancia de la lógica independiente del lenguaje.
Conocer la importancia del desarrollo del pensamiento lógico.
¿Qué es programar?
Cuando hablamos de programar, nos imaginamos un hacker sentado frente a un computador
escribiendo código en una pantalla negra con letras verdes. Pero en realidad, este es un concepto
mucho más amplio. En términos generales, consiste en crear un programa o software. Este proceso
de creación es complejo, involucrando varias etapas, y quizá sea por esta complejidad que también
se le llama a este proceso "Desarrollar", y a los programadores "Desarrolladores".
Las soluciones propuestas por un programador se conocen como algoritmos, que se expresan en
código. El objetivo de un programador es desarrollar e implementar soluciones mediante los
algoritmos. El código es simplemente una de las formas en que se materializa la solución.
¿Qué es un algoritmo?
Un algoritmo no es más que es una serie de pasos finitos y ordenados para resolver un problema.
Ejemplo de algoritmo
Por ejemplo, si deseamos ensamblar un mueble es necesario seguir todos los pasos del manual de
manera secuencial. Otro ejemplo típico es crear un origami a partir de un trozo de papel, o una receta
de cocina.
Para poder indicar cómo preparar panqueques a otra persona, tenemos que indicar claramente todos
los pasos que debe hacer de manera secuencial. El omitir un paso afecta el resultado.
Escribiendo un algoritmo
Cuando generamos un algoritmo en el computador, debemos especificar paso a paso qué es lo que el
computador debe realizar. Esto es similar a cuando deseamos hacer un origami, debemos seguir
pasos.
Si el algoritmo utilizado para construir nuestro programa omite algún paso, o no sigue el orden
correcto, nuestro programa fallará, o no cumplirá con el resultado esperado. Es por ello que saber el
algoritmo, o pasos, para crear nuestro programa, es de suma importancia.
Si queremos arreglar una lámpara, nuestro proceso algorítmico conlleva los siguientes pasos.
En algunos diagramas, como en el anterior, el fin es implícito; Al llegar al último paso, se supone que
el algoritmo concluye. Esta distinción es necesaria para destacar que existen procesos donde no hay
fines explícitamente declarados.
Símbolos de un diagrama de flujo
Cada uno de los símbolos en un diagrama de flujo representa alguna acción a realizar en el algoritmo.
Inicio y fin del programa: Por defecto todo algoritmo debe tener una serie de elementos finitos.
Éstos se declaran mediante el inicio y el fin del programa.
Datos de entrada y salida: Cada paso que se genera dentro del algoritmo implica tomar algún
dato y devolver otro dato.
Procesos (la instrucción que le damos a la máquina): Definición de los pasos a seguir en un
algoritmo.
Decisiones: Eventualmente el flujo lógico podrá encausar los siguientes pasos en base a la
resolución de una decisión.
Pseudocódigo
Otra forma de representar un algoritmo es mediante el pseudocódigo, que consiste en* una serie de
frases que describen el flujo:
Algoritmo Suma
Leer valor1
Leer Valor2
Mostrar valor1 + valor2
FinAlgoritmo
En pseudocódigo se utiliza la instrucción leer para especificar que el usuario tiene que ingresar un
valor y mostrar para imprimir el valor en la pantalla.
Escribiendo pseudocódigo
Si bien la especificación del pseudocódigo no es formal, existen algunos programas que nos permiten
escribir pseudocódigo y ejecutarlo, como PSEINT.
Todo diagrama de flujo puede transformase a pseudocódigo y viceversa, así como a un lenguaje de
programación, aunque ésto no siempre será tan directo.
Para programar aprenderemos que es vital saber cómo comunicarle al computador la secuencia de
pasos a seguir. Escribir pseudocódigo y diagramas de flujo ayuda a reforzar esta habilidad.
¿Por qué es importante que sepamos esto?
Es importante porque los algoritmos y diagramas de flujo son independientes del lenguaje, es decir,
podemos implementar un mismo algoritmo en diferentes lenguajes de programación.
Un algoritmo corresponde a una solución lógica y pone a prueba nuestro desarrollo del pensamiento
lógico.
Enfrentándose a un problema
El desarrollo del pensamiento lógico es una habilidad imprescindible al momento de aprender a
programar y está directamente relacionado con nuestra manera de solucionar problemas. Antes de
escribir código, debemos abstraernos del código y pensar en el problema en los siguientes pasos:
1. Analizar el problema
2. Descomponer el problema en partes
3. Resolver el problema
Cuanto más desarrollemos nuestro pensamiento lógico, más rápido obtendremos soluciones a
problemas cotidianos en programación y nuestros programas harán más a menudo lo que
esperamos.
Objetivos
Conocer Python basics
Conocer la posición de Python dentro de los lenguajes más conocidos.
Conocer las ventajas de Python por sobre otros lenguajes.
Conocer el ecosistema de empresas que utilizan Python.
Conocer las distintas versiones de Python y cuál utilizaremos en el curso.
Revisar el problema de versiones de Python.
Conocer un administrador de versiones de Python.
Instalar un administrador de versiones de Python.
¿Qué es Python?
Python es un lenguaje de programación muy flexible y potente. Fue creado por Guido Van Rossum en
1991, con su primera versión 1.0 lanzada en 1994. Dado la claridad y deliberada simpleza de su
sintáxis, Python se ha transformado en uno de los lenguajes con mayores tasas de adopción y
demanda tanto en la industria.
Python permite:
Construir de forma sencilla aplicaciones web con manejos de bases de datos.
Hacer análisis de datos y visualización de éstos.
Realizar web-scrapping (Captura de datos de una página web).
Crear videojuegos.
Crear aplicaciones de escritorio.
La velocidad de la tasa de adopción se explica por varios factores directamente relacionados con el
diseño de Python. Dada su simpleza sintáctica y similitud al inglés, ha logrado convencer a expertos
de otras áreas que no sea programación (llámese matemáticas, lingüística, biología) a programar y
diseñar rutinas para agilizar su trabajo. Dado el énfasis en la comunidad de Pythonistas, la cantidad
de librerías y contribuciones lo han posicionado como una excelente primera alternativa para resolver
tareas.
¿Qué tan relevante es Python en la industria?
En los últimos años, Python se ha caracterizado por ser el lenguaje de programación con una mayor
tasa de adopción en comparación a sus principales competidores. Esto acorde a resultados de una
encuesta de StackOverflow, uno de los principales foros de programación a nivel mundial, quienes
procesaron los datos de sus usuarios.
Desarrollo Web: Páginas como YouTube, Instagram y Google implementan Python en sus
servicios. El lenguaje ofrece librerías como Django y Flask que permiten desarrollar servicios
webs complejos dentro de un marco de trabajo sencillo.
Ciencia de Datos y Aprendizaje de Máquinas: Dada la deliberada simpleza sintáctica de
Python, existe un gran desarrollo de librerías de análisis y preprocesamiento de datos por parte
de la academia e industria para agilizar las rutinas de análisis. Librerías como Scikit-Learn y
TensorFlow dominan la implementación de modelos predictivos en distintas áreas.
Python en Acción
¿Qué crees que hace la siguiente expresión?
for i in range(3):
print("hip hip hooray!")
sum([1, 2, 3, 4])
Para trabajar con una versión específica de Python, se debe trabajar con el administrador de
versiones adecuado. Existen varios administradores de versiones de Python, como pyenv ,
virtualenv y anaconda . Para efectos prácticos, nosotros trabajaremos con anaconda , un
administrador orientado al trabajo en ciencia de datos.
Objetivos
Conocer y utilizar Python desde la consola para ejecutar código.
Ejecutar scripts de Python desde la consola.
Leer la salida de un script ejecutado.
Conocer las limitantes de Python para la ejecución de código.
Conocer y utilizar iPython.
1. La primera es mediante el ambiente REPL (Read, Evaluate, Print Loop), que permite escribir
código directamente e ir probando los resultados de forma inmediata. Esto resulta muy útil para
probar código, pero no permite escribir un programa completo.
Si lo hicimos de forma correcta, deberíamos ver que el prompt cambió. Esto es porque ahora estamos
dentro de otro programa python .
Probando Python
Dentro de este programa podemos escribir instrucciones válidas para Python. Por ejemplo, podemos
escribir 2 + 2 y ver como resultado 4 .
Saliendo de Python
Para salir de Python, debemos escribir quit() . De esta forma volveremos al prompt original del
terminal.
Puedes escoger el editor que más te guste. Si no sabes cual escoger, te sugerimos utilizar Visual
Studio Code ya que es el que utilizaremos para los ejemplos del módulo.
Mostrando el resultado
Lamentablemente nuestro script no devuelve nada. Este comportamiento se debe a que cuando
ejecutamos un script desde el terminal, por defecto Python no devuelve el resultado de cada línea. Si
deseamos mostrar el resultado, debemos indicar a Python de manera explícita que muestre el
resultado en pantalla. Esto lo logramos con la instrucción print()
Ejecutando el programa
Si ejecutamos nuevamente el script, ahora sí veremos el resultado en pantalla:
Limitantes
Si bien Python se caracteriza por ser un lenguaje de programación de sintaxis simple, esto no
significa que no tenga reglas para escribir el código. Por ejemplo, Python no nos permite sumar letras
y números.
A lo largo del módulo y del curso, se irán viendo estas reglas en detalle según el contenido revisado.
Una muy importante de recordar es respetar la identación al interior de controles de flujo y funciones,
lo cual se verá más adelante.
Siempre que Python no sea capaz de ejecutar una instrucción debido a un error de sintaxis, se
mostrará un mensaje explicando el error.
Otra opción, estando en la terminal, es utilizar el kernel iPython en lugar de python . Al igual que
en un editor de texto, se resaltan distintos tipos de palabras o instrucciones en distintos colores, y
también realiza identación de forma automática.
Elementos básicos de Python
Objetivos
Definir comentarios, variables y constantes en Python.
Conocer y utilizar operaciones aritméticas en Python.
Manipular strings utilizando concatenación en Python.
Manipular strings utilizando interpolación en Python.
Manipular entrada y salida de datos utilizando print e input en Python.
Diferenciar un error sintáctico de uno semántico.
Muchos de los términos utilizados en este capítulo están definidos en el glosario, por lo que se
recomienda consultarlo en caso de existir duda sobre alguno.
Comentarios
Los comentarios son líneas de código que son ignoradas. Sirven para dar indicaciones y documentar
nuestro código a otros usuarios.
"""
Comentario multilínea:
Python
lo
ignorará
"""
print("hola")
hola
Indicación importante
A lo largo del módulo utilizaremos comentarios en algunos ejemplos para representar los valores
mostrados en pantalla.
print(2 + 2) # 4
Introducción a variables
Podemos entender las variables como contenedores que pueden almacenar valores. Éstos valores
que hay dentro del contenedor pueden variar, por ello su nombre "variable". Una variable se
compone de:
Un nombre
Un valor
Dentro de las convenciones de Python, se estipula que el nombre de una variable comienza con
minúscula, y si se requiere utilizar más de una palabra, éstas deben estar unidas por un guión bajo o
underscore. Los nombres de las variables no pueden tener espacios. Es importante también utilizar
nombres que sean representativos del valor que se quiere almacenar. Por ejemplo, si queremos crear
una variable de que almacene la cantidad de alumnos de un curso, su nombre podría ser
cant_alumnos_algebra .
Además, una variable poseerá un tipo de dato asociado, según el valor que se le asigne. Los tipos
de datos pueden ser, entre otros, integer , string , double o bool .
Integers
En Python -y en muchos otros lenguajes de programación- los números enteros se denominan
'enteros' y Integers. De tal manera, podemos decir que: La variable entero contiene un Integer y su
valor es 27.
entero = 27
Como el valor de la variable puede cambiar, a la variable entero se le puede asignar un nuevo
número sin problemas.
entero = 33
Strings
Una variable puede almacenar otros tipos de contenido. Por ejemplo, puede almacenar una palabra o
una frase.
saludo = 'hola'
A una palabra o frase se le conoce como cadena de caracteres o String. Un String puede estar
formado por:
a = 'Esto es un string'
b = a
print(b)
Esto es un string
saltos = "hola\na\ntodos"
print(saltos)
hola
a
todos
El salto de línea requiere ser utilizado dentro de comillas dobles para indicar que el backslash no
significa '' literalmente, si no que está escapando la n para transformarlo en un salto de línea.
Constantes
Las constantes también se componen de un nombre y de un valor. En otros lenguajes de
programación, a diferencia de las variables, su valor no se puede modificar. Se utilizan para
establecer valores que son de uso común y que no se debiesen modificar a lo largo del código. Por
ejemplo, podríamos utilizar una constante para almacenar el valor del IVA.
Como Python no posee una declaración especial para crear una constante, una buena práctica es
crear un archivo .py separado que contenga solo las constantes y sus valores asignados. Luego
este archivo se puede importar dentro de nuestro código para hacer uso de las constantes
declaradas.
Para diferenciar una constante de una variable, por convención el nombre de la constante se escibre
completamente en mayúsculas.
IVA = 0.18
NUMERO_PI = 3.14
a = 'HOLA'
b = ' MUNDO'
print(a + b)
HOLA MUNDO
Al asignar los valores utilizando comillas simples, Python los interpreta como String. Por ende, la
instrucción dada por el caracter + , para este caso, es de concatenar, no de sumar. En
programación, la acción de 'sumar' dos o más Strings se conoce como concatenación.
a = '7'
b = '3'
print(a + b)
73
Concatenación
Podemos obtener los mismo resultados utilizando concatenación e interpolación, sin embargo, se
prefiere la interpolación debido a que es más rápida y presenta una sintaxis más amigable para el
desarrollador.
nombre = 'Carlos'
apellido = 'Santana'
# Concatenación
print("Mi nombre es " + nombre + " " + apellido)
Interpolación
Otra acción muy importante y ampliamente utilizada al momento de trabajar con Strings es la
interpolación.
La interpolación es un mecanismo que nos permite introducir una variable (o un dato) dentro un
String, sin necesidad de concatenarlo. Para interpolar simplemente tenemos que introducir la variable
(o dato) utilizando la siguiente notación:
nombre = 'Carlos'
apellido = 'Santana'
# Interpolación
print("Mi nombre es {} {}".format(nombre, apellido))
print(count.nombre("a"))
obtenemos como resultado “1”, porque la letra “a” aparece 1 vez en el texto “Carlos”.
Len
Entrega la cantidad de letras o el “largo” del texto. Por tanto al ejecutar:
print(len(apellido))
Upper
Aplica letras mayúsculas a todo el texto:
print(apellido.upper())
Entrada de datos
Con frecuencia nuestro script necesitará interactuar con el usuario, ya sea para seleccionar una
opción de un menú o para simplemente ingresar un valor sobre el cuál nuestro script va a operar:
Podemos capturar datos introducidos por un usuario ocupando la instrucción input . Se utiliza de la
siguiente forma:
nombre = input()
print 'Hola {}!'.format(nombre)
10 + 2 * 5
Se debe tener en cuenta que no se pueden concatenar directamente a un string, es decir, si tenemos
la variable cadena = "2" e intentamos aplicar la suma:
print(cadena + 2)
Para poder aplicar la suma, primero debemos convertir la cadena a integer con la función
int(cadena) y luego aplicar la suma. De esta forma, al escribir:
print(int(cadena) + 2)
Hay veces en la que vamos a querer asignar valores a variables por medio del usuario, y en este
caso, la variable tomará el tipo de dato string.
Al solicitar el valor de a vemos que éste es "6". Por tanto, si queremos hacer la suma a + 2 nos
generará el mismo error anterior. Para solucionarlo, debemos aplicar el método int() a "a" .
argv
(En el editor de texto)
Otra manera para asignar valor a una variable es mediante argv, esto es cuando queremos ejecutar
un script.
Ejemplo:
Lo primero, es importar el módulo que nos permite rescatar argumentos desde el terminal:
import sys
Dentro de este módulo, llamaremos a la propiedad argv, la cuál corresponde a la lista de los
argumentos introducidos en el terminal.
El primer argumento (cuando se ejecuta un script) es el nombre del mismo, y se encuentra ubicado
en la posición 0 de la lista de argumentos.
Todo lo que se escriba después del nombre del script, corresponderá a los arumentos siguientes.
b = sys.argv[1]
Como la posición 0 era el nombre del script, accederemos a la posición siguiente, es decir 1, para
obtener el valor de esa posición.
python argumentos.py 20
Por lo tanto, nuevamente debemos transformar este dato a integer con el método int().
b = int(sys.argv[1])
(En el terminal)
Sumas y restas
Podemos operar con variables de tipo entero, tal como si estuviéramos operando con el número
mismo, por ejemplo:
a = 5
b = 2
print(a + 2)
print(b - a)
-3
Multiplicaciones y divisiones
Para realizar operaciones de multiplicación utilizaremos * y para operaciones de división
utilizaremos /
a = 10
b = 2
print(a * b)
20
print(a / b)
5.0
Sobreescribiendo variables
Podemos sobreescribir el valor de una variable realizando una nueva asignación:
a = 'HOLA!'
print(a)
HOLA!
a = 100
print(a)
100
Modificando una variable existente
También podemos modificar el valor de una variable operando sobre ella misma. Este tipo de
operación es muy utilizada:
a = 2
a = a + 1
print(a)
num1 = input() #4
num2 = input() #6
num1 + num2
'46'
num1 = int(input()) #4
num2 = int(input()) #6
num1 + num2
10
Errores sintácticos vs errores semánticos
Los errores podemos clasificarlos en dos tipos: sintácticos y semánticos.
Los errores sintácticos son muy similares a los errores gramaticales, donde escribimos algo que
contraviene las reglas de como debe ser escrito.
Por ejemplo, el valor de una variable se asigna de izquierda a derecha ( a = 5 ), mientras que lo
contrario ( 5 = a ) sería un error sintáctico. En este caso, Python nos informará del error.
Los errores semánticos en cambio, son muy distintos. Cuando se tiene un error semántico, el
programa funcionará de forma normal, pero el resultado será distinto al esperado. Los errores
semánticos son errores de implementación o de diseño, y, como Python no nos ha indicado el
error, a menudo son más difíciles de detectar.
decimal = 10.5
En Python, se debe tener en cuenta que al aplicar una división entre 2 números enteros, el resultado
será un float, aunque el resto de la división sea 0.
a = 10
b = 5
print(a/b) #2.0
print(int(a/b)) #2
El otro tipo de dato que se utiliza con frecuencia, y que aplicaremos más adelante cuando veamos
control de flujo, son los booleanos. Una variable booleana solo tiene 2 valores posibles, True o
False .
Se puede asignar directamente asignando True o False a una variable (primera letra con
mayúscula, sin comillas), o asignando una expresión que de como resultado True o False (se verá en
detalle cuando se vea control de flujo):
diestro = True
animal = False
Importancia del tipo de dato
Para terminar el capítulo, enfatizar que saber el tipo de dato con el que estamos trabajando es
sumamente importante. Si no se respetan de cada tipo de dato, nos enfrentaremos a problemas para
realizar lo que queremos hacer, como era el caso de hacer una suma a un valor asignado por el
usuario.
Por ello, resulta útil conocer la función type() . Esta función nos entregará el tipo de dato con el que
estamos trabajando.
a = "2"
type(a) # str
Si se necesita manejar la variable como un int, esto se soluciona utilizando la función int() . De la
misma forma, también se puede aplicar la función str() para convertir una variable a tipo string o
float() para convertir una variable a tipo float.
Resumen
En este capítulo se habló de varios elementos claves para construir un programa en Python. Estos
son:
Objetivos
Definir objeto y método.
Conocer la documentación oficial de Python.
Interpretar documentación oficial de Python.
Conocer la sintaxis de métodos y argumentos.
Objetos y métodos
Hasta el momento hemos trabajado con tipos de dato Integer y String. En Python, y en los lenguajes
de programación "orientados a objetos", estos tipos de dato corresponden a Clases .
Un objeto es la unidad más básica que puede tener un componente de un programa, y corresponde a
una instancia de una clase. Por tanto, una variable de tipo String, será un objeto, ya que es una
instancia de la clase String. Los objetos tienen asociadas todas las propiedades y métodos que posee
la clase a la cual están instanciando.
Los métodos corresponden a operaciones que realizamos sobre los objetos, considerando que tienen
ciertas restricciones. Por ejemplo, el método + nos permite sumar dos enteros, o concatenar dos
strings, pero no nos permite sumar un string con un entero.
input()
format()
operaciones como +
Supongamos que deseamos contar cuántas letras existen en la cadena 'Lorem ipsum dolor sit
amet' . Para ello, podemos utilizar la función nativa de Python len .
26
Recordar que cada objeto creado vendrá con una serie de métodos asociados. Si deseamos ocupar
alguno de estos, debemos implementar la sintáxis: objeto.metodo() .
Por ejemplo, si deseamos transformar todas las letras de la cadena a mayúsculas, podemos ocupar
el método upper asociad a los objetos de tipo string .
cadena.upper()
Parámetros y retorno
Por ejemplo, el método count del objeto String recibe un substring (un conjunto de caracteres mas
corto) como argumento, para poder contar cuántas veces está contenido ese substring en el String
principal.
Imaginemos que queremos saber cuantas letras 'i' tiene la frase Lorem ipsum dolor sit amet .
Para ello, se debe llamar al método count del objeto cadena , y especificarle como parámetro la
letra i :
cadena.count('i')
El retorno de un método
Además de los parámetros, los métodos tienen como característica que nos pueden devolver o
retornar un resultado. Lo que devuelve un método se conoce como el retorno del método.
De tal manera, podemos decir que el método count del objeto String:
'paralelepipedo'.count('p')
3
También puede ocurrir que el método utilizado no tenga retorno, y que se aplique el resultado
automátocamente a la variable que se esta operando.
Por ejemplo, cuando más adelante estudiemos listas veremos que append es un método utilizado
para agregar elementos a la lista.
lista = []
lista.append("perro")
¿Y los paréntesis?
Cuando utilizamos un método, todo argumento debe pasarse entre paréntesis.
Para saber si el método que queremos utilizar recibe parámetros, y si tiene retorno y de qué tipo,
debemos revisar la documentación oficial.
Documentación
Para conocer qué operaciones son válidas sobre un objeto, debemos leer su documentación oficial.
Comenzaremos revisando uno de los objetos que más se ha utilizado en la lectura: Los integers.
Leyendo la documentación
La manera más fácil de encontrar la documentación asociada a un elemento en específico es
utilizando el buscador integrado a la página de documentación, el cual se encuentra en la esquina
superior derecha.
Al consultar por integer , Python nos redireccionará a la sección de tipos de datos numéricos. En
esta página, se encuentran los detalles de cuál es la definición de un dato de tipo numérico.
Si hacemos click en int , la documentación hará referencia a la clase que permite generar un
número entero.
'paralelepipedo'.count('p')
3
Ejercitando lo aprendido
Lo aprendido lo podemos utilizar para crear un pequeño programa donde el usuario introduce un valor
y mostramos la cantidad de letras:
Algoritmo
Código
content = input()
letters = len(content)
print("El contenido {} tiene {} letras".format(content, letters))
Objetos
Los tipos de datos son realmente objetos (Esto es en Python y solo aplica a algunos lenguajes).
Los objetos tienen métodos que nos permiten realizar todo tipo de acciones.
Métodos
Documentación
Objetivos
Identificar un entero en Python.
Identificar un flotante en Python.
Identificar un string en Python.
Identificar un boolean en Python.
Diferenciar el comportamiento de método + en Integer vs String.
Transformar Strings a Integers.
Recapitulación de objetos
En Python existen distintos tipos de datos. Ya sabemos que estos tipos de datos son objetos, por
ende, lo correcto es llamarlos tipos de objeto.
Por ejemplo, si dentro de la consola de Python escribimos type(2) , obtendremos como resultado
int , o si probamos con type('hola') obtendremos como resultado str .
suma = 5 + 2
type(suma)
int
otra_suma = 2.3 + 0.1
type(otra_suma)
float
Por ejemplo: Al sumar dos números obtenemos el resultado de la suma, pero al sumar dos palabras
obtenemos la concatenación de estas.
En algunas situaciones, cuando faltemos a estas reglas, las operaciones no serán válidas.
Concatenando strings
Observemos el siguiente ejemplo: el método + del objeto String recibe como parámetro otro String a
concatenar.
'Hola Mundo'
"HOLA" + 2
--------------------------------------------------------------------------
<ipython-input-36-8946f4d722d7> in <module>()
----> 1 "HOLA" + 2
"Hola" + str(2)
Hola 2
1020
int(2018)
2018
str(2018)
'2018'
30
Operaciones aritméticas
En este capítulo aprenderemos a hacer aplicaciones del tipo de calculadora, donde los usuarios
ingresan valores y le entregamos resultados.
Objetivos
Construir aplicaciones para calcular una función matemática.
Operadores aritméticos
Los operadores aritméticos nos permiten realizar operaciones matemáticas sobre números.
+ Suma 2+3 5
- Resta 2-3 -1
* Multiplicación 3*4 12
/ División 12 / 4 3
** Potencia 2 ** 4 16
Operaciones con variables
El proceso es exactamente igual si guardamos los valores en variables:
a = 2
b = 3
print(a + b)
a = int(input()) # 10
b = int(input()) # 22
print("a + b es: {}".format(a + b))
print("a * b es: {}".format(a * b))
10
22
a + b es: 32
a * b es: 220
Precedencia de operadores
Un concepto muy importante que debemos conocer es el de precedencia, dicho de otro modo, saber
en qué orden se realiza un grupo de operaciones.
Ejemplo de precedencia
10 - 5 * 2
10 - 5 * 2 # 0
0
Orden de las operaciones
Veamos una tabla simplificada de precedencia. Esta tabla está ordenada de mayor a menor prioridad,
esto quiere decir que la operación de exponenciación tiene mayor precedencia que la suma.
Operador Nombre
** Exponenciación (potencia)
Cuando dos operaciones tienen el mismo nivel de prioridad entonces se resuelven de izquierda a
derecha.
Operaciones y paréntesis
Al igual en matemáticas, los paréntesis cambian el orden en que preceden las operaciones dando
prioridad a las operaciones que estén dentro de los paréntesis.
(10 - 5) * 2
5 / 3 # => 1
Esto es muy común en todos los lenguajes de programación. Para obtener la respuesta que
esperamos necesitamos ocupar otro tipo de dato, el float .
Float
En el capítulo anterior, mencionamos que existía el tipo de dato asociado a los números decimales
se llamaba float.
type(3.1) # float
Enteros y floats
La división entre entero y float, o float y entero, da como resultado un float.
Los floats son muy importantes dentro de la programación, y tienen propiedades curiosas. Una de las
más importantes es que solo son una representación aproximada de los números.
(10 / 3.0)
3.3333333333333335
También podemos transformar a float ocupando el método float() , esto será especialmente útil
cuando estemos trabajando con variables que contengan enteros.
a = int(input()) # 1
b = int(input()) # 2
print(a / float(b)) # 0.5
Algoritmo
farenheit = int(input())
celsius = (farenheit + 40) / 1.8 - 40
print("la temperatura es de {} celsius".format(celsius))
Resumen
Precedencia: El orden en que deben ser resuelta las operaciones.
División entre enteros: El resultado es flotante 6 / 4 #=> 1.5
División entre flotante y entero: El resultado es flotante 6 / 4.0 # => 1.5
Paréntesis(): Al igual que en matemáticas nos ayudan a darle prioridad a una operación.
Manejo básico de flujo
Objetivos
En este capítulo aprenderemos a resolver algoritmos donde hayan una o dos opciones a resolver.
Manejo de flujo
Al inicio de la unidad hablamos mostramos el siguiente diagrama de flujo.
El rombo corresponde a una evaluación condicional. En este punto se toma una decisión y el
programa sigue en función de esa decisión. En este capítulo aprenderemos a escribir programas que
implementen estas decisiones.
La instrucción IF
Python -y muchos otros lenguajes de programación- tiene instrucciones para implementar
condiciones. Una de la más utilizada es la instrucción if . La sintaxis es la siguiente:
if condition:
# código que se ejecutará SÓLO si se cumple la condición
Lo anterior se lee como: "Si se cumple la condición, entonces ejecuta el código". Dentro de la
sintaxis, se debe escribir la condición a evaluar a continuación de la palabra "if", y al final de ésta
agregar dos puntos : . El código que se ejecute si se cumple la condición, se debe escribir en una
nueva línea después de : , identado por 4 espacios.
Ejemplo de if
Analicemos el siguiente ejemplo: En muchos países de Latinoamérica, la mayoría de edad se alcanza
a la edad de 18 años. Crearemos un programa que pregunte la edad al usuario. Si la edad es mayor
o igual a 18 entonces, le diremos que es mayor de edad.
Probando el programa
Si ejecutamos el programa e introducimos un valor mayor o igual a 18, veremos el mensaje "Eres
mayor de edad". En caso contrario no veremos ningún mensaje.
En este ejercicio, se realizó una comparación utilizando el operador >= , pero existen varios
operadores que permiten comparar. Los estudiaremos a continuación.
Operadores de comparación
Los operadores de comparación son aquellos que comparan dos valores y obtienen como resultado
True (verdadero) o False (falso). A este tipo de objeto, resultado de una comparación, se le
conoce como booleano.
== Igual a 2 == 2 true
!= Distinto a 2 != 2 false
Realicemos una prueba en Python donde el usuario ingrese los valores y veamos si el primero es
mayor que el segundo.
a = int(input()) # 3
b = int(input()) # 5
print(a > b)
False
Asignación vs Comparación
No debemos confundir asignación del valor de una variable con el de comparación.
# Asignación
nombre = 'Carlos Santana'
print(nombre) # 'Carlos Santana'
# Comparación
nombre == 'Carlos Santana' # True
¿Puede un texto ser mayor que otro?
Otros operadores también pueden ser aplicados a los strings, por ejemplo el >
En este caso, la comparación es por orden alfabético. Las letras que aparecen primero en el alfabeto
son menores que las que aparecen después. Para entenderlo de forma sencilla, cuando comparamos
dos palabras, es menor aquella que aparecería antes en un diccionario.
En el ejemplo vemos que la palabra recycle es menor que la plabra red porque letra c es menor
que d.
Ahora que ya conocemos los operadores de comparación volvamos a nuestro código anterior y
analicemos el diagrama de flujo.
Una muy buena práctica es la de realizar un diagrama de flujo antes de comenzar a programar. Esto
ayuda a abstraerse del código y pensar en los pasos críticos.
La respuesta es evidentemente no. Este tipo de situaciones se puede modelar mejor de la siguiente
forma.
if condition:
# código que se ejecutará SÓLO SI se cumple la condición
else:
# código que se ejecutará si NO se cumple la condición
Lo anterior se lee como: "Si se cumple la condición, entonces ejecuta el bloque de código, sino
ejecuta el otro bloque de código". En cuanto a la sintaxis, la palabra else asociada al if debe
estar a su mismo nivel de identación, y se debe agregar : al final. El código a ejecutar se escribe en
la línea siguiente, identado por 4 espacios.
Ejercicio práctico
Crear un programa donde el usuario deba ingresar dos números. El programa debe imprimir el mayor
de ambos números.
Ejercicios propuestos
El usuario ingresa debe ingresar un password en la plataforma. Si el password tiene menos de 6
letras, se debe mostrar un aviso.
El usuario debe ingresar un password. Si el password es 12345, se debe informar que el
password es incorrecto.
Resumen
En este capítulo aprendimos a utilizar las instrucciones if y else , las cuales nos permiten
manejar el flujo de un programa.
Existen operadores de comparación que permiten comparar si una expresión es verdaera o
falsa.
Los operadores de comparación se pueden utilizar dentro de la sintaxis de la instrucción if .
Se debe tener cuidado de no confundir la asignación con la comparación. Es decir, = es
distinto que == .
Todo lo que está dentro del if, sucederá solo si se cumple la condición.
El código dentro del if debe estar indentado por 4 espacios para poder reconocer de forma
sencilla y visualmente dentro del código donde empieza, termina, y que código se ejecuta dentro
de la condición.
Profundizando en flujo
Objetivos
En este capítulo aprenderemos a resolver problemas donde las posibles alternativas a una decisión
sean mas de dos.
Antes:
Ahora:
2, 1
2, 2
2, 3
Existe otra solución sin tener que agregar un if dentro del otro.
La instrucción ELIF
La instrucción elif nos permite capturar el flujo y volver a realizar una evaluación condicional
cuando no se cumplió una evaluación previa. Con esta instrucción podemos reescribir el algoritmo del
ejemplo anterior:
La instrucción elif nos permite continuar realizando tantas evaluaciones condicionales como
necesitemos. Finalmente podemos utilizar la instrucción else para cuando no es cumpla ninguna
condición anterior.
Cabe destacar que dos instrucciones if no es lo mismo que utilizar elif . Para su sintaxis, se
debe respetar que debe ir obligatoriamente asociado a un if , que se encuentre previamente
declarado, e identado a su mismo nivel. De existir una instrucción else , debe declararse antes de
ésta.
Por ejemplo, supongamos que tenemos una palabra y queremos clasificarla en corta, mediana o
larga:
if largo <= 4:
print("Pequeña")
elif largo < 10:
print("Mediana")
else:
print("Larga")
Ejercicio: Modifica el código anterior para poder distinguir palabras muy largas, cuando tengan 15 o
más caracteres.
# solución
palabra = input("Ingrese una palabra")
largo = len(palabra)
if largo <= 4:
print("Pequeña")
elif largo < 10:
print("Mediana")
elif largo < 14:
print("Larga")
else:
print("Muy larga")
Larga
1)
if largo <= 4:
print("Pequeña")
elif largo < 10:
print("Mediana")
else:
print("Larga")
2)
if largo <= 4:
print("Pequeña")
Una vez que una condición if o elif se evalúa como verdadera, el flujo entra en esa dirección, y
no evalúa el resto de las condiciones. Con dos if se evalúa el primero y luego el segundo.
Condiciones de borde
Objetivos
Conocer la importancia de condiciones de borde.
Analizar condiciones de borde.
Evaluar comportamiento de operadores >, >=, < y <= en Python.
Motivación
En este capítulo aprenderemos a analizar código y buscar errores semánticos, o sea, cuando el
código está bien escrito pero no hace exactamente lo que queremos que haga. Este tipo de errores
es muy típico y es el que más tiempo consume.
La falta de un símbolo, un ; a algo similar, son errores sintácticos. Estos errores son bastante fáciles
de detectar, ya que el al ejecutar el código se informará de error. En cambio, cuando un programa se
ejecuta sin errores pero no funciona como debería, puede llegar a ser bastante mas complejo, porque
no hay ningún mensaje de error asociado a una línea de código en específico que falle.
En este capítulo aprenderemos un tipo de análisis que nos ayuda a descubrir este tipo de problemas.
A esto se le conoce como análisis de condiciones de borde.
Cuando evaluamos las casos específicos alrededor de una condición estamos hablando de
condiciones de borde. Estos son, precisamente, los puntos donde se debe tener más cuidado.
Analizando una condición de borde
Revisemos algunos problemas que hemos visto hasta ahora y analicemos sus bordes.
En este ejemplo, el punto que define una rama de la otra es el 18. A este punto se le suele llamar
punto crítico, mientras que los bordes son los números que "bordean" el 18. Por tanto, analizar los
bordes sería probar con los valores 17, 18 y 19.
if largo <= 4:
print("Pequeña")
elif largo < 10:
print("Mediana")
else:
print("Larga")
En el ejemplo anterior los puntos críticos son 4 y 10. Por tanto, nuestros puntos de análisis deberían
ser 3,4,5 y 9,10,11
En este caso, podemos escoger un par de números para hacer la prueba, digamos 2 y 2, y luego los
bordes serían 3 y 2, y 1 y 2.
Operadores lógicos
Objetivos
Hacer uso de los operadores lógicos para evaluar y simplificar expresiones.
Invertir una condición.
Motivación
Los operadores lógicos nos ayudan a simplificar los flujos y a evaluar condiciones más complejas. En
este capítulo se enseña a utilizarlos.
a = 24
a > 20 y a < 30
Para probarla, aprenderemos que la expresión "y" se puede escribir como and
a = 24
a > 20 and a < 30 # True
a = 32
a > 20 and a < 30
a = 32
a > 20 and a < 30 # False
nombre = 'Carlos'
apellido = 'Santana'
Identidades
Hay varias formas de expresar una afirmación en español, de la misma forma sucede en la lógica y
en la programación. Por lo mismo hablamos de identidades. A continuación se muestran ejemplos de
esto:
a = 18
print(a == 18)# True
print((a != 18) != True) # True
Son identidades, porque para cualquier valor de a ambas expresiones siempre serán iguales. Prueba
cambiando el valor asignado:
a = 17
print(a == 18) # False
print((a != 18) != True) # False
a = 18
print(a > 18) # False
print((a <= 18) != True) # False
a = 19
print(a > 18) # True
print((a <= 18) != True) # True
Resumen
Los operadores lógicos son importante porque nos ayudan a determinar si una expresión es
cierta o falsa (la base de la programación).
Los operadores lógicos nos pueden ayudar a simplificar expresiones.
Se debe intentar escribir las condiciones siempre en positivo.
(a > b) no es lo mismo que (a <= b).
(a == b) no es lo mismo que (a != b).
Simplificando IFs anidados
Objetivos
Simplificar problemas con condiciones anidadas en Python.
Entender complicaciones en if anidados en Python.
Podemos simplificar el código para evaluar ambas condiciones en una misma instrucción if . Para
una correcta utilización de instrucciones condicionales múltiples, debemos recordar la tabla de
operadores lógicos:
¿Qué operador podemos utilizar si necesitamos que ambas condiciones sean verdaderas?
edad = 30
zurdo = True
Opción 1: El primer número es mayor o igual que el segundo número y mayor o igual que el
tercer número.
Objetivos
Simplificar el código de un script en Python utilizando buenas prácticas y la regla de condición
en positivo.
Refactorizar flujo condicional en Python.
Refactorización
Parte de la refactorización, es simplificar el código para hacerlo más entendible, y, en muchos casos,
más óptimo en tiempo de ejecución.
mayor_de_edad = True
zurdo = False
if mayor_de_edad is True:
if zurdo is True:
print("Mayor de edad y zurdo!")
else:
print("Mayor de edad pero no zurdo!")
else:
if zurdo is True:
print("Menor de edad y zurdo")
else:
print("Menor de edad pero no zurdo!")
¿Cómo?
Recordemos que la instrucción if espera que el resultado se evalúe como true o false . Por lo
tanto:
mayor_de_edad = True
if mayor_de_edad is True:
print("Mayor de edad")
Mayor de edad
Es lo mismo que:
mayor_de_edad = True
if mayor_de_edad:
print("Mayor de edad")
Mayor de edad
mayor_de_edad = True
zurdo = False
Objetivos
Entender cómo Python interpreta el código.
Entender importancia de escribir código lo más simple posible.
Conocer las categorías léxicas de tokens: identificadores, operadores, delimitadores, literales, y
comentarios.
Entender cómo Python interpreta nuestras expresiones al leer un programa nos facilita entender el
por qué es necesario respetar estas normas sintácticas.
No se necesita saber estos procesos de memoria para programar en Python, pero comprender su
flujo ayudará a entender de una mejor manera cómo funciona Python. De esta forma, se logra
sanitizar el código al momento de escribirlo, y así anticiparse a posibles bugs.
El proceso de Python para interpretar el código puede resumirse en tres grandes etapas:
Tokenización, Lexing y Parsing
Etapa 1: Tokenización
Al leer código, Python busca separar todas las palabras que componen las instrucciones en unidades
llamadas tokens. Si tenemos la instrucción x = 10 , Python separará la expresieon en tres partes:
x
=
10
Etapa 2: Lexing
Python tiene una serie de definiciones y reglas para cada uno de los tokens. Mediante el proceso de
lexing, Python imputa significado a cada componente para que posteriormente sepan cómo
interactuar.
Etapa 3: Parsing
La última etapa de la expresión x = 10 consiste en generar un árbol de sintáxis abstracta, que
busca genera una representación del código y ordenar la forma de resolucieon de las expresiones.
Reglas Básicas
En Python existe una serie de reglas básicas que se establecen a partir de los tokens. Éstos pueden
tener algunas de las siguiente categorías léxicas:
Identificadores.
Operadores.
Delimitadores.
Literales.
Comentarios.
Identificadores
Cuando hablamos de identificadores, estamos hablando de nombres de variables y métodos. Para
que un identificar sea válido, debe cumplir con ciertas características:
Debe empezar con algún carácter alfabético (de la a a la z) o un guíon bajo _ . Puede incluír
números siempre y cuando no sean el primer carácter.
Los identificadores son sensibles a la mayúsculas.
No se pueden empezar con números.
Animal = "gato"
animal
---------------------------------------------------------------------------
<ipython-input-15-ae420d7ae5e6> in <module>()
1 Animal = "gato"
----> 2 animal
Operadores
Los operadores calculan un resultado en base a los valores de sus operandos. La mayoría de éstos
componen de uno o dos caracteres ordinarios, pero en Python también existen algunos operandos
lógicos que se escriben como palabras. Los operadores disponibles son: + , - , * , / , // ,
% , - , ** , = , != , < , > , <= , >= , & , | , ~ , ^ , << , > , and , in , is , not , or .
Literales
Los literales son los los valores que se asignan a las variables para operar. Para almacenar y realizar
manipulaciones con la información, se necesita definir el tipo de información que se almacenará y
será posteriormente interpretada por Python. Ejemplos de literales incluyen a los tipos de datos int ,
float , str , bool .
Delimitadores
Los delimitadores son símbolos que desempeñan tres funciones en Python: agrupar, separar objetos
con puntuaciones, realizar asignación o concatenación de información a objetos. Ejemplos de
delimitadores de agrupación y separación son [] , {} , () , : . Ejemplos de delimitadores
concatenadores incluyen = , += , -= .
Comentarios
Los comentarios son tokes que serán ignorados, nos ayudarán a compentar el código y son de vital
importancia para implementar documentación sobre el código. Para escribir un comentario, se debe
anteponer el símbolo # .
# Esta línea es un comentario
# Los comentarios son ignorados
Palabras reservadas
Corresponden a ciertas palabras que poseen un significado predefinido en el lenguaje y por tanto no
se pueden utilizar para nombrar variables. Podemos solicitar la lista de palabras reservadas en
Python con:
import keyword
keyword.kwlist
['False',
'None',
'True',
'and',
'as',
'assert',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']