Documentos de Académico
Documentos de Profesional
Documentos de Cultura
05/10/2020
Contenido
No pares de apender................................................................................................................................. 4
1. Curso de Python ............................................................................................................................. 5
1.1 Básicos de programación ........................................................................................................... 5
1.1.1 Guía de instalación y conceptos básicos ................................................................................ 5
1.1.2 ¿Por qué programar con Python? ........................................................................................ 15
1.1.3 ¿Qué es la programación? .................................................................................................... 17
1.1.4 Python 2 vs Python 3 ............................................................................................................ 25
1.1.5 Operadores matemáticos en Python 3 ................................................................................. 27
1.1.6 Tipos de datos en Python ..................................................................................................... 29
1.1.7 Declarar variables y expresiones .......................................................................................... 32
1.1.8 Definir funciones en Python ................................................................................................. 36
1.1.9 Funciones con parámetros ................................................................................................... 46
1.1.10 Estructura de condicionales en Python ............................................................................ 52
1.1.11 Calcular si un número es primo en Python ....................................................................... 57
1.1.12 Buenas prácticas del lenguaje ........................................................................................... 59
1.2 Uso de Strings y Ciclos .............................................................................................................. 63
1.2.1 Comparación de Strings y Unicode ....................................................................................... 63
1.2.2 Manejo de Strings en Python ............................................................................................... 67
1.2.3 Factorial de un número con recursión ................................................................................. 69
1.2.4 Separar cadenas de texto en Python .................................................................................... 73
1.2.5 Ciclos en Python con for ....................................................................................................... 75
1.2.6 Ciclos de Python en while ..................................................................................................... 79
1.2.7 Calcular si una palabra es palíndromo con Python .............................................................. 84
1.3 Estructuras de datos ................................................................................................................. 86
1.3.1 Introducción a las listas en Python ....................................................................................... 86
1.3.2 Operaciones con listas en Python......................................................................................... 91
1.3.3 Juego del ahorcado con Python............................................................................................ 96
1.3.4 Interfaz del ahorcado.......................................................................................................... 100
1.3.5 Lógica del ahorcado ............................................................................................................ 104
1.3.6 ¿Qué es una búsqueda binaria? ......................................................................................... 108
1.3.7 Implementar búsqueda binaria en Python ......................................................................... 108
1.3.8 Diccionarios en Python ....................................................................................................... 112
1
1.3.9 Encriptar mensajes usando diccionarios ............................................................................ 115
1.3.10 Tuplas en Python ............................................................................................................. 120
1.3.11 Se repite una letra en un string_Programa con tuplas ................................................... 124
1.3.12 Uso de sets en Python..................................................................................................... 129
1.3.13 Dictionary comprehension – list comprehension ........................................................... 132
1.4 Uso de objetos y módulos ...................................................................................................... 136
1.4.1 Manejo de errores en Python ............................................................................................. 136
1.4.2 Errores personalizados ....................................................................................................... 139
1.4.3 Manejo de archivos en Python ........................................................................................... 142
1.4.4 Programación orientada a objetos en Python.................................................................... 146
1.4.4.1 Clases en Python 3 ......................................................................................................................................... 146
1.4.4.2 ¿Qué es una clase en Python? .................................................................................................................... 146
1.4.4.3 ¿Qué es un Objeto en Python? ................................................................................................................... 146
1.4.4.4 Ejemplo gráfico de Clases en Python ...................................................................................................... 147
1.4.4.5 Sintaxis de clases en Python ...................................................................................................................... 149
1.4.5 Modular un objeto en Python ............................................................................................ 153
1.4.6 Decoradores en Python ...................................................................................................... 158
1.4.7 Paquetes y módulos............................................................................................................ 161
1.4.8 Entorno virtual en Python .................................................................................................. 167
1.5 Proyecto: Web Scraping ......................................................................................................... 176
1.5.1 ¿Qué es web scraping? ....................................................................................................... 176
1.5.2 Implementación web scraping con Python ........................................................................ 179
1.6 Proyecto: Aplicación de Terminal .......................................................................................... 185
1.6.1 Interfaz directorio de contactos ......................................................................................... 185
1.6.2 Lógica de directorio de contactos ...................................................................................... 185
1.6.3 Persistencia de datos .......................................................................................................... 191
1.7 Proyecto: Aplicación web ....................................................................................................... 198
1.7.1 Configurando el entorno de desarrollo de Google Cloud .................................................. 198
1.7.2 Crear templetes con Jinja2 ................................................................................................. 204
1.7.3 Manejar rutas y lógica con Flask......................................................................................... 204
1.7.4 Listar y eliminar contactos .................................................................................................. 204
1.8 Practicas comunes .................................................................................................................. 214
2
1.8.1 ¿Qué puedes construir con Python? .................................................................................. 214
1.8.2 Consejos para aprender a programar [1] ........................................................................... 218
1.9 Retos / Desafíos ...................................................................................................................... 221
1.9.1 Desafío 1: Crear una función que sume recursivamente ................................................... 221
1.9.2 Desafío 2: Criptografía con binarios ................................................................................... 226
1.9.3 Desafío 3: Modular un objeto ............................................................................................. 231
1.9.4 Verifique los conocimentos en Python .............................................................................. 234
3
No pares de apender
4
1. Curso de Python
1.1 Básicos de programación
Python es un lenguaje de programación creado por Guido Van Rossum, con una sintaxis muy limpia,
ideado para enseñar a la gente a programar bien. Se trata de un lenguaje interpretado o de script.
Ventajas:
Legible: sintaxis intuitiva y estricta.
Productivo: ahorra mucho código.
Portable: para todo sistema operativo.
Recargado: viene con muchas librerías por defecto.
En realidad cualquier ide es bueno para programar cada editor tiene sus ventajas y desventajas:
5
Sublime Text: Atom:
Es más rápido que Una de los pocos
VSCode pero este último problemas del editor se
tiene mayor cantidad de encuentra en su
plugins y es versátil, Sublime Text es útil rendimiento, ya que a veces puede ser
para abrir archivos de logs pesados. un poco lento. A la hora de abrir un
archivo o navegar entre diferentes
pestañas el tiempo de reacción puede
llegar a ser un poco superior a lo deseado
y eso, cuando se desea avanzaren
rápidamente en la programación, puede
ser molesto.
Un editor de texto solo edita texto. Y necesita obtener un compilador por aparte. Como
no tiene compilador ni intérprete, es mucho más ligero, por ejemplo el block de notas
que está integrado en Windows.
Por otro lado, los IDE son mucho más grandes, generalmente incluyen compiladores
para diferentes lenguajes y además poseen otras funciones como: Editor de texto,
función de autocompletar código, procedimiento de compilación que incluye
compilador, enlazador, depurador, administrador de archivos o proyectos, perfilador
de rendimiento, herramienta de implementación y según su tamaño-costo mejora sus
características.
6
cmder, powershell (windows), cmd(Windows), consola de linux, consola de mac, el
intérprete de Python ejecute el código.
Para instalar Python seguir los pasos dependiendo del sistema operativo que esté
instalado.
Antes de empezar:
Debe definir el Sistema Operativo que va a utilizar, la versión del lenguaje Python, el
editor de texto o IDE y la consola con las cuales va a realizar los programas.
7
Tipos de datos en Python
En Python se trabaja con módulos y ficheros que se usan para importar las librerías.
Funciones
Las funciones se definen con el comando def junto a un nombre y unos paréntesis que
reciben los parámetros a usar. Terminar con dos puntos.
def nombre_de_la_función(parametros):
Después por indentación colocar los datos que se ejecutarán desde la función:
>>> def my_first_function():
... return “Hello World!”
...
>>> my_first_function()
'Hello World!'
>>>
8
Variables
A = 3
B = 4
Lista
Las listas se declaran con corchetes. Estas pueden tener una lista dentro o cualquier tipo
de dato.
>>> L = [22, True, “una lista”,[1,2]]
>>> L[0]
22
>>>
Tuplas
Las tuplas se declaran con paréntesis, recuerde que no puede editar los datos de una tupla
después de creado.
>>> L = (22, True, “una tupla”,(1,2))
>>> L[0]
22
>>>
Diccionarios
Conversiones
De flotante a entero:
9
>>> int (4.3)
4
>>>
De entero a flotante:
>>> float(4)
4.0
De>>>
entero a string:
>>> str(4.3)
‘4.3’
>>>
De tupla a lista:
>>> list((4, 5, 2))
[4, 5, 2]
>>>
Operaciones comunes
Tipo de dato:
>>> type(4)
<class ‘int’>
>>>
10
Generar un rango en una lista (esto es mágico):
>>>range(5)
range(0, 5)
>>> list (range(5))
[0, 1, 2, 3, 4]
>>>range(1, 20, 3)
range(1, 20, 3)
>>> list (range(1, 20, 3))
[1, 4, 7, 10, 13, 16, 19]
>>>
Sumar un conjunto:
>>>sum([1, 2, 4])
7
>>>
Organizar un conjunto:
>>>sorted ([5, 2, 1])
[1, 2, 5]
>>>
>>> help(sorted)
Help on built-in function sorted in module builtins:
11
Limpiar la consola
Clases es uno de los conceptos con más definiciones en la programación, pero en resumen
sólo son la representación de un objeto. Para definir la clase usar class y el nombre. En
caso de tener parámetros se colocan entre paréntesis.
Para crear un constructor hacer una función dentro de la clase con el nombre init y de
parámetros self (significa su clase misma), nombre_r y edad_r:
>>>class Estudiante(object):
... def __init__(self,nombre_r,edad_r):
... self.nombre = nombre_r
... self.edad = edad_r
... def hola(self):
... return"Mi nombre es %s y tengo %i años" %(self.nombre,self.edad)
...
>>>e= Estudiante("Diego", 56)
>>>print (e.hola())
>>>Mi nombre es Diego y tengo 56 años
>>>
El resultado que arroja el código es la cadena “Mi nombre es Diego y tengo 56 años”
Métodos especiales
cmp(self,otro)
Método llamado cuando se utilizan los operadores de comparación para comprobar si el
objeto es menor, mayor o igual al objeto pasado como parámetro.
len(self)
Método llamado para comprobar la longitud del objeto. Se usa, por ejemplo, cuando se
llama la función len(obj) sobre el código. Como es de suponer el método devuelve la
longitud del objeto.
init(self,otro)
12
Es un constructor de una clase, es decir, es un “método especial” que llama
automáticamente cuando se crea un objeto.
Condicionales IF
Los condicionales tienen la siguiente estructura. Tener en cuenta que en los paréntesis
esta la comparación que debe cumplir para que los elementos se cumplan.
if ( a > b):
elementos
elif ( a == b)
elementos
else:
elementos
Bucle FOR
El bucle de for lo puede usarse de la siguiente forma: recorrer una cadena o lista la cual va
a tomar el elemento en cuestión con la siguiente estructura:
for i in ____:
elementos
Ejemplo:
for i in range(5):
print(i)
0
1
2
4
En este caso recorrerá una lista de cinco elementos, es decir el _print i _se ejecutara cinco
veces. Ahora i va a tomar cada valor de la lista, entonces este for imprimirá los números
del 0 al 4 (recordar que en un range va hasta el número puesto -1).
Otro ejemplo para cambiar el formato de salida en la impresión sería:
for i in range(5):
print(i,end= “ “)
0 1 2 3 4
13
Bucle WHILE
En este caso while tiene una condición que determina hasta cuándo se ejecutará. O sea
que dejará de ejecutarse en el momento en que la condición deje de ser cierta. La
estructura de un while es la siguiente:
while (condición):
elementos
Ejemplo:
>>> x = 0
>>> while x < 10
... print(x)
... x += 1
...
1
2
3
4
5
6
7
8
En9 este ejemplo preguntará si x es menor que diez. Dado que es menor imprimirá x y
>>>
luego sumará una unidad a x. Luego x es 1 y como sigue siendo menor a diez se seguirá
ejecutando, y así sucesivamente hasta que x llegue a ser mayor o igual a 10.
Ayudas en la red
Videos
https://www.youtube.com/watch?v=chPhlsHoEPo
Páginas web
Ejercicios básicos: Python http://aprendeconalf.es/python/ejercicios
https://github.com/gsuscastellanosSC/CursoDePython/blob/master/Generalidades.py
https://es.wikihow.com/cambiar-colores-en-command-prompt
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Cursos en Platzi
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
https://platzi.com/clases/1764-python-cs/25577-preparacion-de-tu-computadora/
14
1.1.2 ¿Por qué programar con Python?
Python es un lenguaje bastante bueno para aprender a programar ya que tiene una
comunidad muy grande que ayuda a superar las dudas, tiene una sintaxis para escribir
bastante sencilla.
1. Tiene una gran comunidad en Internet para aprender de ella. (Libros, Blogs,
Tutoriales, Videos).
2. Gracias a su sintaxis clara y precisa, la curva de aprendizaje en Python es baja, es
casi como escribir en inglés.
3. Permite Programar recurriendo a sus Frameworks y Librerías.
4. Es portable, es decir sirve tanto para Windows, Linux o Mac.
5. Es multipropósito, existen librerías que se pueden usar para desarrollo web, móvil,
Machine Learning, Big Data, Scripting, Servidor Web y otros.
¿Qué es programar?
Programar es darle instrucciones al computador, para hacer algo que se desea hacer en
ella, desde el sitio web o llevar humanos a marte.
Para lograr construir lo que se desea se deben unir piezas básicas del lenguaje y
dependiendo de cómo se unan se va a construir lo que se imagina.
Para crear el primer “hola mundo” se debe encender el intérprete de Python, este “hola
mundo” es muy sencillo, ejecutar la función print así:
Ayudas en la red
Páginas web
Notas de Pyton 3
https://docs.google.com/document/d/1evjmD6FMVRTM2-
_pQtsjQlBKDjhDHmZw7BYhLSpt8ew/edit?usp=sharing
Notas de Pyton 3
https://docs.google.com/document/d/1evjmD6FMVRTM2-
_pQtsjQlBKDjhDHmZw7BYhLSpt8ew/edit?usp=sharing
15
¿Qué es if __name__ == “__main__”:?
https://es.stackoverflow.com/questions/32165/qu%C3%A9-es-if-name-main
La Biblia de Python
Para resolver dudas del lenguaje puede consultar esta ruta
1. Ingresa a https://www.python.org/
2. Dar click en la sección “Documentation”
3. Selecciona la versión de Python que desee explorar.
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Cursos en Platzi
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
Curso de Fundamentos de Álgebra Lineal con Python:
https://platzi.com/clases/algebra-lineal/
Curso Básico de Python
https://platzi.com/clases/pythonbasico/
Libros
Gonzales Dique Raul, Pyton para todos, Este libro se distribuye bajo una licencia Creative
Commons Reconocimiento 2.5 España
16
1.1.3 ¿Qué es la programación?
La programación es dar instrucciones a la computadora de forma ordenada, estas
instrucciones definen lo que se va a realizar, desde cosas sencillas hasta cosas avanzadas.
Todos los programas se componen de partes esenciales que son forma de darle datos de
entrada a la computadora y formas estructuradas para procesar estos datos.
_________________________________________________________________________
Ejemplos:
Ejemplo inicial (ejemplo_inicial.py)
"""
File: ejemplo_inicial.py
"""
import turtle
window = turtle.Screen()
dave = turtle.Turtle()
dave.forward(50)
dave.left(90)
dave.forward(50)
dave.left(90)
dave.forward(50)
dave.left(90)
dave.forward(50)
dave.left(90)
17
turtle.mainloop()
import turtle
window = turtle.Screen()
colors=['red','purple','blue','green','yellow','orange']
t = turtle.Pen()
t.speed(0)
for x in range(360):
t.pencolor(colors[x%6])
t.width(x/100+1)
t.forward(x)
t.left(59)
turtle.mainloop()
18
Prisma rectangular (rectángulo.py)
import turtle
window = turtle.Screen()
david = turtle.Turtle()
david.forward(50)
david.left(90)
david.forward(50)
david.left(90)
david.forward(50)
david.left(90)
david.forward(50)
david.right(135)
david.forward(50)
david.right(45)
david.forward(50)
david.right(90)
david.forward(50)
david.right(45)
david.forward(50)
david.right(135)
david.forward(50)
david.right(45)
david.forward(50)
turtle.mainloop()
19
Figura especial (turtle_ejemplo2.py)
import turtle
import math as mt
a=200
b=5
a1=[]
b1=[]
c=[]
f1=[]
f2=[]
for s in range(0,40):
a1.append(a)
b1.append(b)
a=a-5
b=b+5
for e in range(0,40):
q=((a1[e]**2)+(b1[e]**2))**(1/2)
c.append(q)
for g in range(0,40):
q=((mt.asin(b1[g]/c[g]))*180)/mt.pi
f1.append(q)
q1=((mt.asin(a1[g]/c[g]))*180)/mt.pi
f2.append(q1)
a1.append(5)
window = turtle.Screen()
alejo = turtle.Turtle()
alejo.forward(200)
alejo.left(90)
20
alejo.forward(200)
for w in range(0,40):
alejo.left(f2[w])
alejo.forward(c[w])
alejo.left(f1[w])
alejo.forward(b1[w])
alejo.left(90)
alejo.forward(a1[w+1])
alejo.forward(200)
alejo.left(90)
alejo.forward(205)
alejo.left(90)
alejo.forward(205)
alejo.left(90)
alejo.forward(205)
turtle.mainloop()
Estrella (estrella.py)
import turtle
from turtle import *
color('red', 'yellow')
window = turtle.Screen()
froggie = turtle.Turtle()
froggie.left(-108)
froggie.forward(90)
froggie.left(144)
froggie.forward(90)
21
froggie.left(144)
froggie.forward(90)
froggie.left(144)
froggie.forward(90)
froggie.left(144)
froggie.forward(90)
froggie.left(72)
froggie.circle(45)
turtle.mainloop()
# object color
my_pen.color("orange")
tut = turtle.Screen()
my_pen.pensize(8)
# forming front square face
22
for i in range(4):
my_pen.forward(100)
my_pen.left(90)
23
Ayudas en la red
Páginas web
The Beginner's Guide to Python Turtle
https://realpython.com/beginners-guide-python-turtle/
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Turtle
https://docs.python.org/3.6/library/turtle.html
Videos
COMO EJECUTAR PROGRAMAS DE PYTHON DESDE ATOM:
https://www.youtube.com/watch?v=tF28s0x2jHU
Para abrir Python desde el cmd de Windows en este vídeo se explica cómo hacerlo.
https://youtu.be/sGYSPaXAlkg
En este video enseñan a cómo descargar y configurar Visual Studio Code con las
extensiones necesarias.
https://youtu.be/XRtZzlD2LJ8
Cursos en Platzi
Configurando mi editor Atom para Python
https://platzi.com/contributions/configurando-mi-editor-atom-para-python/
Libros
David Aroesti, Curso de Python
24
1.1.4 Python 2 vs Python 3
Muchos usuarios principiantes de Python se preguntan con qué versión de Python
deberían comenzar. La respuesta a esta pregunta suele ser algo así como "simplemente
elija la versión en la que está escrito el tutorial o libro que está siguiendo y compruebe las
diferencias más adelante".
Pero, ¿qué pasa si está comenzando un nuevo proyecto y tiene la opción de elegir?
Actualmente (2020) no hay "correcto" o "incorrecto" depende de las librerías que va a
utilizar con Python 2.7.xy o Python 3.x. Sin embargo, vale la pena echar un vistazo a las
principales diferencias entre esas dos versiones más populares de Python para evitar
errores comunes al escribir el código, o si planea portar el proyecto (Para más detalles ver
en este documento las Ayudas en la red> Páginas web).
Pyton2 Python 3
2010 versión 2.7 Arregla inconsistencias en el lenguaje de la
versión 2
print como un keyboard o como función print se convierte en una función
print ´Hola’ print(‘Hola’)
String no considera a las tildes, la ñ y String reconoce las tildes, ñ y caracteres
caracteres especiales. Codifica en ASCII. especiales como caracteres por defecto
Para reconocer los caracteres colocar al (UTF).
inicio del archivo # -*- coding: utf-8 -*
Resultado de dividir dos enteros es otro Resultado de dividir dos enteros es un
entero. Ej, 5/2 = 2 flotante (decimal). Ej, 5/2 = 2.5
LA SERIE PYTHON 2 SE RETIRARÁ EN Python 3 será la única versión que se
ABRIL DE 2020. actualizará para detectar errores y
La comunidad de desarrollo central de vulnerabilidades de seguridad.
CPython insta a los usuarios a migrar a
Python 3,
Ayudas en la red
Páginas web
Python2orPython3 - Python Wiki
https://wiki.python.org/moin/Python2orPython3
Las diferencias claves entre Python 2.7.xy Python 3.x con ejemplos
https://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html
25
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
26
1.1.5 Operadores matemáticos en Python 3
Los operadores nos permiten trabajar con valores y generar nuevos valores por medio de
estas operaciones.
(+) Suma
(-) Resta
(*) Multiplicación
(/) División
(//) División de enteros
(%) Operador de módulo
(**) Potencias
(>) Mayor que
(<) Menor que
(==) Igual
(>=) Mayor igual
(<=) Menor igual
Ejemplo:
Operaciones matemáticas (Operaciones_matemática.py)
from os import system
system("cls")
27
Resultado después de ejecutar el código
Ingrese un número A: 5
Ingrese un número B: 4
Número A = 5
Número B = 4
Suma: 9
Resta: 1
Multiplicación: 20
Potencia: 625
División: 1.25
División entero: 1
Residuo: 1
A mayor que B: True
A menor que: B False
A Igual a B: False
A es diferente a B: True
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Operadores en Python
https://www.fing.edu.uy/inco/cursos/fpr/wiki/index.php/Operadores_en_Python
28
1.1.6 Tipos de datos en Python
¿En qué orden se evalúan las matemáticas operaciones complejas?
Paréntesis
Exponentes
Multiplicación / División
Adición / Sustracción
Una forma fácil de recordar éste orden es usando el acrónimo PEMDAS (Paréntesis
Exponentes Multiplicación División Adición Sustracción)
Valores y Tipos
Integer <int>
Float <float>
String <str>
Boolean <bool>
Ejemplos:
>>> type(2)
<class 'int'>
>>> type('Hola')
<class 'str'>
>>> type(2.3)
<class 'float'>
29
Los datos Boolean True o False se deben de escribir siempre la primera letra es mayúscula
para que no genere error.
>>> type(false)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'false' is not defined
>>> type(False)
<class 'bool'>
>>> type (True)
<class 'bool'>
>>>
print ('Bienvenido')
print ('Aqui podras encontrar los distintos tipos de DATOS en la programació
n')
print ('Integer <int> devuelve numeros enteros')
print ('100 =')
print (type(100))
print ('El valor Boleano <bool> funciona como un interruptor, solo tiene dos
estados posibles VERDADERO o FALSO <true/false>')
print ('¿10 es igual a 10?')
print('10 == 10')
print ( 10 == 10)
print (type(10 == 10))
30
Resultado después de ejecutar el código
Bienvenido
Aquí podrá encontrar los distintos tipos de DATOS en la programación
Integer <int> devuelve números enteros
100 =
<class 'int'>
Float <float> devuelve números decimales
2.5 =
<class 'float'>
String <str> devuelve una cadena de letras o palabras
Hola mundo =
<class 'str'>
El valor Boleano <bool> funciona como un interruptor, solo tiene dos
estados posibles VERDADERO o FALSO <true/false>
¿10 es igual a 10?
10 == 10
True
<class 'bool'>
¿100 es igual a 20?
100 == 20
False
<class 'bool'>
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
31
1.1.7 Declarar variables y expresiones
32
Ejemplo:
¿Cuál es tu nombre? (cual_nombre.py)
from os import system
system("cls")
33
opc = int(input("Seleccione una opción: 1. Suma 2. Resta 3. Multiplicación
4.División "))
if(opc == 1):
suma = a + b
print(suma)
elif(opc == 2):
resta = a - b
print(resta)
elif(opc == 3):
multi = a * b
print(multi)
elif(opc == 4):
div = a/b
print(div)
Ayudas en la red
Páginas web
En Python 3.x se usa input() para python 2 raw_input(). En el link se explica en
profundidad las diferencias entre una y otra:
Tutorial de Python
34
https://docs.python.org/es/3/tutorial/index.html
Cursos en Platzi
Curso Gratis de Programación Básica
https://platzi.com/clases/programacion-basica/
Curso de Python
https://platzi.com/cursos/python/
Curso de Django
https://platzi.com/cursos/django/
35
1.1.8 Definir funciones en Python
Las funciones son un concepto fundamental en programación, una función es una
secuencia de comandos que realizan un cómputo.
En Python las funciones se definen usando la palabra reservada def y luego el nombre de
la función con paréntesis y dos puntos que indican que lo que sigue son los comandos,
una función debe retornar un valor, para esto se usa la palabra reservada return.
def suma(num1,num2):
return num1 + num2
Para usar una función simplemente se llama por su nombre seguido por paréntesis con los
parámetros que recibe.
suma(2,3)
If __name__ = ‘__main__’
Ejemplos:
Dibujar polígonos de varios lados (polígonos.py)
length =int(input('Tamaño de las linea: '))
n = int(input('Numero de lados: '))
color =str(input('Escriba el color de la línea (red, blue, green, black) '))
lapiz=int(input('Grosor del lapiz :'))
import turtle
36
def Mifuncion():
ventana =turtle.Screen()
tortuga = turtle.Turtle()
square(tortuga)
turtle.mainloop()
def square(tortuga):
for i in range(n):
lineas(tortuga,length)
def lineas(tortuga,length):
tortuga.pencolor(color)
tortuga.pensize(lapiz)
tortuga.shape("arrow")
tortuga.forward(length)
tortuga.left(360/n)
if __name__== '__main__':
Mifuncion()
37
Dibujar Triangulo, Cuadrado, Rectángulo, (118_turtle.py)
import turtle
def main():
diego = turtle.Turtle()
make_form(diego)
turtle.mainloop()
def make_form(diego):
form = int(input("Para dibujar: Triangulo (1), Cuadrado (2), Rectangulo
(3) indique el número:"+"\n"))
if form == 1:
make_triangle(diego)
elif form == 2:
make_square(diego)
elif form == 3:
make_rectangle(diego)
else:
print("Numero incorrecto intente del 1 al 3 ")
def make_triangle(diego):
length = int(input("El tamano de cada lado es: "))
make_triline(diego, length)
def make_square(diego):
length = int(input("El tamano de cada lado es: "))
for i in range(4):
make_line_and_turn(diego, length)
def make_rectangle(diego):
length = int(input("El tamano de cada lado es: "))
side = length/2
for i in range(2):
make_four_line(diego, length, side)
38
diego.left(120)
diego.forward(length)
if __name__ == "__main__":
main()
def main():
window = turtle.Screen()
condes = turtle.Turtle()
39
opcion = input("Que desea dibujar? : Logo Plazi presione (A): Logo Pytho
n presione (B): ")
if opcion.upper() == "A":
logo_platzi(condes)
turtle.mainloop()
else :
print("No Eligio una figura")
def logo_platzi(condes):
condes.pencolor("green")
condes.fillcolor("green")
condes.pensize(5)
condes.begin_fill()
condes.left(45)
condes.forward(137.5)
condes.left(45)
condes.forward(12.5)
condes.left(45)
condes.forward(187.5)
condes.left(45)
condes.forward(12.5)
condes.left(45)
condes.forward(237.5)
condes.left(45)
condes.forward(12.5)
condes.left(45)
condes.forward(237.5)
condes.left(45)
condes.forward(12.5)
condes.left(45)
condes.forward(100)
condes.left(90)
condes.forward(50)
condes.left(90)
condes.forward(50)
condes.left(270)
condes.forward(150)
40
condes.left(270)
condes.forward(150)
condes.left(270)
condes.forward(100)
condes.left(270)
condes.forward(100)
condes.left(90)
condes.forward(50)
condes.end_fill()
condes.hideturtle()
def logo_python(condes):
condes.pencolor("navyblue")
condes.fillcolor("navyblue")
condes.pensize(5)
condes.begin_fill()
condes.left(0)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(40)
condes.left(90)
condes.forward(100)
condes.left(270)
condes.forward(15)
condes.left(270)
condes.forward(150)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(40)
condes.left(90)
41
condes.forward(45)
condes.left(315)
condes.forward(65)
condes.end_fill()
condes.penup()#subir el lapiz
condes.left(45)
condes.forward(140)
condes.left(90)
condes.forward(-12)
condes.pendown()#Bajar el lapiz
condes.fillcolor("white")#DIBUJO OJO #1
condes.begin_fill()
condes.pencolor("white")
condes.left(90)
condes.forward(20)
condes.left(90)
condes.forward(20)
condes.left(90)
condes.forward(20)
condes.left(90)
condes.forward(20)
condes.end_fill()
condes.penup()#subir el lápiz
condes.left(90)
condes.forward(160)
condes.left(90)
condes.forward(100)
condes.pendown()#Bajar el lápiz
condes.fillcolor("orange")
condes.pencolor("orange")
condes.begin_fill()
condes.left(180)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(100)
condes.left(45)
42
condes.forward(50)
condes.left(45)
condes.forward(40)
condes.left(90)
condes.forward(100)
condes.left(270)
condes.forward(15)
condes.left(270)
condes.forward(150)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(100)
condes.left(45)
condes.forward(50)
condes.left(45)
condes.forward(40)
condes.left(90)
condes.forward(45)
condes.left(315)
condes.forward(65)
condes.end_fill()
condes.penup()#subir el lápiz
condes.left(45)
condes.forward(140)
condes.left(90)
condes.forward(-12)
condes.pendown()#Bajar el lápiz
if __name__ == "__main__":
main()
43
Resultados después de ejecutar el código:
Que desea dibujar? : Logo Plazi presione (A): Logo Python presione
(B): A
Que desea dibujar? : Logo Plazi presione (A): Logo Python presione
(B): B
Modifique el código para hacerlo más eficiente, reducir el número de líneas utilizando
funciones de manera apropiada.
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
44
Turtle graphics
https://docs.python.org/3/library/turtle.html
45
1.1.9 Funciones con parámetros
46
>>> amount =100
>>> result =370000
>>> 'USD${} Dólares son Col${} Pesos'.format(amount,result)
'USD$100 Dólares son Col$370000 Pesos'
>>>
Ejemplos:
Calculadora de divisas Bitcoin (foreign_exchange_calculator.py)
from os import system
system("cls")
bitcoin_usd = 7200
bitcoin_cop = 24000000
menu= """Bienvenido al conversor de monedas
1. De Dólares
2. De Pesos Colombianos
"""
def foreign_exchange_calculator(amount, convertir):
if(convertir == 1):
return amount / bitcoin_usd
elif(convertir == 2):
return amount / bitcoin_cop
def run():
print("=============================================")
print("= == == =")
print("= == == =")
print("= ========== =")
print("= == == =")
print("= == == =")
print("= ========== =")
print("= == == =")
print("= == == =")
print("= =========== =")
print("= == == =")
print("= == == =")
print("= C A L C U L A D O R A D E B I T C O I N =")
print("=============================================","\n")
print("Tasa de cambio USD a BTC {}".format(bitcoin_usd))
print("Tasa de cambio COP a BTC {}".format(bitcoin_cop),"\n")
47
print(menu)
option1 = int(input("¿Qué tipo de cambio deseas? "))
if(option1 == 1):
amount = int(input("¿Cuantos USD deseas cambiar a BTC? : "))
result = float(foreign_exchange_calculator(amount, option1))
print("")
print("${} USD Dólares son {} BTC".format(amount, (round(result, 8))
),"\n")
elif(option1 == 2):
amount = int(input("Cuantos COP deseas cambiar a BTC? : "))
result = float(foreign_exchange_calculator(amount, option1))
print("")
print("${} COP Pesos Colombianos son {} BTC".format(amount, (round(r
esult, 8))),"\n")
if __name__ == "__main__":
run()
=============================================
= == == =
= == == =
= ========== =
= == == =
= == == =
= ========== =
= == == =
= == == =
= =========== =
= == == =
= == == =
= C A L C U L A D O R A D E B I T C O I N =
=============================================
48
Calculadora de divisas (calculadora_divisas.py)
from os import system
system("cls")
# Especificador de formato para separador de miles utilizar
# {:11,.0f} Para hacer que la salida del programa sea más legible,
# puede ser útil agregar separadores a números grandes
def mex(cantidad):
valor_mex = 167.51
return'${} Pesos Mexicanos (MEX) son ${:11,.0f} Pesos Colombianos (COP).
\n'.format(cantidad, (cantidad*valor_mex))
def usd(cantidad):
valor_usd = 3778.46
return'${} Dólares estadounidenses (USD) son ${:11,.0f} Pesos Colombiano
s (COP).\n'.format(cantidad, (cantidad*valor_usd))
def eur(cantidad):
valor_eur = 3650.00
return'${} Euros (EUR) son ${:11,.0f} Pesos Colombianos (COP).\n'.format
(cantidad, (cantidad*valor_eur))
def gbp(cantidad):
valor_gbp = 4610.57
return'${} Libras Esterlinas (GBP) son ${:11,.0f} Pesos Colombianos (COP
).\n'.format(cantidad, (cantidad*valor_gbp))
def yen(cantidad):
valor_yen = 35.06
return'${} Yenes (JPY) son ${:11,.0f} Pesos Colombianos (COP).\n'.format
(cantidad, (cantidad*valor_yen))
def cad(cantidad):
valor_cad = 2705.76
return'${} Dólares canadienses (CAD) son ${:11,.0f} Pesos Colombianos (C
OP).\n'.format(cantidad, (cantidad*valor_cad))
def default():
return'Ha seleccionado una opción invalida.\n'
49
2: usd(cantidad),
3: eur(cantidad),
4: gbp(cantidad),
5: yen(cantidad),
6: cad(cantidad),
}
return sw.get(opcion, default())
def run():
menu= """
==============================================
CONVERSOR DE DIVISAS A PESOS COLOMBIANOS (COP)
==============================================
1. MEX
2. USD
3. EUR
4. GBP
5. JPY
6. CAD
==============================================
"""
print(menu)
opcion = int(input('Ingrese el número de la respectiva divisa: '))
print("")
monto = int(input('Ingrese la cantidad de dinero a convertir: '))
print("")
print(switch(opcion, monto))
if __name__ == '__main__':
run()
==============================================
CONVERSOR DE DIVISAS A PESOS COLOMBIANOS (COP)
==============================================
1. MEX
2. USD
3. EUR
4. GBP
5. JPY
6. CAD
==============================================
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
51
1.1.10 Estructura de condicionales en Python
Uno de las cosas más poderosas en programación es controlar el flujo de ejecución, para
esto se utilizan condicionales.
Las condicionales son sentencias que devuelven un valor booleano (True, False), las mas
utilizadas son:
== Es igual A B A and B
!= Es diferente 0 0 0
> Es mayor 0 1 0
>= Es mayor o igual 1 0 0
< Es menor 1 1 1
<= Es menor o igual
Tabla or
Operadores lógicos:
A B A or B
and 0 0 0
or 0 1 1
not 1 0 1
1 1 1
Tablas de verdad
Tablas de verdad o tabla de valores de
Tabla not
verdad, es una tabla que muestra el valor
de verdad de una proposición
compuesta, para cada combinación de A not A
valores de verdad que se pueda asignar a 1 0
sus componentes. Sea: 0 1
1 = True
0 = False
El código ASCII
Al comparar los caracteres tener en cuenta el código ASCII por ejemplo z (minúscula)
equivale a 122 y a (minúscula) equivale a 97. z > a = True, z (122) es mayor que a (97)
52
Ejemplos:
Operadores relacionados (Operadores_relacionales.py)
# Operadores relacionales: ==, !=, >, >=, <, <=
from os import system
system("cls")
print ("Operadores relacionales:","\n")
print ("10 == 10 es ",10==10)
print ("a' == 'a' es ", 'a' == 'a')
print ("'diego' == 'Diego' es ", 'diego' == 'Diego') # La secuencia de carac
teres no es igual
print ("10 > 15 es ",10 > 15) # False
print ("'z' > 'a' es ", 'z' > 'a',"\n") # True ya que aplicamos comparación
lexicográfica a, b, c donde la letra derecha es mayor a la izquierda
# Operador de desigualdad
print ("Operadors de desigualdad","\n")
print("10 != 10 es",10 != 10) # False porque 10 si es igual a 10
print ("15 != 10 es", 15 != 10) # True
print ("10 >= 11 es", 10 >= 11) # False
print("15 <= 15 es", 15 <= 15) # True
# Operador lógicos: and, or, not para comparar diferentes valores booleanos
# Operador AND: Evalúa que los dos valores sean verdaderos o se cumplan
print ("10 > 15 and 15 > 20 es",10 > 15 and 15 > 20) # False ya que las dos
expresiones deben ser verdaderas
# Es igual que decir True and True = True
print ("'a' == 'a' and 'b' == 'b' es", 'a' == 'a' and 'b' == 'b') # True ya
que las dos expresiones son verdaderas
def say_hello(age):
if age >= 18:
print("Hola senior","\n")
53
else:
print("Hola junior","\n")
say_hello(18)
Operadores relacionales:
10 == 10 es True
a' == 'a' es True
'diego' == 'Diego' es False
10 > 15 es False
'z' > 'a' es True
Operadores de desigualdad
10 != 10 es False
15 != 10 es True
10 >= 11 es False
15 <= 15 es True
10 > 15 and 15 > 20 es False
'a' == 'a' and 'b' == 'b' es True
'a' == 'a' or 'b' != 'b' es True
Condicionales
Hola senior
(condicionales_aplicados.py)
from os import system
system("cls")
""" Una tienda de helado da un descuento por compra a sus
clientes con membresía dependiendo de su tipo, solo
existen tres tipos de membresía, tipo 1, tipo2 y tipo 3.
Los descuentos son los siguientes:
54
Premiun 1 20% de descuento
Dorada 2 15% de descuento
Platino 3 10% de descuento
"""
def pagar(descuento,cuenta):
paga = cuenta-(cuenta * descuento)
print("")
print("TOTAL A PAGAR ${}".format(paga),"\n")
def run(cuenta):
if membresia == 1:
pagar(0.2,cuenta)
elif membresia == 2:
pagar(0.15,cuenta)
elif membresia == 3:
pagar(0.1,cuenta)
else:
print("Error. Digite nuevamente")
if __name__ == "__main__":
menu= """
----------------
CAJA MEMBRESIAS
----------------
1. Premium
2. Dorada
3. Platino
================
"""
print(menu)
membresia = int(input("Digite el tipo de membresía (1, 2 o 3): "))
print("")
cuenta = float(input("Digite TOTAL de la cuenta: $"))
run(cuenta)
55
----------------
CAJA MEMBRESIAS
----------------
1. Premium
2. Dorada
3. Platino
================
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
El código ASCII, sigla en inglés de American Standard Code for Information Interchange
( Código Estadounidense Estándar para el Intercambio de Información)
https://elcodigoascii.com.ar/
Tablas de la verdad
https://www.ecured.cu/Tablas_de_la_verdad
56
1.1.11 Calcular si un número es primo en Python
Construir un programa que nos permite determinar si un número es primo o no, usando
expresiones booleanas, operadores relacionales y operadores lógicos.
Recuerde
Todas las funciones deben declararse con el keyword def
Un bug es un error en el código y requiere ser verificado
Número primo
Un número primo (o un primo) es un número natural que tiene exactamente dos
divisores de números naturales distintos: 1 y a sí mismo. Por ejemplo, hay varios
números primos del 1 al 200: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
61, 67, 71, 73, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157,
163, 167, 173, 179, 181, 191, 193, 197, 199.
def calcular(number):
57
if number % i == 0:
result = False
break
return result
def run():
print('Recuerde que los números primos solo se dividen')
print('de manera exacta por 1 y por si mismos ',"\n")
number = int(input('Escriba un Número: '))
print("")
resultado = calcular(number)
if resultado is True:
print('El número {} es primo'.format(number),"\n")
else:
print('El número {} NO ES PRIMO'.format(number),"\n")
Escriba un Número: 91
El número 91 NO ES PRIMO
58
1.1.12 Buenas prácticas del lenguaje
TUTORIAL DE PYTHON
>>>import this
The Zen of Python, by Tim Peters
*
Hermoso es mejor que feo.
Explícito es mejor que implícito.
Simple es mejor que complejo.
Complejo es mejor que complicado.
Plano es mejor que anidado.
Esparcido es mejor que denso.
La legibilidad es importante.
Los casos especiales no son lo suficientemente especiales como para
romper las reglas.
La practicidad le gana a la pureza.
Los errores no deberían pasar en silencio.
A menos que sean silenciados.
Frente a la ambigüedad, evitar la tentación de adivinar.
Debería haber una, y preferiblemente solo una, manera obvia de
hacerlo.
A pesar de que esa manera no sea obvia a menos que seas Holandés.
Ahora es mejor que nunca.
A pesar de que nunca es muchas veces mejor que *ahora* mismo.
Si la implementación es difícil de explicar, es una mala idea.
Si la implementación es fácil de explicar, puede que sea una buena
idea.
Los espacios de nombres son una gran idea, ¡tengamos más de esos!
59
Declaraciones condicionales
Las declaraciones condicionales en Python se pueden usar para tomar decisiones basadas
en ciertas condiciones del programa. Las siguientes son declaraciones condicionales de
uso común en Python.
1- If then
Como su nombre lo indica es bastante simple. Si se cumple una determinada
condición, entonces realice alguna acción.
Start
Condition
True
Statements False
End
2- If then else
Se puede agregar una instrucción else adicional a una condición if, para ejecutar lo
que debería suceder si no se cumple la condición if.
Start
Condition
True
Statements False
60
Ejemplo:
Utilización de condicionales (declaraciones_anidadas.py)
from os import system
system("cls")
if gender == 'femenino':
if age > 18:
print("Bienvenida señora")
else:
print("Bienvenida señorita")
def run():
# Ingresamos los valores por teclado
gender = str(input("Ingrese su género: ")).lower()
age = int(input("Ingrese su edad: "))
det_gender(gender, age)
if __name__ == '__main__':
run()
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
61
Documentación de Python (ver Library Reference)
https://www.python.org/doc/
62
1.2 Uso de Strings y Ciclos
Cadenas (strings)
63
Métodos de strings
Ejemplo:
Este ejemplo permite modificar caracteres utilizando listas (string_cambios.py)
from os import system
system("cls")
def run():
s = list(input('Ingrese la palabra que quiere cambiar: '))
r = str(input('Ingrese la letra que desea agregar: '))
t = int(input('Ingrese la posición que desea modificar: '))
s[t]=r
if __name__ == '__main__':
run()
64
a=0
for i in range (5):
a=a+i
print (a)
"""---------------------------------------------------"""
print("Resultado código modificando la identación","\n")
a=0
for i in range (5):
a=a+i
print (a,"\n")
"""---------------------------------------------------"""
a=int(input("Ingrese un número "))
if (a%2==0):
print ("El número {} es par".format(a),"\n")
else:
print ("El número {} es impar".format(a),"\n")
"""---------------------------------------------------"""
for i in range (5):
a=int(input("Ingrese un número par o impar "))
if (a%2==0):
print ("El número {} es par".format(a))
else:
print ("El número {} es impar".format(a))
0
1
3
6
10
Resultado código modificando la identación
10
Ingrese un número 6
El número 6 es par
65
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Codificación de caracteres
https://es.wikipedia.org/wiki/Codificaci%C3%B3n_de_caracteres
El factorial de un número
https://www.sangakoo.com/es/temas/el-factorial-de-un-numero
Python Indentación
https://aprende.olimpiada-informatica.org/python-identacion
66
1.2.2 Manejo de Strings en Python
Métodos de strings
Los string, tienen varios métodos en el siguiente programa se utilizan algunos de ellos
Ejemplo:
Utilización de métodos de string (métodos_string.py)
from os import system
system("cls")
Palabra = "letras"
Texto = "Los textos pueden contener palabras"
ListaString = {"X","W","Y","Z"}
caracteres=30
#Retorna un string con todas las letras en mayúsculas
print (' 1-',Palabra.upper())
67
Palabra1=Palabra.center(caracteres,'=').upper()
print ('11-',Palabra1,'\n')
print ("En el renglón 11 hay {} caracteres".format(len(Palabra1)))
print("")
print ('12-', Palabra[len(Palabra)-1])
print ('13-', Palabra.find('t'))
print ('14-', Palabra[2])
1- LETRAS
2- False
3- letras
4- True
5- 4
6- False
7- False
8- False
9- ['Los', 'textos', 'pueden', 'contener', 'palabras']
10- XletrasZletrasYletrasW
11- ============LETRAS============
12- s
13- 2
14- t
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
String Methods
https://docs.python.org/3.8/library/stdtypes.html#string-methods
Métodos de formato
https://uniwebsidad.com/libros/python/capitulo-6/metodos-de-formato
68
1.2.3 Factorial de un número con recursión
69
Ejemplo:
Programa para el cálculo del factorial de un número (factorial.py)
from os import system
system("cls")
def factorial(number):
if number == 0:
return 1
if __name__ == "__main__":
number = int(input('Calculo del factorial escriba un número: '))
print("{}! es {}".format(number,factorial(number)))
Donde al estar siendo recursiva se generaron 5 funciones pero se empiezan a generar los
resultados de manera inversa:
Esa es la forma en la que funciona cada operación recursiva genera una nueva función
f(n+1) y la forma en la que se resuelven es de la última función a la primera.
w = turtle.Screen()
t = turtle.Turtle()
t.color("green")
numNivel = 8
largoRama = 100
angulo = 17
70
def cambioColor():
colors=['blue' , 'red', 'orange', 'purple']
t.pencolor(random.choice(colors))
cambioColor()
width = t.width()
t.width(width * 3.0 / 4.0)
largoRama = 3.0 / 4.0 * largoRama
t.left(angulo)
t.forward(largoRama)
def main():
t.speed("fastest")
t.left(90)
t.width(numNivel) #
t.penup()
t.back(largoRama)
t.pendown()
t.forward(largoRama)
dibujaArbol(largoRama, 2)
turtle.done()
if __name__ == "__main__":
main()
71
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Videos
¿Qué es la RECURSIVIDAD? (en Ingeniería Informática)
https://youtu.be/yX5kR63Dpdw
72
1.2.4 Separar cadenas de texto en Python
my_string = 'platzi'
print ('my_string =',my_string)
print ('index -> 012345','\n')
print ('my_string[1:3]',my_string[1:3])
print ('my_string[1:]',my_string[1:])
# notación [start,end,step]
print ('my_string[0:6:2]',my_string[0:6:2])
print ('my_string[::1]',my_string[::-1])
my_string = platzi
index -> 012345
my_string[1:3] la
my_string[1:] latzi
my_string[0:6:2] paz
my_string[::1] iztalp
Ejemplo:
Código que muestra el resultado de funciones con string (funciones_cadenas.py).
from os import system
system("cls")
73
"capitalize":my_string.capitalize(),
'remplace':my_string.replace('a','i')
}
for key, value in dic.items():
print("Acción: " + key + " Resultado: " + str(value))
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
74
1.2.5 Ciclos en Python con for
Iteración
Las iteraciones permiten realizar while loop
la misma secuencia de pasos Similar a un for loop; pero en
varias veces. lugar de recorrer una secuencia,
También permiten recorrer una se ejecuta hasta que una
secuencia (como una string). condición se convierta en falsa.
Es una de las herramientas clave Se debe tener mucho cuidado de
de cualquier programador. no caer en un infinite loop.
Ejemplos:
En el ejemplo se construye un triángulo en donde se incluyen el símbolo * y el
conteo de números, se pretende exponer el uso de los ciclos anidados, recordando
que por cada siclo de afuera se ejecuta en su totalidad el siclo de adentro, observar
como el siclo de adentro toma el valor del siclo de afuera para poder avanzar.
(triangulo_for.py)
from os import system
system("cls")
def main():
for i in range(20):
for j in range(i):
print('*',j,end="")
print(" ",i)
if __name__ == '__main__':
main()
75
0
* 0 1
* 0* 1 2
* 0* 1* 2 3
* 0* 1* 2* 3 4
* 0* 1* 2* 3* 4 5
* 0* 1* 2* 3* 4* 5 6
* 0* 1* 2* 3* 4* 5* 6 7
* 0* 1* 2* 3* 4* 5* 6* 7 8
* 0* 1* 2* 3* 4* 5* 6* 7* 8 9
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9 10
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10 11
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11 12
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12 13
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13 14
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14 15
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14* 15 16
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14* 15* 16 17
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14* 15* 16* 17 18
* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* 10* 11* 12* 13* 14* 15* 16* 17* 18 19
def bucle():
number_finish = int(input('Ingrese un número para iterar: '))
for i in range(number_finish):
print(f'Número {i}')
print(" ")
print(list(range(0,number_finish )),"\n")
def bucle_continue():
for i in range(10):
if i % 3 != 0:
continue
else:
print('{}^2 = {} '.format(i,i ** 2))
def bucle_break():
for i in range(20):
if i % 3 == 0:
print(i)
elif i == 22:
break
76
def recorrer_string():
word = 'ferrocarril'
for letter in word:
print(letter)
def main():
menu= """Práctica con for_loop
1. bucle
2. bucle_continue
3. bucle_break
4. recorrer_string
"""
print(menu)
option1 = int(input("Seleccione una opción "))
if(option1 == 1):
bucle()
elif(option1 == 2):
bucle_continue()
elif(option1 == 3):
bucle_break()
elif(option1 == 4):
recorrer_string()
if __name__ == '__main__':
main()
1. bucle
2. bucle_continue
3. bucle_break
4. recorrer_string
[0, 1, 2, 3, 4]
77
Práctica con for_loop
1. bucle
2. bucle_continue
3. bucle_break
4. recorrer_string
1. bucle
2. bucle_continue
3. bucle_break
4. recorrer_string
1. bucle
2. bucle_continue
3. bucle_break
4. recorrer_string
78
1.2.6 Ciclos de Python en while
Ejemplos:
El siguiente programa permite adivinar un número dentro de un rango fijado.
(randon.py)
def run():
number_found = False
system("cls") #Clear the console
print(''.center(37,'='))
print('..:: EN BUSCA DEL NÚMERO SECRETO ::..')
print(''.center(37,'='))
aleatorio = calc_random()
intentos = 0
number_found = True
pass
elif number > aleatorio:
print('\aMejor intenta con un número más bajo...')
else:
print('\aMejor intenta con un número más alto..')
79
def calc_random():
if __name__ == '__main__':
run()
=====================================
..:: EN BUSCA DEL NÚMERO SECRETO ::..
=====================================
--> Primero definamos el rango <--
--> Desde el número: 1
--> Hasta el número: 9
======================
**** A JUGAR ****
======================
Adivina el número secreto: 3
Mejor intenta con un número más alto..
Adivina el número secreto: 5
Mejor intenta con un número más alto..
Adivina el número secreto: 6
Mejor intenta con un número más alto..
Adivina el número secreto: 7
Mejor intenta con un número más alto..
Adivina el número secreto: 8
=================================
**** G E N I A L ****
**** Encontraste el Número! ****
====== Total de intentos 5 ======
80
Programa que simula el juego de Papel, Tijeras y Piedra, se juega entre el
computador y el jugador humano ( juego_piedra_papel_tijera.py).
from os import system
system("cls")
import random
def run():
player = 0
botplayer = 0
play = True
ans = 0
while play:
print(''.center(35,'='))
print ('1: Papel, 2: Tijeras, 3: Piedra ')
print(''.center(35,'='))
human = int(input('--> '))
print(''.center(35,'='))
bot = random.randint(1, 3)
81
elif human == 2 and bot == 1:
print('Human: Tijeras')
print('Bot : Papel')
print('Human wins')
player += 1
else:
print('Empate')
print('Score'.center(35,'='))
print(f'Human player: {player}')
print(f'Bot player: {botplayer}')
print('Score'.center(35,'='),'\n')
ans = input('Presione 1 para volver a jugar o cualquier otra tecla p
ara salir ')
system("cls")
if ans != "1":
play = False
if __name__ == '__main__':
run()
===================================
1: Papel, 2: Tijeras, 3: Piedra
===================================
--> 2
===================================
Human: Tijeras
Bot : Piedra
Bot wins
===============Score===============
Human player: 1
Bot player: 3
===============Score===============
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
82
https://platzi.com/blog/f-strings-en-python/
83
1.2.7 Calcular si una palabra es palíndromo con Python
Crear programas para saber si una palabra es palíndromo. Se entienden como palíndromo
o palíndromos, a las palabras o frases que se leen de igual manera hacia adelante o hacia
atrás, por ejemplo:
Ana Oro Reconocer
Araña Radar Salas
Arenera Rayar Sometemos
Ejemplo:
Programa para saber si una palabra es palíndromo. (palindromo1.py)
from os import system
system("cls")
def palindrome(word):
reversed_letters =[]
if reversed_word == word:
return True
return False
if __name__ == '__main__':
word = str.lower(input('Escribe una palabra --> '))
result = palindrome(word)
if result is True:
print(f'La palabra {word} SI es un palíndromo')
else:
print(f'La palabra {word} NO es un palíndromo')
84
Programa modificado para verificar si una palabra es palíndromo.
(palindromo2.py)
from os import system
system("cls")
def run():
word = str.lower(input('Escribe una palabra --> '))
print(f'La palabra {word} SI es un palíndromo') if word == word[::-
1] else print(f'La palabra {word} NO es un palíndromo')
if __name__ == '__main__':
run()
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
85
1.3 Estructuras de datos
Listas
Una lista es una secuencia de elementos.
Cuando se asigna a una variable, permite agrupar varios elementos en un solo
lugar.
Se crean con los corchetes [] o con la keyword list
amigos = list()
numeros = [1,2,3,4,5]
supermercado = [‘apio’, ‘tomate’, ‘queso’]
temperaturas = [24, 26, 18, 20, 21]
Acceso a elementos
Las listas son mutables, para añadir elementos a una lista utilizar el método append
Las listas se pueden acceder con índices, que inician en cero.
amigos=list()
amigos.append('Pedro')
amigos[0]
'Pedro'
amigos.append('Enrique')
amigos[1]
'Enrique'
Operaciones de lista
Las listas soportan los operadores + y *
lista_a = [1, 2, 3]
lista_b = [4]
lista_a + lista_b # [1, 2, 3, 4]
lista_b * 3 # [4, 4, 4]
86
List slices
Las listas, al igual que los strings, pueden “rebanarse”.
lista = [1, 2, 3, 4, 5, 6]
lista[1:] # [2, 3, 4, 5, 6]
lista[1:3] # [2, 3]
lista[1:6:2] # [2, 4, 6]
lista[::-1] # [6, 5, 4, 3, 2, 1]
Modificación de lista
mi_otra_lista = [4, 3, 7, 1]
mi_otra_lista.sort()
# [1, 3, 4, 7]
mi_lista.extend(mi_otra_lista)
# [‘juan’, ‘pedro’, ‘pepe’, 4, 3, 7, 1]
del mi_otra_lista[0]
# [3, 7, 1]
Listas y strings
Como un string es una secuencia de caracteres, se puede utilizar para inicializar una lista.
un_string = ‘cama’
una_lista = list(un_string)
# [‘c’, ‘a’, ‘m’, ‘a’]
Iteración de lista
87
Conjuntos (sets)
Similares a una lista, pero no permiten repetidos. Se crean con el keyword set
onjunto = set()
conjunto.add(2)
# {2}
conjunto.add(2)
conjunto.add(3)
# {2, 3}
2 in conjunto
# True
X in S
X not in S
s.union(t)
s.intersection(t)
s.difference(t)
s.issubset(t)
s.issuperset(t)
Ejemplos:
Programa para manipular Listas, calcularla temperatura promedio. Para el primer
caso, convierto el valor en un entero con el operador /. Para el segundo caso, se
utiliza el operador // el cual da como resultado un numero entero según la
documentación de Python. (listas.py)
from os import system
system("cls")
def promedio(temperaturas):
suma_de_temperaturas=0
promedio = suma_de_temperaturas/len(temperaturas)
pro_int = suma_de_temperaturas//len(temperaturas)
return promedio,pro_int
if __name__ == '__main__':
88
temperaturas =[18,20,16,21,19,21]
calc_temp=promedio(temperaturas)
print(f'Las temperaturas son: {(temperaturas)}')
print(f'La temperatura promedio redondeada es {calc_temp[1]}')
print('La temperatura promedio es de: {0:.3f}'.format(calc_temp[0]))
def av_tem(temps):
sum_of_temps = 0
print(''.center(25,'='))
print ('PROMEDIO DE TEMPERATURAS')
print(''.center(25,'='))
for temp in temps:
sum_of_temps += temp
grados =sum_of_temps/len(temps)
return grados
if __name__ == '__main__':
temps =list()
temmp = float(input('Temperatura del Lunes : '))
temps.append(temmp)
temmp = float(input('Temperatura del Martes : '))
temps.append(temmp)
temmp = float(input('Temperatura del Miércoles: '))
temps.append(temmp)
temmp = float(input('Temperatura del Jueves : '))
temps.append(temmp)
temmp = float(input('Temperatura del Viernes : '))
temps.append(temmp)
temmp = float(input('Temperatura del Sábado : '))
temps.append(temmp)
temmp = float(input('Temperatura del Domingo : '))
89
temps.append(temmp)
average = av_tem(temps)
print(f'Las temperaturas de la semana fueron: {(temps)}','\n')
print('La temperatura promedio es: {0:.2f}'.format(average),'\n')
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Listas
https://www.mclibre.org/consultar/python/lecciones/python-listas.html
Data Structures
https://docs.python.org/3.7/tutorial/datastructures.html
90
1.3.2 Operaciones con listas en Python
Las siguientes son las operaciones que se hacen con las listas:
Las listas son Arrays y las tuplas son Arrays. La diferencia: las tuplas son inmutables
Algunos métodos de las listas:
91
Ejemplo:
Programa aplicando el uso de las listas (operaciones_listas.py)
from os import system
system("cls")
def view_list(products):
for i in range(len(products)):
print (f'{i} -- {products[i]}')
def add_products(products):
list_products = []
new_products = products.split(',')
for new in new_products:
list_products.append(new)
return list_products
def delete_products(new_products):
select = input('¿Qué producto ya compró? (Seleccione el número del produ
cto): ')
del new_products[int(select)]
return new_products
if __name__ == '__main__':
products = input('Qué productos le gustaría agregar a su lista de compra
s \n[Sepárelos por una coma (,)]:')
new_products = add_products(products)
view_list(new_products)
delete = delete_products(new_products)
while len(delete) > 0:
view_list(delete)
new = delete_products(delete)
else:
print('¡Termino su lista de compras!')
92
Programa utiliza diferentes metodos de listas (utilizacion_listas.py)
from os import system
system("cls")
miLista=['A0','A1','A2','A3','A4']
print('Elementos de miLista = ',miLista)
print (type(miLista))
print('Elemento posición 2 de miLista',miLista[2])
print('Elemento posición -2 de miLista ',miLista[-2])
print('Todos los elementos del 2 al final. (Porciones) ',miLista[2:])
print('Elementos del 1 al 3 el 3. (Porciones) ',miLista[1:3])
print('Elementos del 0 al 3 excluye el 3. (Porciones) ',miLista[:3])
miLista.append('AX')
print('Inserta al final un dato, miLista.append(AX) ', miLista,'\n')
print('Todos los elementos ',miLista[:],'\n')
miLista.insert(2,'NYX')
print('Inserta un elemento en la posición 2, los demás se mueven ')
print('Todos los elementos',miLista[:],'\n')
nuevaLista=['Y0','Y1','Y2']
print ('inserta una lista al final de miLista')
miLista.extend(nuevaLista)
print('Elementos de miLista = ',miLista,'\n')
print('Posición de la primera coincidencia AX ',miLista.index('AX'))
print('Valor booleano si existe o no el dato R ','R' in miLista)
print('Elementos de miLista = ',miLista,'\n')
print('Elimina el elemento AX','\n')
miLista.remove('AX')
print('Elementos de miLista = ',miLista)
print ('Extrae el último elemento ', miLista.pop())
print('Elementos de miLista = ',miLista)
lista3=miLista+nuevaLista
print('Unir dos listas lista3 = miLista+nuevaLista ','\n')
print('Elementos de lista3 = ',lista3,'\n')
93
ta = ['A0', 'A1', 'A2', 'A3', 'A4']
<class 'list'>
Elemento posición 2 de miLista A2
Elemento posición -2 de miLista A3
Todos los elementos del 2 al final. (Porciones) ['A2', 'A3', 'A4']
Elementos del 1 al 3 el 3. (Porciones) ['A1', 'A2']
Elementos del 0 al 3 excluye el 3. (Porciones) ['A0', 'A1', 'A2']
Inserta al final un dato, miLista.append(AX) ['A0', 'A1', 'A2', 'A3',
'A4', 'AX']
Elimina el elemento AX
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
94
Data Structures- More on Lists
https://docs.python.org/3.8/tutorial/datastructures.html
95
1.3.3 Juego del ahorcado con Python
Descripción y objetivo: El programa ponen una palabra secreta. El jugador podrá ir
seleccionando letras que aparecerán en la palabra secreta, si ésta las contiene, se muestra
en el sitio en donde está ubicada dentro de la palabra secreta. en caso contrario contará
como fallo. El objetivo consiste en acertar la palabra secreta sin cometer errores.
Ejemplos:
Programa juego del ahorcado versión 1 (ahorcado_juego.py)
import os
os.system('cls') #clear screen
import time
import random
IMAGES = ['''
+---+
| |
|
|
|
|
=========''', '''
+---+
| |
O |
|
|
|
=========''', '''
+---+
| |
O |
| |
|
|
=========''', '''
+---+
| |
O |
/| |
|
|
96
=========''', '''
+---+
| |
O |
/|\ |
|
|
=========''', '''
+---+
| |
O |
/|\ |
| |
|
=========''', '''
+---+
| |
O |
/|\ |
| |
/ |
=========''', '''
+---+
| |
O |
/|\ |
| |
/ \ |
=========''', '''
''']
WORDS = [
'lavadora',
'secadora',
'sofa',
'gobierno',
'diputado',
'democracia',
'computadora',
'teclado',
'electron'
]
97
def timer(run):
def calculo():
t1=time.time()
run()
t2=time.time()
tt =t2-t1
print('El juego duró {0:.2f} segundos '.format(tt))
return calculo
def random_word():
idx = random.randint(0, len(WORDS) - 1)
return WORDS[idx]
@timer
def run():
word = random_word()
hidden_word = ['-'] * len(word)
tries = 0
while True:
display_board(hidden_word, tries)
current_letter = str.lower(input('Escoge una letra: '))
letter_indexes = []
for idx in range(len(word)):
if word[idx] == current_letter:
letter_indexes.append(idx)
if len(letter_indexes) == 0:
tries += 1
if tries == 7:
display_board(hidden_word, tries)
print('')
print('¡Perdiste! La palabra correcta era {}'.format(word))
break
else:
for idx in letter_indexes:
hidden_word[idx] = current_letter
letter_indexes = []
98
try:
hidden_word.index('-')
except ValueError:
print('')
print('¡Felicidades! Ganaste. La palabra es: {}'.format(word))
break
if __name__ == '__main__':
print('B I E N V E N I D O S A A H O R C A D O S')
run()
+---+
| |
O |
|
|
|
=========
+---+
| |
O |
|
|
|
=========
99
1.3.4 Interfaz del ahorcado
def run():
continue_to_play = True
while continue_to_play:
op = ''
print('\nBienvenido al juego del ahorcado.\n')
print_graphic(0) # 0 a 7
input_letters = []
result_found = 0
find_letter = ''
word_play = word_to_play()
max_fails = 7
while result_found == 0:
while input_letters.count(find_letter) > 0 or find_letter == '':
find_letter =str.lower(input('\nEscoge una letra: '))
if len(find_letter) > 1:
find_letter = find_letter[0]
input_letters.append(find_letter)
result_found = word_view(word_play, input_letters, max_fails)
if result_found > 0:
print('Felicidades, ganaste!!!')
elif result_found < 0:
print('Lamentablemente perdiste. La palabra a encontrar era
"{}"'.format(word_play))
100
ALT 196 ─
ALT 179 │
"""
list_word = list(word)
header = '┌' + (('─' * 3) * len(word)) + '┐'
footer = '└' + (('─' * 3) * len(word)) + '┘'
hidden_word = list('|' + (' ░ ' * len(word)) + '|')
number_fails = 0
for letter in input_letters:
occur = list_word.count(letter)
index_letter = -1
if occur > 0:
for i in range(occur):
index_letter = list_word.index(letter, index_letter + 1)
hidden_word[((index_letter +1) * 2) + index_letter] = letter
else:
number_fails += 1
print_graphic(number_fails)
print(header)
print(''.join(hidden_word))
print(footer)
if hidden_word.count('░') == 0:
return 1
elif number_fails == max_fails:
return -1
else:
return 0
def print_graphic(error):
print(' +---+')
print(' | |')
if error == 0:
print(' |')
elif error >= 1:
print(' 0 |')
if error < 2:
print(' |')
elif error == 2:
print(' | |')
elif error == 3:
print(' /| |')
101
elif error >= 4:
print(' /|\ |')
if error < 5:
print(' |')
elif error >= 5:
print(' | |')
if error < 6:
print(' |')
elif error == 6:
print(' / |')
elif error == 7:
print(' / \ |')
print(' |')
print(' ===========')
def word_to_play():
words = ['edificio',
'avenida',
'programacion',
'automovil',
'botella',
'mecanografia',
'inteligencia',
'artificial'
]
return words[random.randint(0, len(words) - 1)]
if __name__ == '__main__':
run()
102
Escoge una letra: t
+---+
| |
0 |
/|\ |
| |
/ |
|
===========
┌─────────────────────┐
| ░ o t e ░ ░ a |
└─────────────────────┘
103
1.3.5 Lógica del ahorcado
def hombre(seg,t):
t.pendown()
t.pencolor('black')
if seg == 1:
t.circle(25)
elif seg == 2:
t.right(90)
t.forward(100)
elif seg == 3:
t.right(45)
t.forward(75)
t.goto(0,-100)
elif seg == 4:
t.left(90)
t.forward(75)
t.penup()
t.goto(0,-40)
elif seg == 5:
t.left(45)
t.forward(50)
t.goto(0,-40)
elif seg == 6:
t.left(180)
t.forward(50)
def run(t):
words = ['arroz', 'amarillo','amor','altar','as','ave','avestrus','antro
',
'azul','atomico','beso','baston','brea','britanico','becerro','bote','bl
anco',
'brasalete','brazo','bar','casa','centavo','cianuro','coco','cuerpo','ca
labaza',
'cerro','cinturon','col','cruz','dado','dragon','dos','diente','doctor',
'doce',
'duende','dardo','desde','donde','efe','eres','elefante','entero','feo',
'frente',
'fase','futbol','frase','frio','gato','gas','gel','gol','hola','hielo','
haz','iglesia',
104
'juez','londres']
num = len(words) - 1
x = random.randint(0,num)
w_found = False
w = words[x]
word = w
lon = len(w)
y = '_'
string = ''
print('Adivina la palabra de {} letras'.format(lon))
for i in range(1,lon+1):
string = string + y
print(string)
seg = 0
while not w_found:
y = str.lower(input('¿Digite una letra o palabra ? '))
if len(y) == 1: ### una letra
if w.find(y) == -1:
print('LETRA EQUIVOCADA')
print('')
print('')
system("cls")
print('Adivina la palabra de {} letras'.format(lon))
print(string)
seg = seg + 1
if seg >6:
print(f'La palabra oculta era {word}')
print('GAME OVER')
w_found = True
else:
hombre(seg,t)
cont = w.find(y)
print('')
print('Adivina la palabra de {} letras'.format(lon))
string = list(string)
w = list(w)
for i in range(0,lon):
if i == cont:
string [i] = y
string = ''.join(string)
print(string)
105
w[cont] = '_'
w = ''.join(w)
else:
if y == word:
w_found = True
print('E N H O R A B U E N A H A S E N C O N T R A D O L A
P A L A B R A')
else:
print('PALABRA EQUIVOCADA')
print('')
print('')
print('Adivina la palabra de {} letras'.format(lon))
print(string)
seg = seg + 1
if seg > 6:
print('GAME OVER')
w_found = True
else:
hombre(seg,t)
if string.find('_') == -1:
w_found = True
print('E N H O R A B U E N A H A S E N C O N T R A D O L A P
A L A B R A')
if __name__ == "__main__":
print('A H O R C A D O')
print('')
window = turtle.Screen()
t = turtle.Turtle()
t.pencolor('blue')
t.penup()
t.goto(-200,-200)
t.pendown()
t.pensize(5)
t.forward(100)
t.penup()
t.goto(-150,-200)
t.pendown()
t.left(90)
t.forward(300)
t.right(90)
t.forward(150)
t.right(90)
t.forward(50)
106
t.penup()
t.left(90)
t.goto(0,0)
t.pensize(1)
run(t)
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
107
1.3.6 ¿Qué es una búsqueda binaria?
Los algoritmos son una serie de hay números mayores y menores que el
instrucciones que nos llevan a un número que se está buscando.
resultado, por ejemplo que tal si
queremos saber si un número se Seleccionar un numero aleatorio para
encuentra en una lista. dividir la lista, puede escoger cualquier
número, en éste caso sumar el primer y
Una forma es buscar un ítem tras otro, el último índice de la lista, se suman y
pero sí la lista es muy larga esta forma no dividen en dos (por eso se llama binario),
es la más eficiente, una forma más luego comparar el número que está en el
eficiente de solucionar éste problema es índice, de esta manera se elimina a la
usar una búsqueda binaria. mitad de las opciones. Continuar
dividiendo la lista y comparando hasta
Con el algoritmo de búsqueda binaria se que se llegue al resultado esperado.
parte de la lista ordenada, se sabe que
2 4 5 7 8 9 12 14 17 19 22 25 27 28 33 37
low md high
2 4 5 7 8 9 12 14 17 19 22 25 27 28 33 37
low md high
2 4 5 7 8 9 12 14 17 19 22 25 27 28 33 37
Find
1.3.7 Implementar búsqueda binaria en Python
from os import system
system("cls")
108
if numbers[mid] == number_to_find:
return True
elif numbers[mid] > number_to_find:
return binary_search(numbers, number_to_find, low, mid - 1)
else:
return binary_search(numbers, number_to_find, mid + 1, high)
if __name__ == '__main__':
numbers = [2, 4, 5, 7, 8, 9, 12, 14, 17, 19, 22, 25, 27, 28, 33,37]
if result is True:
print('El número SI está en la lista.')
else:
print('El número NO está en la lista.')
Ingresa un número: 22
El número SI está en la lista.
Ingresa un número: 54
El número NO está en la lista.
Ejemplo:
Buscar un numero en una lista con números aleatorios y que esta desordenada.
(busqueda_binaria_desordenada.py)
from os import system
system("cls")
import random
def random_numbers(array_quantity):
array = []
for i in range(array_quantity):
random_number = random.randint(0,100)
# print(random_number)
array.append(random_number)
return array
109
def binary_search(numbers, number_to_find, low, high):
#la función binary_search es recursiva, ya que la vamos a utilizar repet
idas veces hasta encontrar el resultado deseado
if low > high: #caso base en el que el número no está en la lista
return False
mid_index = int((low + high) / 2)
if numbers[mid_index] == number_to_find:
#caso base en el que el número está en la lista
return True
if __name__ == "__main__":
array_quantity = int(input('Ingrese el tamaño de la lista: '))
numbers = random_numbers(array_quantity)
numbers.sort() #Ordena la lista de menor a mayor
print(numbers)
number_to_find = int(input('Ingress el número a buscar en la lista: '))
result = binary_search(numbers, number_to_find, 0, len(numbers) - 1)
if result is True:
print('El número SI está en la lista.')
else:
print('El número NO está en la lista')
---------------------------------------------------------------------
110
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Búsqueda binaria
https://es.khanacademy.org/computing/computer-science/algorithms/binary-
search/a/binary-search
111
1.3.8 Diccionarios en Python
Un diccionario es un mapa de valores, los cuales deben tener una llav. Los diccionarios se
declaran con (llaves) {} o con la función dict()
Cuando iteramos en diccionarios podemos hacerlo a través de las llaves, valores o ítems.
Declarar diccionarios
mi_diccionario ={}
mi_diccionario['primer_elemento'] = 'hola'
mi_diccionario['segundo elemento'] = 'adios'
Iterar en llaves
for key in calificaciones.keys():
print(key)
Iterar en valores
for value in calificaciones.values():
print(value)
Iterer en ítems
for key,value in calificaciones.items():
print('llave: {}, valor {}'.format(key,value))
Ejemplos:
Creación de diccionarios (diccionario.py)
from os import system
system("cls")
calificaciones = {}
calificaciones['Matemática'] = 89
calificaciones['Español'] = 89
calificaciones['Historia'] = 89
calificaciones['Ciencias Sociales'] = 96
calificaciones['Ingles'] = 89
calificaciones['Python'] = 78
calificaciones['C++'] = 32
calificaciones['C#'] = 67
if __name__ == "__main__":
for key, value in calificaciones.items():
print(f'LLave: {key}, valor: {value}')
112
Resultado después de ejecutar el código
LLave: Matemática, valor: 89
LLave: Español, valor: 89
LLave: Historia, valor: 89
LLave: Ciencias Sociales, valor: 96
LLave: Ingles, valor: 89
LLave: Python, valor: 78
LLave: C++, valor: 32
LLave: C#, valor: 67
def temper():
lista =[]
promedio = 0
temperatura = {}
temperatura['Lunes'] = 20
temperatura['Martes'] = 21
temperatura['Miercoles'] = 30
temperatura['Jueves'] = 33
temperatura['Viernes'] = 18
temperatura['Sabado'] = 22
temperatura['Domingo'] = 20
113
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Diccionarios en Python
https://devcode.la/tutoriales/diccionarios-en-python/
114
1.3.9 Encriptar mensajes usando diccionarios
Encriptar un mensaje es modificarlo de forma que si alguien que no conoce la clave
intenta leerlo no va a poder hacerlo. La criptografía se usa desde hace miles de años, un
gran ejemplo es cuándo Julio Cesar por ejemplo encriptaba mensajes simplemente
modificando el orden de las letras.
Ejemplo:
Implementación de programa para cifrar mensajes (criptografia.py)
from os import system
system("cls")
"""
Utlizar los dicionarios para cifrar y desfrirar palabras,
para ello se crea un diccionario "KEYS" donde estará el
valor de cada palabra para cifrar el mensaje.
115
't': '3',
'u': ',',
'v': 'J',
'w': 'N',
'x': 'f',
'y': 'm',
'z': 'W',
'A': 'G',
'B': 'S',
'C': 'j',
'D': 'n',
'E': 's',
'F': 'Q',
'G': 'o',
'H': 'e',
'I': 'u',
'J': 'g',
'K': '2',
'L': '9',
'M': 'A',
'N': '5',
'O': '4',
'P': '?',
'Q': 'c',
'R': 'r',
'S': 'O',
'T': 'P',
'U': 'h',
'V': '6',
'W': 'q',
'X': 'H',
'Y': 'R',
'Z': 'l',
'0': 'k',
'1': '7',
'2': 'X',
'3': 'L',
'4': 'p',
'5': 'v',
'6': 'T',
'7': 'V',
'8': 'y',
'9': 'K',
'.': 'Z',
',': 'D',
'?': 'F',
116
'!': 'B',
}
menu = """
M E N S A J E S C I F R A D O S
BIENVENIDO A CRIPTOGRAFIA
[c]ifrar mensaje
[d]ecifrar mensaje
[s]alir
"""
def cypher(message):
words = message.split(' ') #Separa mensajes por espacios
cypher_message = []
for word in words:
cypher_word = ''
for letter in word:
cypher_word += KEYS[letter]
cypher_message.append(cypher_word)
return ' '.join(cypher_message)
def decipher(message):
words = message.split(' ') #Separa mensajes por espacios
decipher_message = []
for word in words:
decipher_word = ''
for letter in word:
for key, value in KEYS.items():
if value == letter:
decipher_word += key
decipher_message.append(decipher_word) #Metos appned ingresa el cara
cter al final
return ' '.join(decipher_message)
"""EN la función "def run" se ejecutan "loop while" que ser infinito
por eso lo inicializa en "True" para que itere hasta que se cumpla la
condicion seleccionada.
Dentro de este "loop while" cse crea la variable "command" que sera la
encargada de guardar lo seleccionado cifrar, decifra o salir
"""
def run():
while True:
print(menu)
117
command = str.lower(input('Seleccione que desea hacer '))
if command == 'c':
system("cls")
message = str(input('Escriba su mensaje: '))
cypher_message = cypher(message)
print(cypher_message)
else:
system("cls")
print('Comando no encontrado!'.center(40,'-'))
if __name__ == '__main__':
run()
M E N S A J E S C I F R A D O S
BIENVENIDO A CRIPTOGRAFIA
[c]ifrar mensaje
[d]ecifrar mensaje
[s]alir
M E N S A J E S C I F R A D O S
BIENVENIDO A CRIPTOGRAFIA
[c]ifrar mensaje
[d]ecifrar mensaje
[s]alir
118
M E N S A J E S C I F R A D O S
BIENVENIDO A CRIPTOGRAFIA
[c]ifrar mensaje
[d]ecifrar mensaje
[s]alir
M E N S A J E S C I F R A D O S
BIENVENIDO A CRIPTOGRAFIA
[c]ifrar mensaje
[d]ecifrar mensaje
[s]alir
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
119
1.3.10 Tuplas en Python
Las tuplas a diferencia de las listas, son inmutables (no se pueden modificar) y estas se
definen con paréntesis tupla = (1,2,3) y de igual forma se accede a su información por
medio de los índices iniciando desde 0. En otras palabras una tupla es como tener una lista
de valores constantes.
De Tupla a Lista:
new_list = list(my_tuple)
De Lista a Tupla
new_tuple = tuple(my_list)
mi_tupla = (1,2,3)
print('Datos de mi_tupla =',mi_tupla)
print('Tipo de datos de mi_tupla ', type(mi_tupla))
nueva_lista= list(mi_tupla)
print('Convertir tupla a lista, nueva_lista = list(mi_tupla), datos de nueva
_lista =',nueva_lista)
print('Tipo de datos de nueva_lista ', type(nueva_lista),'\n')
nueva_tupla = tuple(nueva_lista)
120
Existen 3 estructuras de datos en Python
mi_tupla = (1,2,3)
mi_tupla.append(4,)
AttributeError: 'tuple' object has no attribute 'append'
No pueden eliminarse elementos de una tupla. Las tuplas no tienen los métodos remove
ni pop.
mi_tupla.remove(2)
AttributeError: 'tuple' object has no attribute 'remove'
Las tuplas no pueden modificarse son inmutables, para cambiarel dato se necesita generar
una nueva tupla.
mi_tupla[2] = 4
TypeError: 'tuple' object does not support item assignment
Pueden buscarse elementos en una tupla. Las tuplas usan el método index.
y = tuple((2,4,6,8,'azul'))
print(y)
print('El dato en el índice 4 es',y[4])
print(f'Index en tuplas, el índice del dato {y[4]} es', y.index(y[4]))
print('Es True o False el 8 está en la tupla', 8 in y)
(2, 4, 6, 8, 'azul')
El dato en el índice 4 es azul
Index en tuplas, el índice del dato azul es 4
Es True o False el 8 está en la tupla True
121
Para tener en cuenta de las tuplas
Las tuplas son más rápidas que las listas. Si está definiendo un conjunto
constante de valores y todo lo que va a hacer con él es iterar a través de él, es
mejor usar una tupla en lugar de una lista.
Las tuplas hacen que su código sea más seguro si “protege contra escritura” los
datos que no necesitan ser cambiados. Usar una tupla en lugar de una lista es
como tener una afirmación implícita de que estos datos son constantes y que
se requiere un pensamiento especial (y una función específica) para anular eso.
Ejemplo:
Ejemplo de usos de tuplas (tuplas_pej.py)
from os import system
system("cls")
#Las tuplas no permiten cambiar el valor de un elemento
x = (1,2,3)
print(x)
print(type(x))
meses =('enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto')
print(meses,'\n')
y = tuple((2,4,6,8,'azul'))
print(y)
print('El dato en el índice 4 es',y[4])
print(f'Index en tuplas, el indice del dato {y[4]} es', y.index(y[4]))
print('Es True o False el 8 está en la tupla', 8 in y)
mi_tupla = (1,2,3)
print('Datos de mi_tupla =',mi_tupla)
print('Tipo de datos de mi_tupla ', type(mi_tupla))
nueva_lista= list(mi_tupla)
print('Convertir tupla a lista nueva_lista = list(mi_tupla), datos de nueva_
lista =',nueva_lista)
print('Tipo de datos de nueva_lista ', type(nueva_lista),'\n')
122
nueva_tupla = tuple(nueva_lista)
(1, 2, 3)
<class 'tuple'>
('enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio',
'Agosto')
(2, 4, 6, 8, 'azul')
El dato en el índice 4 es azul
Index en tuplas, el indice del dato azul es 4
Es True o False el 8 está en la tupla True
{(12, 10): 'Bogota', (11, 9): 'Pasto'}
<class 'dict'>
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Tuplas
https://docs.hektorprofe.net/python/colecciones-de-datos/tuplas/
TupleSuyntax
https://wiki.python.org/moin/TupleSyntax
123
1.3.11 Se repite una letra en un string_Programa con tuplas
Una de las características clave de Visual Para la versión de Visual Studio Code se
Studio Code es su excelente soporte de realizan sencillos pasos para verificar el
depuración. El depurador integrado de contenido de variables, funciones y otros
VS Code ayuda a acelerar su ciclo de datos de interés.
edición, compilación y depuración.
Ejemplo:
Construir un programa que permita encontrar el primer carácter que no se repite en un
string. Por ejemplo en el string mimamameama el primer carácter que no se repite es el
carácter i.
El código para esta tarea se indica a continuación. (first_not_repeating_char_initial.py)
def first_not_repeating_char(char_sequence):
seen_letters = {}
final_letters = []
for key, value in seen_letters.items():
if value[1] == 1:
final_letters.append( (key, value[0]) )
if not_repeated_letters:
return not_repeated_letters[0][0]
124
else:
return '_'
if __name__ == '__main__':
char_sequence = str(input('Escribe una secuencia de caracteres: '))
result = first_not_repeating_char(char_sequence)
if result == '_':
print('Todos los caracteres se repiten.')
else:
print('El primer carácter no repetido es: {}'.format(result))
Visual Estudio Code permite hacer seguimiento line por línea al código o depuración, esto
permite verificar el valor que van tomando las variables, funciones, llamados y otros
detalles que ayudan a tomar decisiones en la elaboración de programas. En las siguientes
imágenes se muestra su utilidad:
2. Seleccionar la línea del código que permita detener el programa para realizar las
visualizaciones de las variables y funciones de interés, en el ejemplo se marca con
el cursor la línea 19, se identifica con un punto de color rojo.
125
3. Una vez activa se presenta en la pantalla el menú,
ejecutar el programa (Restar), ingresar la secuencia
de caracteres. Ubicarse con el cursor en la variable char_sequence, en la pantalla
se mostrará su contenido.
126
5. Para terminar la ejecución presionar en el menú Stop, la ejecución se detiene y
muestra el resultado del programa.
127
Escribe una secuencia de caracteres: abcdabcdabzd
El primer carácter no repetido es: z
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Debugging
Una de las características clave de Visual Studio Code es su excelente soporte de
depuración. El depurador integrado de VS Code ayuda a acelerar su ciclo de edición,
compilación y depuración.
https://code.visualstudio.com/docs/editor/debugging
128
1.3.12 Uso de sets en Python
Python también incluye un tipo de dato para conjuntos. Un conjunto es una colección no
ordenada y sin elementos repetidos. Los usos básicos de éstos incluyen verificación de
pertenencia y eliminación de entradas duplicadas. Los conjuntos también soportan
operaciones matemáticas como la unión, intersección, diferencia, y diferencia simétrica.
1 4
S T 3 =
2 5 3
1 2 3 4
3 5
S diferencia T
S unión T (SUT) 1 4 1 2
2 3
5 =
1 3 4
1 2 3
2 5 = 4 5
T diferencia S
4 1 = 4 5
5 3
2
Las llaves o la función set() pueden usarse para crear conjuntos. Para crear un conjunto
vacío usar set(), no {}; esto último crea un diccionario vacío.
Los sets son similares a las listas, pero Métodos del objeto set
estas no permiten elementos repetidos.
Cuando se trabaja con sets, se pueden X in S
realizar las operaciones básicas de X not in S
conjuntos, esto quiere decir que se
puede calcular los valores de s.union(t) -> s | t
intercepción, diferencia, unión. Se crean s.intersection(t) -> s & t
con el keyword set. s.difference(t) -> s - t
s.issubset(t)
conjunto= set() s.issuperset(t)
conjunto.add(2)
conjunto.add(3)
129
Ejemplo:
Sintaxis y utilización de los diferentes métodos de la función set()
rom os import system
system("cls")
s = set([1,2,3])
t = set([3,4,5])
print(f's={s} , t={t}')
print('s.union(t)',s | t)
print('s.intersection(t) ',s & t)
print('s.difference(t) ',s -t)
print('t.difference(s) ',t -s)
print('s.symmetric_difference(t)',s ^ t)
print(s.issubset(t))
print(s.issuperset(t))
print('')
conjunto= set()
conjunto.add(2)
conjunto.add(3)
print('conjunto ',conjunto)
print('')
colores ={'Red','Blue','Green'}
print(colores)
print('Red' in colores)
print('black' not in colores)
colores.add('Violet')
print(colores)
colores.remove('Green')
print(colores)
colores.add('White')
print(colores)
print(type(colores))
colores.clear()
print(colores)
palabra1 = set('abracadabra')
palabra2 = set('alacazam')
print(palabra1,palabra2)
130
s={1, 2, 3} , t={3, 4, 5}
s.union(t) {1, 2, 3, 4, 5}
s.intersection(t) {3}
s.difference(t) {1, 2}
t.difference(s) {4, 5}
s.symmetric_difference(t) {1, 2, 4, 5}
False
False
conjunto {2, 3}
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Sets
https://snakify.org/en/lessons/sets/
131
1.3.13 Dictionary comprehension – list comprehension
Dictionary comprehension y list comprehension nos permite escribir listas o diccionarios
de forma más sencilla.
El azúcar sintáctico es un término acuñado por Peter J. Landin en 1964 para referirse a
los añadidos a la sintaxis de un lenguaje de programación diseñados para hacer
algunas construcciones más fáciles de leer o expresar.
Un buen programador logra que su código sea legible y fácil de leer por otros
programadores
Ejemplo:
En el siguiente código se muestran varios ejemplos en donde se utilizan el
concepto de Azúcar Sintáctica. (azucar_sintactico.py)
from os import system
system("cls")
# 1)
print('(1)'.center(75,'='))
cities = ['Bogotá','México DC','Lima','Quito']
for i, city in enumerate(cities):
print(i,city)
# 2)
print('(2)'.center(75,'='))
x_list ={1,2,3}
y_list ={2,4,6}
for x,y in zip(x_list,y_list):
print(x,y)
# 3)
print('(3)'.center(75,'='))
p,q = 10, -10
print('Before: p=%d, q=%d' % (p,q))
p,q = q,p
print('After : p=%d, q=%d' % (p,q))
# 4)
print('(4)'.center(75,'='))
ages = {
'Mary' :31,
'Pedro' :28,
'Diego' :56
}
age = ages.get('Diego','Unknown')
132
print('Diego is %s years old' % age)
# 5)
print('(5)'.center(75,'='))
una_letra = 'D'
lista_letra = ['A','B','C']
for letter in lista_letra:
if una_letra == letter:
print('La letra',una_letra,'está en la lista',lista_letra)
break
else: #if no break occureed
print('La letra',una_letra,'No está en la lista ',lista_letra)
# 6)
print('(6)'.center(75,'='))
with open('diccionario.txt', encoding='utf8') as f:
for line in f:
print(line)
# 7) list comprehension
print('(7) list comprehension'.center(75,'='))
print([i for i in [1,2,3,4]],'\n')
print([num for num in range(1,31) if num % 2 ==0],'\n')
print([num for num in range(2,31,2)])
# 8) Dictionary comprehension
print('(8) Dictionary comprehension'.center(75,'='))
print({i:j for i,j in{1:'a',2:'b',3:'c'}.items()},'\n')
print({num:num**2 for num in range(1,11)},'\n')
133
================================(1)=================================
0 Bogotá
1 México DC
2 Lima
3 Quito
================================(2)=================================
1 2
2 4
3 6
================================(3)=================================
Before: p=10, q=-10
After : p=-10, q=10
================================(4)=================================
Diego is 56 years old
================================(5)=================================
La letra D No está en la lista ['A', 'B', 'C']
================================(6)=================================
Los diccionarios se encuentran a veces en otros lenguajes
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
====================(8) Dictionary comprehension====================
{1: 'a', 2: 'b', 3: 'c'}
Ayudas en la red
Páginas web
Tutorial de Python
134
https://docs.python.org/es/3/tutorial/index.html
Azúcar sintáctico
https://es.wikipedia.org/wiki/Az%C3%BAcar_sint%C3%A1ctico
Videos
7 Simple Tricks to Write Better Python Code
https://www.youtube.com/watch?v=VBokjWj_cEA
135
1.4 Uso de objetos y módulos
Excepciones except:
Incluso si una declaración o expresión es (Bloque Obligatorio)
sintácticamente correcta, puede generar Código que se ejecuta en caso que SI
un error cuando se intenta ejecutar. Los haya error
errores detectados durante la ejecución
se llaman excepciones, y no son else:
incondicionalmente fatales. (Bloque Opcional)
Código que se ejecuta en caso que NO
Cuando se avienta (throw) un haya error.
error, si el error no se “atrapa”,
finally:
entonces el programa se detiene. (Bloque Opcional)
Hay veces que se quiere evitar Código que siempre se ejecuta, haya o no
este comportamiento porque se haya error.
sabe cómo arreglar el error.
Para manejar el error se utilizan Errores propios
los keywords try / except Python permite declarar errores
específicos para cada programa.
try / except / else / finally Es buena práctica extender el tipo
de error del que se trate.
La cláusula else se ejecuta si no
Los errores se “avientan” con el
han ocurrido excepciones y antes
keyword raise
de la cláusula finally.
136
Exception Descripción
AssertionError Se genera cuando falla la declaración de aserción.
AttributeError Se genera en la asignación de atributo o falla la
referencia.
EOFError Se genera cuando la función input () alcanza la
condición de fin de archivo.
FloatingPointError Se genera cuando falla una operación de coma flotante.
GeneratorExit Se genera cuando se llama al método close () de un
generador.
ImportError Se genera cuando no se encuentra el módulo
importado.
IndexError Se aumenta cuando el índice de una secuencia está
fuera de rango.
KeyError Se genera cuando no se encuentra una clave en un
diccionario.
KeyboardInterrupt Se genera cuando el usuario presiona la tecla de
interrupción (Ctrl + c o eliminar).
MemoryError Se genera cuando una operación se queda sin memoria.
NameError Se genera cuando una variable no se encuentra en el
ámbito local o global.
NotImplementedError Criado por métodos abstractos.
OSError Se genera cuando una operación del sistema provoca
un error relacionado con el sistema.
OverflowError Se genera cuando el resultado de una operación
aritmética es demasiado grande para ser representado.
ReferenceError Se genera cuando se usa un proxy de referencia débil
para acceder a un referente recolectado de basura.
RuntimeError Se genera cuando un error no se incluye en ninguna
otra categoría.
StopIteration Lo genera la función next () para indicar que el iterador
no debe devolver más elementos.
SyntaxError Lo genera el analizador cuando se encuentra un error
de sintaxis.
IndentationError Se eleva cuando hay una sangría incorrecta.
TabError Se genera cuando la sangría consiste en tabulaciones y
espacios inconsistentes.
SystemError Se genera cuando el intérprete detecta un error interno.
SystemExit Generado por la función sys.exit ().
TypeError Se genera cuando se aplica una función u operación a
un objeto de tipo incorrecto.
UnboundLocalError Se genera cuando se hace una referencia a una variable
local en una función o método, pero no se ha vinculado
ningún valor a esa variable.
UnicodeError Se genera cuando se produce un error de codificación o
decodificación relacionado con Unicode.
UnicodeEncodeError Se genera cuando se produce un error relacionado con
Unicode durante la codificación.
UnicodeDecodeError Se genera cuando se produce un error relacionado con
Unicode durante la decodificación.
UnicodeTranslateError Se genera cuando se produce un error relacionado con
Unicode durante la traducción.
ValueError Se genera cuando una función obtiene un argumento de
tipo correcto pero valor incorrecto.
ZeroDivisionError Se genera cuando el segundo operando de una
operación de división o módulo es cero.
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Errores y excepciones
https://docs.python.org/es/3/tutorial/errors.html
Compound statements
https://docs.python.org/3.5/reference/compound_stmts.html#try
138
1.4.2 Errores personalizados
Ejemplo:
Programa para indicar la población de varios países, se genera un error el cual se
puede omitir encapsulando la llamada con un bloque try/ecxept . (errores.py)
from os import system
system("cls")
countries = {
'mexico': 122,
'colombia': 49,
'argentina': 43,
'chile': 18,
'peru': 31,
}
while True:
country = str.lower(input('Escriba el nombre de un país: '))
print(f'La población de {country.upper()} es: {countries[country]} millo
nes','\n')
countries = {
139
'mexico': 122,
'colombia': 49,
'argentina': 43,
'chile': 18,
'peru': 31,
}
while True:
country = str.lower(input('Escriba el nombre de un país: '))
try:
print(f'La población de {country.upper()} es: {countries[country]} m
illones','\n')
except KeyError:
print(f'No tenemos el dato de la población de {country.upper()}','\n
')
answer= str.lower(input('¿Desea agregarlo? SI(S), NO (N):'))
if answer == 's':
new_country = int(input(f'Escriba la población de {country}: '))
countries[country] = new_country
140
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Built-in Exceptions
https://docs.python.org/3/library/exceptions.html
Exception hierarchy
The class hierarchy for built-in exceptions is:
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
141
1.4.3 Manejo de archivos en Python
menu = """
[1]Común escritura
[2]With escritura
[3]Leer un archivo con for
[4]Readline() para leer
[5]Buscar una palabra
"""
def writeNumbers():
with open('numeros.txt', 'w') as f:
for i in range(10):
f.write(str(i))
with open('numeros.txt') as f:
print('Archivo creado numeros.txt ',f.readlines(),'\n')
142
def writeNormal():
try:
f = open('numerosNormal.txt', 'w')
for num in range(5):
f.write(str(num))
finally:
f.close()
with open('numerosNormal.txt') as f:
print('Archivo creado numerosNormal.txt ',f.readlines(),'\n')
def readFor():
with open('aleph.txt') as f:
for line in f:
print(line)
def readLines():
with open('aleph.txt') as f:
print(f.readlines(),'\n')
def beatrizCounter():
counter = 0
with open('aleph.txt') as f:
busca_p= str(input('Escriba la palabra a buscar: '))
print('')
for line in f:
counter += line.count(busca_p)
print(f'La palabra {busca_p} se encuentra {counter} veces
en el texto','\n')
if __name__ == '__main__':
play = True
while play:
print('MANEJO DE ARCHIVOS'.center(35,'='))
print(menu)
choose = str(input('Seleccione una opción:'))
system("cls")
if choose == '1':
writeNumbers()
elif choose == '2':
writeNormal()
elif choose == '3':
readFor()
elif choose == '4':
readLines()
elif choose == '5':
143
beatrizCounter()
else:
print('La Opción no está disponible')
ans = input('Presione 6 para continuar o cualquier otra tecla para s
alir ')
system("cls")
if ans != "6":
play = False
=========MANEJO DE ARCHIVOS========
[1]Común escritura
[2]With escritura
[3]Leer un archivo con for
[4]Readline() para leer
[5]Buscar una palabra
=========MANEJO DE ARCHIVOS========
[1]Común escritura
[2]With escritura
[3]Leer un archivo con for
[4]Readline() para leer
[5]Buscar una palabra
144
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
145
1.4.4 Programación orientada a objetos en Python
Los objetos no necesariamente se derivar de una clase; pueden existir objetos sin que
hayan sido creados de una clase en particular. En Python casi todo es un objeto, puesto
que el concepto de la programación orientada a objetos consiste en resolver problemas
grandes subdividiendo los programas en otros más pequeños a cargo de objetos con
determinadas características y tareas encomendadas.
146
Teniendo como referencia ésta comparación se pueden planificar los programas;
pensando en clases que crearán objetos y estos objetos trabajaran y almacenarán datos
para cumplir la función o brindar la solución objetivo de los programas.
Los objetos almacenan información y realizan tareas. Los atributos pueden llamarse las
características que definen un objeto. Métodos las tareas que son capaces de realizar
147
o Escribir() , Caminar(), Hablar()
Nombre
Atributos
Edad
Clase: Escribir
Métodos
Humano
Ocupación
Caminar
Instancia
Genero
Hablar
Objetos
Persona1 Persona2
Métodos Métodos
Escribir Escribir
Nombre Nombre
“Nancy” “Pedro”
Caminar Caminar
Edad Edad
“27” Hablar “26” Hablar
Atributos
Atributos
Ocupación Ocupación
“Ingeniera” “Programador”
Genero Genero
“F” “M”
148
1.4.4.5 Sintaxis de clases en Python
# Creación de METODO
149
def escribir(self):
escribir = ("Hola soy {}, tengo {} años, mi género es {} y mi ocupac
ión es {} ")
# Mensaje
print(escribir.format(self.nombre,self.edad,self.genero,self.ocupaci
on),'\n')
Persona1 = Humano('Nancy',27,'Ingeniera','F')
Persona2 = Humano('Pedro',26,'Programador','M')
Persona3 = Humano('Juan',20,'Desocupado','M')
#Llamar al método
Persona1.escribir()
Persona2.escribir()
Persona3.escribir()
Juan está Desocupado pero se va a contratar, este nuevo estado se podrá reflejar
modificando el atributo ocupación con un nuevo método, contratar.
(clase_humano_nmetodo.py)
150
# Creación de METODO
def escribir(self):
escribir = ("Hola soy {}, tengo {} años, mi género es {} y mi ocupac
ión es {} ")
# Mensaje
print(escribir.format(self.nombre,self.edad,self.genero,self.ocupaci
on),'\n')
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Clases
https://docs.python.org/es/3/tutorial/classes.html
151
https://blog.nearsoftjobs.com/tipos-de-m%C3%A9todos-en-python-cls-vs-self-
d6da1e08efa8
Guía de estilos para el código de Python, Publicado por Luis Navarro en 30 enero, 2019
https://elsolitario.org/post/guia-de-estilos-para-el-codigo-de-python/
Videos
Qué es la programación Orientada a Objetos: Curso de programación
https://youtu.be/Mi_sRAfs7TE
Cursos en Platzi
Curso de Programación Orientada a Objetos: POO
https://platzi.com/clases/oop/
152
1.4.5 Modular un objeto en Python
Ejemplo:
Modelar un objeto como una lámpara como clase en Python la cual tenga los
atributos de poder estar prendida y apagada, para lo cual se necesitan los
métodos que le permitan estar encendida y apagada. (lamp.py)
153
Atributos
Is_turned_on, True Clase: Turn OFF
Métodos
or False Lámpara
(Lamp)
Turn ON
Instancia
Display image
Objetos
Lámpara1 Lámpara2
Métodos Métodos
Turn ON Turn ON
Atributos
class Lamp:
_LAMPS = ['''
.
. | ,
\ ' /
` ,-. '
--- ( ) ---
\ /
_|=|_
|_____|
154
''',
'''
,-.
( )
\ /
_|=|_
|_____|
'''] #Variable de clase
def run():
lampara1 = Lamp(_is_turned_on=False) #Crear una instancia
lampara2 = Lamp(_is_turned_on=True) #Crear una instancia
lamp_selec= str(input('''
Indique cual lámpara va a utilizar
Lámpara [1]
Lámpara [2]
'''))
while True:
command = str.lower(input('''
¿Qué deseas hacer?
[p]render
[a]pagar
[s]alir
'''))
system("cls")
if command == 'p':
155
lampara1.turn_on() #Llamar el método turn_on
else:
break
if __name__ == "__main__":
run()
Lámpara [1]
Lámpara [2]
1
[p]render
[a]pagar
[s]alir
p
.
. | ,
\ ' /
` ,-. '
--- ( ) ---
\ /
_|=|_
|_____|
[p]render
[a]pagar
[s]alir
a
156
,-.
( )
\ /
_|=|_
|_____|
[p]render
[a]pagar
[s]alir
s
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Videos
Python OOP Tutorial 1: Classes and Instances
https://youtu.be/ZDa-Z5JzLYM
Cursos en Platzi
Curso de POO y Algoritmos con Python
https://platzi.com/clases/poo-python/
Libros
David Aroesti, Curso de Python
157
1.4.6 Decoradores en Python
Un decorador es una función que recibe como parámetro a otra función y modifica su
comportamiento y retorna otra función.
Estructura de un decorador
3 funciones (A, B y C) donde A recibe como parámetro a B para retornar C.
Un decorador devuelve una función.
Ejemplos:
Generar una función que esté protegida por una contraseña. (decorador.py)
from os import system
system("cls")
if __name__ == '__main__':
password = str(input("Escriba la contraseña: "))
protected_func(password) #Ejectuto mi función decorada
158
Utilizar parámetros en la función y palabras claves dentro de los valores que se
entregan a la función a decorar. (ejemplo_decoradora.py)
def funcion_decoradora(funcion_parametro):
funcion_parametro(*args,**kwargs)
@funcion_decoradora
def suma(num1,num2): #la suma tiene la funcion decoradora
print(num1+num2)
@funcion_decoradora
def potencia(base,exponente):
print(pow(base,exponente))
if __name__ == '__main__':
num1= int(input('Ingrese un número '))
num2= int(input('Ingrese otro número '))
print('')
suma(num1,num2)
potencia(base=4,exponente=2)
resta(num1,num2)
159
Ingrese un número 200
Ingrese otro número 50
Ayudas en la red
Páginas web
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Videos
Curso Python. Decoradores I. Vídeo 73
https://youtu.be/DQXm6bIZgvk
160
1.4.7 Paquetes y módulos
Un módulo permite agrupar un archivo de inicio llamado __init__.py.
funcionalidad común en un sólo archivo. Este archivo, no necesita contener
ninguna instrucción. De hecho, puede
Cuando varios módulos agrupan estar completamente vacío.
funcionalidades comunes, se
pueden agrupar en paquetes. Los módulos también son objetos; de
tipo module en concreto. Por supuesto
Python reconoce que un
esto significa que pueden tener atributos
directorio es un paquete porque y métodos. Uno de sus atributos, name,
contiene un archivo llamado se utiliza a menudo para incluir código
__init__.py ejecutable en un módulo pero éste se
ejecute si el módulo se ejecuta como
En Python, cada uno de los archivos .py programa, y no al importarlo. Para lograr
se denominan módulos. Estos módulos, a esto basta saber que cuando se ejecuta
la vez, pueden formar parte de paquetes. el módulo directamente name tiene
Un paquete, es una carpeta que contiene como valor “main”, mientras que cuando
archivos .py. se importa, el valor de name es el
Pero, para que una carpeta pueda ser nombre del módulo.
considerada un paquete, debe contener
If __name__ = ‘__main__’
Ejemplos:
En el código siguiente se muestra el comportamiento de los módulos y paquetes
(my_modulo.py).
from os import system
system("cls")
def mi_funcion():
print("Una función",'\n')
def otra_funcion():
print("Otra función",'\n')
161
def modulo():
print ("Nombre del modulo: ", __name__,'\n')
class MiClase:
def __init__(self):
print("Una clase",'\n')
if __name__== "__main__":
print("- Se muestra cuando se ejecuta directamente el módulo o archivo")
print("- Se utiliza para incluir código ejecutable en un módulo")
print("- No se ejecuta desde otro módulo a través de import",'\n')
otra_funcion()
Otra función
Ejecutar el siguiente código que debe estar en la misma carpeta del programa
(my_modulo.py).
(programa.py)
import my_modulo
my_modulo.modulo()
clase = my_modulo.MiClase()
Una clase
162
Modelar un objeto como una lámpara como clase en Python la cual tenga los
atributos de poder estar prendida y apagada, para lo cual se necesitan los
métodos que le permitan estar encendida y apagada. Utilizar los conceptos de
módulos y paquetes para ejecutar el programa. (lamp_modulo.py)
class Lamp:
_LAMPS = ['''
.
. | ,
\ ' /
` ,-. '
--- ( ) ---
\ /
_|=|_
|_____|
''',
'''
,-.
( )
\ /
_|=|_
|_____|
'''] #Variable de clase
163
Programa que ejecuta la clase Lamp (lamp_main.py).
from lamp_modulo import Lamp
from os import system
system("cls")
def run():
lampara1 = Lamp(_is_turned_on=False) #Crear una instancia
lampara2 = Lamp(_is_turned_on=True) #Crear una instancia
lamp_selec= str(input('''
Indique cual lámpara va a utilizar
Lámpara [1]
Lámpara [2]
'''))
while True:
command = str.lower(input('''
¿Qué deseas hacer?
[p]render
[a]pagar
[s]alir
'''))
system("cls")
if command == 'p':
lampara1.turn_on() #Llamar el método turn_on
else:
break
if __name__ == "__main__":
run()
164
Indique cual lámpara va a utilizar
Lámpara [1]
Lámpara [2]
1
[p]render
[a]pagar
[s]alir
P
.
. | ,
\ ' /
` ,-. '
--- ( ) ---
\ /
_|=|_
|_____|
[p]render
[a]pagar
[s]alir
a
,-.
( )
\ /
_|=|_
|_____|
[p]render
[a]pagar
[s]alir
s
Ayudas en la red
Páginas web
What does if __name__ == “__main__”: do?
https://stackoverflow.com/questions/419163/what-does-if-name-main-do
165
Creando módulos empaquetados
https://uniwebsidad.com/libros/python/capitulo-3/creando-modulos-empaquetados
Videos
Concept behind : if __name__ == "__main__"
https://youtu.be/JtKOP-ThcbU
166
1.4.8 Entorno virtual en Python
En Python la comunidad comparte su código usando PyPi (python package index), es un
repositorio para instalar módulos de la comunidad.
Se utiliza el archivo requirements.txt para ordenar los paquetes que requieren los
proyectos proyecto.
Ambiente virtual
Ambientes virtuales
Es una buena práctica crear un ambiente virtual por cada proyecto de Python en el
que se trabaje.
Realiza las instrucciones previas de configuración de según su SO (WINDOWS)
Crear el entorno en una carpeta con el comando python -m venv proyect_ven
Active el entorno virtual actívate.bat
Instale el paquete flask con pip install flask
Crear el código para generar un servidor web
venv es una herramienta que crea entornos de Python aislados. Estos entornos
aislados pueden tener versiones separadas de paquetes de Python, lo que le permite
aislar las dependencias de un proyecto de las dependencias de otros. Recomendamos
que siempre use un entorno virtual por proyecto cuando desarrolles de forma local
con Python.
Permite encapsular un proyecto para poder instalar las versiones de los paquetes que se
requieran sin tenerlos que instalar en todo el sistema operativo.
Instrucciones previas
Para adecuar el entorno virtual en la computadora con Windows y con Python 3X realizar
los siguientes pasos:
167
PS C:\ai_curso> cd servidor
Directorio: C:\ai_curso\servidor\proyect_ven\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23/09/2020 11:50 p. m. 2306 activate
-a---- 23/09/2020 11:50 p. m. 976 activate.bat
-a---- 23/09/2020 11:50 p. m. 18456 Activate.ps1
-a---- 23/09/2020 11:50 p. m. 368 deactivate.bat
-a---- 23/09/2020 11:50 p. m. 106371 easy_install-3.8.exe
-a---- 23/09/2020 11:50 p. m. 106371 easy_install.exe
-a---- 23/09/2020 11:50 p. m. 106362 pip.exe
-a---- 23/09/2020 11:50 p. m. 106362 pip3.8.exe
-a---- 23/09/2020 11:50 p. m. 106362 pip3.exe
-a---- 23/09/2020 11:50 p. m. 532040 python.exe
-a---- 23/09/2020 11:50 p. m. 531016 pythonw.exe
168
activate.bat, deactivate.bat; anteponer el comando .\ pej > .\activate.bat. (Por
primera vez)
12. Verificar los paquetes que están instalados PyPi en el entorno virtual
PS C:\ai_curso\servidor\proyect_ven\Scripts>pip list
Package Version
---------- -------
pip 20.1.1
setuptools 47.1.0
WARNING: You are using pip version 20.1.1; however, version 20.2.3 is
available.
You should consider upgrading via the
'c:\ai_curso\servidor\proyect_ven\scripts\ python.exe -m pip install --
upgrade pip' command.
14. Copiar del path en donde está instalado Python la carpeta site-packages
PS C:\ai_curso\servidor\proyect_ven\Lib>Set-Location -
Path C:\python\python38\Lib
PS C:\python\python38\Lib>dir site-*
Directorio: C:\python\python38\Lib
Mode LastWriteTime Length Name
169
---- ------------- ------ ----
d----- 24/09/2020 12:00 a. m. site-packages
PS C:\ai_curso\servidor\proyect_ven\lib\site-packages> dir
Directorio: C:\ai_curso\servidor\proyect_ven\lib\site-packages
15. Verificar los paquetes que están instalados PyPi, el mensaje de WARNING no se
genera
PS C:\ai_curso\servidor\proyect_ven\Scripts>pip list
Package Version
---------- -------
pip 20.2.3
setuptools 47.1.0
170
Instalar dependencias del archivo requirements.txt en el interno virtual
creado
PS C:\ai_curso\servidor>project_ven\Scripts\pip install flask
PS C:\ai_curso\servidor>project_ven\Scripts\dir
Directorio: C:\ai_curso\servidor\proyect_ven\Scripts
Ejemplos:
En la carpeta C:\ai_curso\servidor\proyect_ven> virtual_ejemplo.py
Código de prueba virtual_ejemplo.py
from flask import Flask
add = Flask(__name__)
if __name__ == "__main__":
add.run()
171
Ya está funcionando flask en el entorno virtual. Para deshabilitar el entorno virtual Press
CTRL+C to quit , No se puede acceder a este sitio web
Directorio: C:\ai_curso\servidor\proyect_ven
172
-a---- 23/09/2020 11:50 p. m. 82 pyvenv.cfg
-a---- 25/09/2020 4:40 p. m. 204 requirements.txt
-a---- 25/09/2020 4:08 p. m. 101 virtual_ejemplo.py
Para instalar los paquetes que está utilizando el código utilizar el comando
PS C:\ai_curso\servidor\proyect_ven\Lib\site-packages> pip install -r
requirements.txt
app = Flask(__name__)
@app.route('/')
def index():
return 'Este código comprueba que el entorno virtual está operando'
if __name__ == "__main__":
app.run()
173
Ayudas en la red
Páginas web
Entornos virtuales de Python en Windows.
https://platzi.com/tutoriales/1104-python/5883-entornos-virtuales-de-python-en-
windows/
Videos
INSTALACION DE PYTHON, PIP, VIRTUALENV Y FLASK EN WINDOWS | MUY FACIL 2019
https://youtu.be/zH28dM-pjlw
174
How To Install PIP for Python 2020 Windows 10
https://youtu.be/uS57HP09odc
Linux & Windows en un mismo Sistema, Windows Subsystem for Linux (WSL), Ubuntu &
bash
https://youtu.be/gm-Kym2iqss
Python Tutorial: VENV (Windows) - How to Use Virtual Environments with the Built-In
venv Module
https://youtu.be/APOPm01BVrk
175
1.5 Proyecto: Web Scraping
Probablemente no sea la primera vez que para ponerlo a punto que no requieren
escuche el término web scraping. Y si no, conocimientos de programación. Eso sí,
seguro que lo ha encontrado en alguna estas herramientas nunca le van a dar
de sus otras formas, como data scraping, toda la flexibilidad que tendría si los
rastreo, scraping de datos, extracción de desarrollara en un lenguaje de
datos o, haciendo referencia a programación.
aplicaciones más concretas, como price
mapping. Quizá le hayan venido a la mente los
típicos captchas o el típico “No soy un
El web scraping consiste en navegar robot” que se encuentran normalmente
automáticamente una web y extraer de al rellenar un formulario online. ¡Exacto!
ella información. Esto puede ser muy útil Es de los crawlers de lo que se protegen.
para muchísimas cosas y beneficioso Porque además de recopilar información,
para casi cualquier negocio. A día de hoy, también se pueden utilizar para rellenar
no existe una sola empresa de éxito que formularios, crear cuentas falsas o
no lo haga —o que no quiera hacerlo—. realizar cualquier acción en la red de
De hecho, la empresa reina del scrapeo forma automática.
es Google, que para que su buscador
funcione así de bien tiene que estar Usos
constantemente scrapeando la red Indexar la web (GOOGLE la utiliza)
entera. Obtener la reputación de la
empresa.
Al software programado para scrapear se
le suele llamar bot, spider o crawler. Obtener precios que cambian.
Todo el mundo puede programar un Bajar imágenes, información.
crawler, ya que existen herramientas
176
Buscar precios históricos de la tanto la tecnología que utilicemos y, por
bolsa de valores. tanto, elegir lo más sencillo sería lo más
Saber qué hay en la red con los acertado. En este caso BeautifulSoup o
Selenium serían buenas opciones.
datos personales, Etc.
Términos éticos y legales
Cómo hacer web scraping
No es tan sencillo decir si scrapear es
Los recursos más utilizados para legal o no. Depende mucho de cada caso
extracción de datos en la web. y, aun así, la mayoría de las veces no
estará muy claro. Por eso, aunque sea
Prográmalo tú mismo poco probable, siempre antes de
scrapear se tiene que asumir el riesgo de
El lenguaje de programación más que la empresa scrapeada pueda poner
utilizado para scrapear es, con diferencia, una denuncia. Aunque lo más probable
Python, ya que tiene varias librerías es que, en el caso de realizar alguna
bastante competentes para scrapear: acción de respuesta, sea bloquear al bot
Scrapy, BeautifulSoup y Selenium. o dar alguna especie de aviso.
177
si se estás lucrando a costa de su
contenido, ya que puede ser denunciado En conclusión, con el fin de evitar sustos,
por la vulneración de los derechos de es recomendable contactar con la
propiedad intelectual. Sobre todo si el empresa para contarles en qué consiste
contenido que se quiere extraer está el proyecto o, incluso, llegar a algún
detrás del login de usuario, ya que, en acuerdo con ellos. Además, siempre es
este caso, seguro que no estamos buena idea dejarse aconsejar por un
hablando de información de dominio abogado experto [1].
público.
Ayudas en la red
Cursos en Platzi
Curso de Web Scraping: Extracción de Datos en la Web
https://platzi.com/clases/webscraping/
178
1.5.2 Implementación web scraping con Python
Web scraping
requirements.txt
beautifulsoup4==4.9.2
bs4==0.0.1
requests==2.24.0
Ejemplo
Descargar de la página web https://xkcd.com cinco imágenes las cuales se van a
copiar en un subdirectorio especifico, utilice la librería os, el código es el siguiente:
179
web_scraping.py
from os import system
system("cls")
import urllib.request
import requests
from bs4 import BeautifulSoup
import urllib
import os
def run():
for i in range(1,6):
print(f"Imagen {i}")
response = requests.get('https://xkcd.com/{}'.format(i))
soup = BeautifulSoup(response.content,'html.parser')
image_container = soup.find(id="comic")
image_url = image_container.find('img')['src']
image_name = image_url.split('/')[-1]
print("Descargando la imagen {}".format(image_name))
carpeta ='C:/ai_curso/servidor/web_scraping/imag'
ruta_destino = os.path.join(carpeta, image_name)
#print(ruta_destino)
urllib.request.urlretrieve('https:{}'.format(image_url),ruta_destino
)
if __name__ == '__main__':
run()
180
Las imágenes descargadas se
ubican en el directorio de trabajo
C:/ai_curso/servidor/web_scraping/imag son:
import requests
from bs4 import BeautifulSoup
import urllib.request
courses = []
prox_courses = []
def nuevos_courses(courses_container):
181
contador = 1
# Extendiendo cada contenedor y encontrando títulos "h3".
for course in courses_container:
courses.extend(course.find_all('h3'))
def proximos_courses(proximos_cursos):
contador = 1
# Extendiendo cada contenedor y encontrando títulos "h4".
for curso in proximos_cursos:
prox_courses.extend(curso.find_all('h4'))
print('')
print("Los próximos cursos en Platzi serán: ",'\n')
for curso in prox_courses:
print(contador, '.', curso.text)
contador += 1
def run():
response = requests.get("https://platzi.com/")
soup = BeautifulSoup(response.content, "html.parser")
courses_container = soup.find_all(lambda tag: tag.name == 'div' and tag.
get('class') == ['RecentCourses'])
proximos_cursos = soup.find_all(lambda tag: tag.name == 'div' and tag.ge
t('class') == ['NextReleases'])
nuevos_courses(courses_container)
proximos_courses(proximos_cursos)
if __name__ == "__main__":
run()
182
Los nuevos cursos lanzados en Platzi son:
Ayudas en la red
Páginas web
Beautiful Soup Documentation
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
183
https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/
Videos
Install python PIP, Requests and Beautiful soup for WINDOWS (in 5 minutes)
https://youtu.be/cGW70Hc0W4M
Cursos en Platzi
184
1.6 Proyecto: Aplicación de Terminal
def saludo():
print(''.center(40,'='))
print('Bienvenido a la agenda de contactos'.center(40,' '))
print(''.center(40,'='))
class Contacto:
class Agenda:
def __init__(self):
self._contactos = []
185
#while True:
upd_command = str(input(f'''
Acualizar el contacto {name}
[1] Nombre
[2] Teléfono
[3] E-mail
[4] Nombre y Teléfono
[5] Nombre e E-mail
[6] E-mail y Teléfono
[0] Volver al menú principal
'''))
if upd_command.lower() == '1':
self._contactos[idx].name = str(input('Escriba el nuevo
nombre del contacto:'))
system("cls")
break
186
self._contactos[idx].email = str(input(f'Escriba el nuev
o E-mail de {name}: '))
break
else:
print('Comando no encontrado.')
else:
self._not_found(name)
def show_all(self):
for contact in self._contactos:
self._print_contact(contact)
while True:
187
saludo()
command = str(input('''
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
if command.lower() == '1':
name = str(input('Escribe el nombre del contacto: '))
phone = str(input(f'Escribe el número telefónico de {name}: '))
email = str(input(f'Escribe el E-mail de {name}: '))
contact_book.delete(name)
contact_book.show_all()
if __name__ == '__main__':
run()
188
Resultado después de ejecutar el código
========================================
Bienvenido a la agenda de contactos
========================================
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
189
Escribe el nombre del contacto a actualizar: Diego Cabrera
[1] Nombre
[2] Teléfono
[3] E-mail
[4] Nombre y Teléfono
[5] Nombre e E-mail
[6] E-mail y Teléfono
[0] Volver al menú principal
4
Escriba el nuevo nombre del contacto:Diego Cabrera Meza
Escriba el nuevo número telefónico de Diego Cabrera Meza: 571-2560777
========================================
Bienvenido a la agenda de contactos
========================================
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
190
1.6.3 Persistencia de datos
Para complementar la información de este apartado ver la sección 1.4.3 Manejo de
archivos en Python.
Para evitar que se borren los datos de la agenda del ejercicio de la sección anterior se
agrega al código secciones que permiten guardar datos en el disco duro utilizando el
archivo contactos.csv.
Para guardar los registros se genera la función siguiente _save(selft), la cual se agrega
adecuadamente en el código para que sea útil. El módulo csv se importa
import csv
def _save(self):
with open('contactos.csv','w', newline='') as f:
writer = csv.writer(f)
writer.writerow(('name','phone','email'))
with open('contactos.csv','r') as f:
reader= csv.reader(f)
for idx, row in enumerate(reader):
if idx == 0:
continue
contact_book.add(row[0],row[1],row[2])
def saludo():
print(''.center(40,'='))
print('Bienvenido a la agenda de contactos'.center(40,' '))
print(''.center(40,'='))
class Contacto:
191
self.name = name
self.phone = phone
self.email = email
class Agenda:
def __init__(self):
self._contactos = []
[1] Nombre
[2] Teléfono
[3] E-mail
[4] Nombre y Teléfono
[5] Nombre e E-mail
[6] E-mail y Teléfono
[0] Volver al menú principal
'''))
if upd_command.lower() == '1':
self._contactos[idx].name = str(input('Escriba el nuevo
nombre del contacto:'))
system("cls")
break
192
elif upd_command.lower() == '4':
self._contactos[idx].name = str(input('Escriba el nuevo
nombre del contacto:'))
self._contactos[idx].phone = str(input(f'Escriba el nuev
o número telefónico de {self._contactos[idx].name}: '))
break
else:
print('Comando no encontrado.')
else:
self._not_found(name)
self._save()
def show_all(self):
for contact in self._contactos:
self._print_contact(contact)
193
self._print_contact(contact)
break
else:
self._not_found(name)
def _save(self):
with open('contactos.csv','w', newline='') as f:
writer = csv.writer(f)
writer.writerow(('name','phone','email'))
def run():
contact_book = Agenda()
with open('contactos.csv','r') as f:
reader= csv.reader(f)
for idx, row in enumerate(reader):
if idx == 0:
continue
contact_book.add(row[0],row[1],row[2])
while True:
saludo()
command = str(input('''
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
194
Indique una Opción
'''))
system('cls')
if command.lower() == '1':
name = str(input('Escribe el nombre del contacto: '))
phone = str(input(f'Escribe el número telefónico de {name}: '))
email = str(input(f'Escribe el E-mail de {name}: '))
contact_book.delete(name)
contact_book.show_all()
if __name__ == '__main__':
run()
195
Resultado después de ejecutar el código
========================================
Bienvenido a la agenda de contactos
========================================
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
========================================
Bienvenido a la agenda de contactos
========================================
[1]Añadir un contacto
[2]Actualizar un contacto
[3]Buscar un contacto
[4]Eliminar un contacto
[5]Listar todos los contactos
[0]Salir
PS C:\ai_curso\python>
196
Ayudas en la red
Páginas web
Cómo Leer y Escribir Archivos CSV en Python
https://code.tutsplus.com/es/tutorials/how-to-read-and-write-csv-files-in-python--cms-
29907
Videos
Curso de Python - Lectura de archivos CSV
https://www.youtube.com/watch?v=wmNsecoZ_Go
197
1.7 Proyecto: Aplicación web
19. Para ejecutar la aplicación en google could prepare los siguientes archivos en el
directorio del entorno virtual, appengine_contact_server
20. En la sección de este documento 1.4.8 Entorno virtual en Python se dan las
indicaciones para crear un entorno virtual. Crear el entorno
appengine_contact_server.
PS C:\ai_curso\servidor\appengine_contact_server>.\scripts\activate.bat
198
21. App Engine no corre el comando pip por esto es necesario subir las librerías del
proyecto, para esto crear una carpeta Lib y el archivo appengine-config.py.
appengine-config.py.
from google.appengine.ext import vendor
vendor.add('Lib')
22. Instalar las dependencias usar el comando pip install -r requirements.txt -t Lib
requirements.txt
Flask==1.1.2
PS C:\ai_curso\servidor\appengine_contact_server\Lib> dir
Directorio: C:\ai_curso\servidor\appengine_contact_server\Lib
199
d----- 29/09/2020 8:03 p. m. site-packages
d----- 29/09/2020 8:10 p. m. werkzeug
d----- 29/09/2020 8:10 p. m. Werkzeug-1.0.1.dist-info
main.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Configurando el entorno de desarrollo de Google Cloud'
if __name__ == "__main__":
app.run()
24. Indicar el ambiente que se va a utilizar y hacia donde se va enviar el tráfico para
este caso es main.py . Configurar app.yaml.
App.yaml
service: default
runtime: python38 # or python37 for Python 3.7
api_version: 1
threadsafe: yes
handlers:
- url:.*
script: main.app
secure: always
200
Opcional:
Se puede ensayar corriendo el código en el servidor local con: python main.py
Entrega una ruta del local host y el puerto.
201
29. Ejecutar gcloud app deploy --project [ID del proyecto].
Ayudas en la red
Páginas web
Crea tu proyecto de Google Cloud
https://cloud.google.com/appengine/docs/standard/python3/building-app/creating-gcp-
project?hl=es-419
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Las diferencias claves entre Python 2.7.xy Python 3.x con ejemplos
202
https://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html
Videos
Qué es deploy y cómo hacerlo sin provocar incendios
https://youtu.be/UuF_T1WqlrY
Cursos en Platzi
Curso de Google App Engine
https://platzi.com/clases/app-engine/
Libros
5 libros para aprender más sobre Python
https://platzi.com/tutoriales/1104-python/1598-5-libros-para-aprender-mas-sobre-
python/
203
1.7.2 Crear templetes con Jinja2
Archivo: main.py
# -*- coding: utf-8 -*-
@app.route(r'/', methods=['GET'])
def contact_book():
contacts = Contact.query().fetch()
return render_template('contact_book.html', contacts=contacts)
204
if request.form:
contact = Contact(name=request.form.get('name'),
phone=request.form.get('phone'),
email=request.form.get('email'))
contact.put()
flash('¡Se añadió el contacto!')
return render_template('add_contact.html')
@app.route(r'/contacts/<uid>', methods=['GET'])
def contact_details(uid):
contact = Contact.get_by_id(int(uid))
if not contact:
return redirect('/', code=301)
@app.route(r'/delete', methods=['POST'])
def delete_contact():
contact = Contact.get_by_id(int(request.form.get('uid')))
contact.key.delete()
return redirect('/contacts/{}'.format(contact.key.id()))
if __name__ == '__main__':
app.run()
Archivo: app.yaml
service: default
runtime: python37
api_version: 1
threadsafe: yes
handlers:
- url: .*
script: main.app
secure: always
205
Archivo: appengine_config.py
from google.appengine.ext import vendor
vendor.add('lib')
Paso 02: Dentro de la carpeta del proyecto crear los archivos templetes
Archivo: Index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Agenda de contactos</title>
</head>
<body>
<h1>Agenda de contactos</h1>
{% block body %}{% endblock %}
</body>
</html>
Archivo: contact_book.html
{% extends 'index.html' %}
{% block body %}
<ul>
Archivo: add_contact.html
{% extends 'index.html' %}
{% block body %}
206
{% endfor %}
{% endif %}
{% endwith %}
<label for="name">Nombre</label>
<input id="name" name="name" type="text">
<label for="phone">Teléfono</label>
<input id="phone" name="phone" type="text">
<label for="email">Email</label>
<input id="email" name="email" type="email">
<p>
<a href="/">Regresar</a>
</p>
{% endblock %}
Archivo: contact.html
{% extends 'index.html' %}
{% block body %}
<h2>{{ contact.name }}</h2>
<p>Teléfono: {{ contact.phone }}</p>
<p>Email: {{ contact.email }}</p>
<hr>
<form action="/delete" method="post">
<input type="hidden" name="uid" value="{{ contact.key.id() }}">
<button type="submit">Eliminar</button>
</form>
<p>
<a href="/">Regresar</a>
</p>
{% endblock %}
207
Archivo: contact_model.py
from google.appengine.ext import ndb
class Contact(ndb.Model):
name = ndb.StringProperty()
phone = ndb.StringProperty()
email = ndb.StringProperty()
El SDK de Cloud requiere Python. Las versiones compatibles son las de 3.5 a 3.7, y 2.7.9 o
posteriores.
Paso 04: Ejecutar el siguiente comando para instalar el componente de gcloud que incluye
la extensión de App Engine extension para Python 3.7:
Paso 05: Crear el entorno virtual con Python ver 1.4.8 Entorno virtual en Python el
entorno se crea con Python 3.7.7
PS C:\ai_curso\servidor> python -m venv proyecto_cloud
Paso 10: Verificar si los paquetes están instalados en el entorno virtual adecuadamente, si
al verificar no están los paquetes necesarios borrar el entorno y empezar
nuevamente desde el Paso 1:
208
PS C:\ai_curso\servidor\proyecto_cloud> .\scripts\pip list
Package Version
------------------------ ---------
aiohttp 3.6.2
async-timeout 3.0.1
attrs 20.2.0
cachetools 4.1.1
certifi 2020.6.20
chardet 3.0.4
click 7.1.2
Flask 1.1.2
google-api-core 1.22.2
google-auth 1.22.0
google-cloud-core 1.4.1
google-cloud-datastore 1.15.1
google-cloud-ndb 1.6.0
googleapis-common-protos 1.52.0
grpcio 1.32.0
idna 2.10
itsdangerous 1.1.0
Jinja2 2.11.2
MarkupSafe 1.1.1
multidict 4.7.6
pip 19.2.3
protobuf 3.13.0
pyasn1 0.4.8
pyasn1-modules 0.2.8
pymemcache 3.4.0
pytz 2020.1
redis 3.5.3
requests 2.24.0
rsa 4.6
setuptools 41.2.0
six 1.15.0
typing-extensions 3.7.4.3
urllib3 1.25.10
Werkzeug 1.0.1
yarl 1.6.0
Paso 11: Instalar en la carpeta Lib del entorno las librerías Flask y NDB . Crear archivo
contact_model.pyc
Archivo: requirements.txt
Flask==1.1.2
google-cloud-ndb==1.6.0
209
PS C:\ai_curso\servidor\proyecto_cloud> .\scripts\pip install -
r requirements.txt -t lib
Paso 12: Crear una cuenta de servicio. Reemplaza [NAME] por el nombre de la cuenta
Paso 13: Otorgar permisos a la cuenta de servicio. Remplazar [PROJET_ID] por el ID del
proyecto.
Paso 14: Genera el archivo de claves. Reemplaza [FILE_NAME] por un nombre para el
archivo de claves.
210
Paso 15: Crea una variable de entorno llamada GOOGLE_APPLICATION_CREDENTIALS con
la ruta del archivo de claves creado en el paso anterior.
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
Paso 16: Ingrese a Google Cloud Platform y asegúrese de que tanto la “API de Cloud
Datastore” como la “API de Google Cloud Firestore” estén habilitadas. El link
para acceder es el siguiente.
https://console.cloud.google.com/apis/library?filter=category:database&project=[PROJEC
T_ID]
Paso 18: En caso que se requiera cambiar el project id se debe ejecutar la siguiente
instrucción:
211
Paso 19: Ejecutar uno de los siguientes comandos para subir el código a App Engine:
descriptor: [C:\ai_curso\servidor\proyecto_cloud\app.yaml]
source: [C:\ai_curso\servidor\proyecto_cloud]
target project: [platzi-12345]
target service: [default]
target version: [20201002t150531]
target url: [https://platzi-68490.uc.r.appspot.com]
212
Paso 20: Ejecutar app
Ayudas en la red
Páginas web
213
1.8 Practicas comunes
Áreas en las que puedes desempeñar con end común. Esto incluye correlacionar
Python diferentes URLs con fragmentos de
214
Deberías elegir:
Puedes aplicar la misma idea a sistemas
Flask, si estás enfocado en la experiencia de recomendación (piensa en YouTube,
y las oportunidades de aprendizaje, o si Amazon y Netflix), Reconocimiento facial
quieres tener más control sobre qué o reconocimiento de voz entre otras
componentes usar (como qué bases de aplicaciones.
datos quieres usar y cómo quieres
interactuar con ellas). Los algoritmos populares de aprendizaje
automático de los que quizás hayas oído
Django, si te centras en el producto final. hablar incluyen redes neuronales,
Especialmente si estás trabajando en una aprendizaje profundo, máquinas de
aplicación sencilla, como un sitio de vectores de soporte, bosque aleatorio…
noticias, una tienda electrónica o un se puede usar cualquiera de estos
blog, y deseas que siempre haya una algoritmos para resolver el problema de
manera única y obvia de hacer las cosas. etiquetado de imágenes del perro y la
mesa.
En otras palabras, si eres un principiante,
Flask es probablemente una mejor Python para aprendizaje automático
opción porque tiene menos
componentes con los que lidiar. Además,
Flask es una mejor opción si quieres más
personalización. Por último, Flask es más
adecuado para crear estas cosas
denominadas API REST que Django
debido a su flexibilidad.
215
Análisis / visualización de datos con Otras aplicaciones de Python
Python Aplicaciones integradas: Python funciona
con Rasberry Pi. Es una aplicación
Una de las bibliotecas más populares popular entre los aficionados al
para la visualización de datos es hardware.
Matplotlib. Es una buena biblioteca para
comenzar porque: Es fácil comenzar con Gaming y desarrollo de juegos: se puede
ella, y algunas otras bibliotecas, como usar una biblioteca llamada PyGame para
seaborn, se basan en ella. Por ello, desarrollar juegos, pero no es el motor
aprender Matplotlib te ayudará a de juegos más popular que existe.
aprender estas otras bibliotecas más Podrías usarlo para construir un proyecto
adelante. como pasatiempo, pero no es
recomendable si te tomas en serio el
Scripting con Python. ¿Qué es el desarrollo del juego.
scripting?
Aplicaciones de escritorio: podrías crear
El scripting generalmente se refiere a una con Python usando Tkinter, pero
escribir pequeños programas que están tampoco es la opción más popular.
diseñados para automatizar tareas Tomado de: Blog de empleabilidad y
simples. Python es adecuado para este emprendimiento.
tipo de tareas, principalmente porque https://www.bejob.com/que-puedo-
tiene una sintaxis relativamente simple y programar-con-python-te-comentamos-
es fácil de escribir. También es rápido 3-principales-aplicaciones/
escribir algo pequeño con él y probarlo.
Ayudas en la red
Videos
Curso Python para Principiantes
https://www.youtube.com/watch?v=chPhlsHoEPo
Páginas web
Acercando las matemáticas a todo el mundo
https://matematicascercanas.com/2014/05/05/12345-100/
216
Python para principiantes
https://uniwebsidad.com/libros/python?from=librosweb
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Cursos en Platzi
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
https://platzi.com/clases/1764-python-cs/25577-preparacion-de-tu-computadora/
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
Curso de Fundamentos de Álgebra Lineal con Python:
https://platzi.com/clases/algebra-lineal/
Curso Básico de Python
https://platzi.com/clases/pythonbasico/
Libros
Gonzales Dique Raul, Pyton para todos, Este libro se distribuye bajo una licencia Creative
Commons Reconocimiento 2.5 España
217
1.8.2 Consejos para aprender a programar [ 1]
218
[1]Tomado en octubre de 2020 de Fundamentos de programación https://platzi.com/fundamentos-
programacion/
Ayudas en la red
Cursos en Platzi
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
Preparación de tu computadora
https://platzi.com/clases/1764-python-cs/25577-preparacion-de-tu-computadora/
Curso de Python
https://platzi.com/clases/python/
219
https://platzi.com/clases/diseno-programadores/
220
1.9 Retos / Desafíos
221
…la solución dada por Gauss.
Luego S será:
Este mismo problema, lo podemos plantear de forma genérica, es decir, la suma de los n
primeros números. Siguiendo un razonamiento análogo al del caso de los 100 primeros
números, tendríamos:
S = 1 + 2 + 3 + … + (n-2) + (n-1) + n
Así, por ejemplo, la suma de los 5000
S = n + (n-1) + (n-2) + … + 3 + 2 + 1 primeros números es:
222
x = list(range(num_a,(num_b + 1)))
total = 0
for i in range(len(x)):
total = total + x[i]
return total
else:
x = list(range((num_b),(num_a + 1)))
total = 0
for i in range(len(x)):
total = total + x[i]
return total
def run():
while True:
option = str(input('''
Indique la opción
[1]Suma recursiva
[0]Salir
'''))
if option == '1':
else:
print('La opción digitada es incorrecta')
if __name__== '__main__':
run()
223
Resultado después de ejecutar el código
=========================
CRIPTOGRAFIA BINARIA
=========================
=========================
CRIPTOGRAFIA BINARIA
=========================
Descifrado: Diego 1
=========================
CRIPTOGRAFIA BINARIA
=========================
Ayudas en la red
Videos
Curso Python para Principiantes
https://www.youtube.com/watch?v=chPhlsHoEPo
224
Midiendo el Mundo (2012) (Ver desde minuto 5.00)
https://youtu.be/NprKTmoNhIw
Páginas web
Acercando las matemáticas a todo el mundo
https://matematicascercanas.com/2014/05/05/12345-100/
Tutorial de Python
https://docs.python.org/es/3/tutorial/index.html
Cursos en Platzi
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
https://platzi.com/clases/1764-python-cs/25577-preparacion-de-tu-computadora/
Curso de Introducción al Pensamiento Computacional con Python
https://platzi.com/clases/python-cs/
Curso de Fundamentos de Álgebra Lineal con Python:
https://platzi.com/clases/algebra-lineal/
Curso Básico de Python
https://platzi.com/clases/pythonbasico/
Libros
Gonzales Dique Raul, Pyton para todos, Este libro se distribuye bajo una licencia Creative
Commons Reconocimiento 2.5 España
225
1.9.2 Desafío 2: Criptografía con binarios
226
n 01101110 quieres aprender tú mismo, o tener un
ñ 11110001 conversor que lo haga por ti. ¿Buscas un
o 01101111 conversor de binario a texto? Puedes
ó 11110011 usar el que hay aquí, o ser tu propio
p 01110000 traductor de binario a texto.
q 01110001
r 01110010 La conversión de binario a texto puede
s 01110011 parecer complicada:
t 01110100 01001000011011110110110001100001,
u 01110101 ¿cómo podemos leer esto sin un
ú 11111010 decodificador binario? Y, ¿por qué
ü 11111100 íbamos a querer traducir una ristra de
v 01110110 unos y ceros cuando hay calculadoras de
w 01110111 binario a texto disponibles? Hay varias
x 01111000 razones por las que podrías querer
y 01111001 aprender a traducir de binario a texto.
z 01111010 Pero saber cómo convertir binario a
texto puede ser una habilidad muy
Convertir de Binario a texto (ASCII) interesante que añadir a tu arsenal.
def cifrar(message):
cypher_words = []
for letter in message:
cypher_letter = format( ord(letter), 'b' )
if len(cypher_letter) == 6:
cypher_words.append('00'+ cypher_letter)
else:
cypher_words.append('0'+cypher_letter)
return ' '.join(cypher_words)
227
def des_cifrar(message):
words = message.split(' ')
decipher_message = []
for word in words:
word = str(word)
sumatory = 0
for value, letter in enumerate(word[::-1]):
if int(letter) == 1:
sumatory += byte[value]
decipher_letter = chr(sumatory)
decipher_message.append(decipher_letter)
return "".join(decipher_message)
def run():
while True:
print(''.center(25,'='))
print ('CRIPTOGRAFIA BINARIA'.center(25,' '))
print(''.center(25,'='))
command = str(input('''
(1) Cifrar mensaje
(2) Descifrar mensaje
(0) Salir
if __name__ == '__main__':
run()
228
Resultado después de ejecutar el código
=========================
CRIPTOGRAFIA BINARIA
=========================
=========================
CRIPTOGRAFIA BINARIA
=========================
=========================
CRIPTOGRAFIA BINARIA
=========================
229
Ayudas en la red
Páginas web
[1] Conversor de Código Binario a Texto
https://es.convertbinary.com/de-binario-a-texto/
Videos
How To Read Text In Binary
https://youtu.be/wCQSIub_g7M
230
1.9.3 Desafío 3: Modular un objeto
Para mayor claridad ver la sección 1.4.4
Tipo
Atributos
Color
Clase:
Brazo Rasgos
Métodos
Tamaño robótico
Ejes
Instancia
Grado libertad
Objetos
Métodos Métodos
Rasgos Rasgos
Tipo Caract Tipo
Caract
“SCARA” eristoc “CARTESIANO” eristoc
Ejes Ejes
as as
Color Edad
“negro” “rojo”
Atributos
Atributos
Marca Marca
“Festo” “Mitsubishi”
El código que permite crear la clase brazo robótico y determinar sus instancias y métodos
es (clase_brazo_robot.py).
231
from os import system
system("cls")
class Brazo_robot():
def __init__(self, tipo, color, marca, grados):
self.tipo = tipo
self.color = color
self.marca = marca
self.grados = grados
# Creación de METODO
def caracteristica(self):
rasgo = ('Características del brazo robot: Tipo {}, Color {} de la m
arca {}')
# Mensaje
print(rasgo.format(self.tipo,self.color,self.marca),'\n')
def movimiento(self):
print(f'El brazo robot {self.marca} tiene {self.grados} grados de li
bertad','\n' )
r1 = Brazo_robot('SCARA','Negro','Festo',5)
r2 = Brazo_robot('CARTESIANO','Rojo','Mitsubishi',3)
r1.caracteristica()
r1.movimiento()
r2.caracteristica()
r2.movimiento()
232
Ayudas en la red
Videos
Classes and Objects with Python - Part 1 (Python Tutorial #9)
https://www.youtube.com/watch?v=wfcWRAxRVBA
233
1.9.4 Verifique los conocimentos en Python
¿Cómo utilizas el código del modulo ¿Qué keyword se utiliza para declarar
mod_b en el módulo mod_a? funciones?
a. import a a. class
b. import mod_a as b b. del
c. import mod_b c. def
d. import mod_a and mod_b d. break
234
Dada la lista=[‘a’,’b’,’c’], ¿qué arroja ¿Cúal es el orden de evaluación en
lista[0]? Python?
a. ‘a’ a. Paréntesis, Exponentes,
b. ‘b’ Multiplicación, División, Adición,
c. ‘c’ Sustracción
b. Multiplicación, Paréntesis,
¿Cúando se ejecuta la clausula finally? Exponentes, División, Adición,
a. Al final, únicamente si sucedió un Sustracción
error c. División, Sustracción, Adición,
b. Nunca, sirve solo para realizar Multiplicación, Paréntesis,
comentarios Exponentes
c. Al final, siempre, sin importar si d. Exponentes, División,
hubo error o no Multiplicación, Paréntesis
d. Al principio, prepara el código Sustracción, Adición
para un error
¿Qué tipo utilizar para trabajar con un
¿Cúal es la diferencia entre una tupla y decimal?
una lista? a. str
a. Las tuplas sólo almacenan b. int
enteros c. float
b. Las tuplas son iguales a las listas d. bool
c. Las tuplas son inmutables
d. Las tuplas no indexan sus valores ¿Los nombres de las clases comienzan
con mayúsculas?
¿Qué keywords utilizarías para manejar a. Verdadero
código con la posibilidad de arrojar b. Falso
errores?
a. if/ else ¿Cuál no es un nombre de variable
b. try/except permitido?
c. del/str a. house
d. float b. global
c. longitud
¿Cúal es la ldiferencia entre un conjunto d. train_2
y unalista?
a. El conjunto no permite elementos ¿Dado lista=[1], ¿Qué arroja lista *4?
repetidos a. [1,2,3,4]
b. El conjunto tiene un tamaño fijo b. [1,1,1,1]
c. El conjunto es inmutanle c. [0,1,2,3]
d. EL conjunto es igual a una lista d. [4,4,4,4]
235
¿Qué hace la función lower? ¿Cuál es la función del keyword break
a. Convierte un string a mayúsculas. dentro de una iteración?
b. Convierte un string a minúsculas. a. Termina la iteración
c. Convierte la primera letra a b. Para la siguiente iteración
minúscula. c. Ejecutar una expresión
d. Convierte la primera letra condicional
mayúscula. d. Ninguna de las nateriores
236
3. ¿Qué es PythonPath?
PythonPath es una variable que se usa cuando se importa un módulo. El código puede ser
clases de función o variables. Los módulos integrados más utilizados son os, sys, math,
random, data time y JSON.
237