View on GitHub

Curso-Python

Es un git donde se hablara de python

Curso de Python

Indice

  1. Introducción del Curso

  2. ¿Para quién va dirigido este curso?
    1. ¿Qué es Python?
  3. ¿Porqué aprender Python?
  4. ¿Quién ocupa Python y donde se ocupa?

  5. Instalación de Python
  6. ¿ Qué es un editor de texto y para que quiero usarlo ?
  7. Instalación de Python en sistemas operativos Linux y mac os
  8. Instalación de Python en Windos 10
  9. ¿Qué es Google Colab? ventajas y desventajas?

  10. Python en general

  11. Tipos básicos
1. Los tipos básicos
2. Características estos Tipos
3. ¿ Qué es un cast para que se utiliza y cómo se utiliza ?
  1. Ciclos y condicionales
1. ¿ Qués  un if ?
2. ¿Qué es un for?
3. ¿Qué es un while ?
4. ¿Qué es la recursividad ?
  1. Paradigma de programación

  2. Introducción a los 4 paradigmas

1. Programación estructural
2. Programación funcional
3. Programación Orientados a Objetos (P.O.O)
4. Programación Lógica
  1. Introducción Programación estructural
1. ventajas y desventajas
2. Características
3. ¿ Cómo usarla en Python ?
  1. Introducción Programación estructural
1. ventajas y desventajas
2. Características
3. ¿ Cómo usarla en Python ?
  1. Introducción Programación P.O.O
1. ventajas y desventajas
2. Características
3. ¿ Cómo usarla en Python ?

Introducción del Curso

¿Para quién va dirigido este curso?

Este curso, esta pensado para todas las personas que quieren empezar a programar en Pyhton, va a ser un curso teórico-Practico (más practico que teórico) en la cual se van a enseñar lo más básico de Python esto con el objetivo de que puedas aplicar esto conocimientos.

La primera parte del curso sera puramente teórica, esto con el objetivo de que entienda el por que aprender Python es una buena idea, se hablara mucho de sus ventajas con el objetivo de que se emocionen y quieran aprender más y también de sus desventajas, para que también entienda que este lenguaje tiene algunas limitaciones (Aun que aveces parece que no los tiene).

Además de que en la primera parte veremos como instalar Python aunque spoiler para los usuarios de Linux Y Mac ya viene en su sistema operativo incluido además de una herramienta muy llamada Google Colaboratory (esto permite trabajar en linea ).

Después se hablara de los tipos más básicos de Python , estos serian lo fundamental para empezar a hacer un programa, sus características y propiedades seguidos de como utilizar ciclos ,¿ Qué ciclos? Tranquilos hablaremos de ello en ese capitulo.

Después hablaremos de algo que se conoce como paradigmas ya que Python es un leguanje de programación multi-paradigma , ¿ Pero que es un paradigma? , es una forma en la que podemos pensar como atacar un problema, aunque profundizaremos en este tema en este capitulo.

Para finalizar hablaremos de algunas, de que es una biblioteca, para que queremos usar una o más biblioteca y como usarlas.

¿Qué es Python?

Es un Lenguaje de programación orientado a objetos, pero ¿ qué es un lenguaje de programación ? Esta pregunta es algo complicado pero en términos generales podemos decir que es la forma de indicarle a una maquina, que es lo que quiero que haga, y como quiero que lo haga.

Es un lenguaje creado por Guido van Roussum en el año de 1991, durante esta época se trabajo con una versión conocida como python 0.9, después en el año 1994 se vio la primera versión de Python 1.0, para posteriormente usar la versión 2.0 en el año 2000, y finalmente con la versión actual que se conoce como, python 3.0 (Ojo cabe aclar que en la versión 3 , hay sub versiones de esta y actualmente estamos trabajando com python 3.7)

¿ Por que aprender Python?

La respuesta a esta pregunta es muy sencilla, al aprender python puedes hacer que tu maquina haga tareas tediosas, por ti, por ejemplo, imaginate que quieres tener una forma de tener el conteo de todo lo que gasta al mes y solo bastara con poner los precios o imaginate que este ejemplo te dijera que deduce o no deduce impuestos.

Pues con Python puedes crear ese programa, ahora la siguiente pregunta natural seria, y ¿ para que quiero programarla si en internet puedo encontrar un programa que lo haga?, pues hay 2 casos principales, Que este o que no este, en el caso de que no este pues si no sabes programar lo único que te queda hacer es llorar o pagarle un buen dinero a alguien más para que te ayude a programarlo.

En el caso de que este hay varios casos por ejemplo, puede que este pero que sea de paga y que la paga sea muy alta o puede que este el programa y falle mucho o puede que lo que quieras sea muy especifico que no lo haga del todo bien.

Bien hasta el momento solo he hablado de por que es buena idea, programar pero para este punto te puedes estar preguntado ¿ por que python? osea si existen otros lenguajes como podrían ser C,C++,C#, Haskel,Java,Raquet,GO, Kotlin,Java-Script,Pascal,PHP entre otros , ¿Qué hace tan especial ha Python? .

Lo que hace especial a python con otros lenguajes de programación es que es un lenguaje de programación con una sintaxis muy sencilla y además de eso es de los lenguajes con una curva de aprender python es de las menos pronunciadas.

Ahora para ver su sencilla sintaxis, haremos un programa que nos diga “Hola, cómo estas” en python y en otros lenguajes

Java


Class HolaMundo{
  public static void main(String[] args){
    System.out.println("Hola, ¿cómo estas?")
  }
}

C++


#include <iostream>

using namespace std;

int main() {

    cout << "Hola, ¿Cómo estas?" << endl;

    return 0;

}

Kotlin


fun main(args:Array){
  println("Hola, ¿cómo estas?")
}

Go


import "fmt"
func main() {
    fmt.Println("hola ¿cómo estas?")
}

Python


print("Hola ¿cómo estas?")

Aparte de eso python tiene muchas herramienta para trabajar en desarollo web, IA(Inteligencia Artificial),Redes neuronales,Aplicaciones de escritorio, además de contar con una infinidad de bibliotecas ,una de las más grande comunidades en la web , aparte según estadísticas stack over flow es el lenguaje con mayor demanda en el mundo laboral.

¿Quién ocupa Python

Este es uno de los lenguajes más populares que existe por lo que no es sorpesa para nadie que se utilicen tanto del lado comercial, como cientifico, algunas programas hechos en este lenguaje personas

  1. Instagram

  2. Pinterest

  3. Dropbox

  4. Facebook

  5. Whatsapp

  6. Spotify

  7. Google

  8. Netflix

  9. Reddit

  10. Youtube

Fuentes Nota Aquí (al final de cada sección) abra algunas fuentes, estas podrán ser articulos, vieos , o incluso podrán ser Paginas personales, de otras personas.

En el mundo de la tecnología, no podemos darnos el lujo de desperdiciar cualquier fuente de información

Para ¿Qué aprender a programar?

  1. [video][https://www.youtube.com/watch?v=HrBh2165KjE]
  2. [articulo][https://www.nextu.com/blog/8-razones-para-aprender-programar/]
  3. [video][https://hipertextual.com/2014/12/aprender-a-programar]
  4. [video][https://www.youtube.com/watch?v=X5Wkp1gsNik]

¿Porqué aprener Python?

  1. [articulo][https://www.genbeta.com/desarrollo/estas-razones-que-programadores-estan-empezando-a-aprender-python-1]
  2. [articulo][https://blogthinkbig.com/razones-aprender-python]
  3. [Video][https://www.youtube.com/watch?v=tVtkN1ZvU_Y]
  4. [articulo][https://www.genbeta.com/desarrollo/estas-razones-que-programadores-estan-empezando-a-aprender-python-1]

Instalar Python

¿ Qué es un editor de texto y para que quiero usarlo ?

Primero antes de empezar a programar cualquier cosa en cualquier lenguaje es un lugar donde podamos escribir codigo ¿No les parece? , pero ¿Donde puedo hacer eso?, ya que lo que necesito hacer es escribir podre a caso usar ¿Word o Google Docs o alguna herramienta similar ? y la respuesta es un retundo !NOOOO y ¿ Por qué no podría hacerlo o sea solo tengo que escribir no?, en teoría si solamente debes escribir pero normalmente cuando estés escribiendo codigo vas a escribir algunas cosas en Ingles y Español lo cual va hacer que el auto corrector se vuelva loco y no nos deje escribir en paz un ejemplo cuando estemos utilizando una lista escribiremos list y el auto corrector nos cambiara a lista y eso ya fastidio todo el código.

Ahora podre usar, el bloc de notas y la respuesta es que si puedes pero no es recomendable ya que imaginate que realizas un codigo de más de 10000 lineas y ves puro texto plano se vería horrible y seria imposible de trabajar.

Bueno entonces ¿Dónde puedo trabajar? en algo que se conoce como Editores de texto estos editores, son programas especiales los cuales te permite resaltar parte del código (se le llama código al texto que escribimos cuando estamos programando) y la mayoria de ellos tiene una función de auto completar código esto ¿Qué quiere decir? que cuando escribamos el programa leea los primeros caracteres de nuestra palabra y nos muestre algunas opciones, para concluir el texto que estamos escribiendo por ejemplo si escribimos ap- el auto completa podría sugerirnos el método append() (se vera más adelante en el curso que es un método)

¿Pero cuantos editores de texto existen ? La verdad existen demasiados para poder enunciarlos en una lista, por lo cual solo mencionare algunos de los principales editores que existen y donde se pueden descargar

  1. Visual Studio https://code.visualstudio.com/?wt.mc_id=DX_841432
  2. Atom https://atom.io/
  3. SublimeTex https://www.sublimetext.com/3
  4. Emacs https://www.gnu.org/software/emacs/download.html
  5. Vim https://www.vim.org/download.php

Fuentes

  1. [video][https://www.youtube.com/watch?v=S5IUGQJdTdc]
  2. [video][https://www.youtube.com/watch?v=eh1zkeXhUXs]
  3. [articulo][https://www.ecured.cu/Editor_de_texto]
  4. [articulo][https://culturacion.com/para-que-se-usan-los-editores-de-texto/]
  5. [articulo][https://kinsta.com/es/blog/mejores-editores-texto/]

Instalar Python en sistemas operativos Linux y Mac-OS

Este probablemente sea el capitulo más corto que existe ya que las versiones actuales, ya traen pre instalado un interprete de pyton y unicamente para saber que versión contiene tu maquina unicamente debemos abrir la terminal escribir la python y este nos mostrara que interpetre de python esta utilizando.

como se muestra a continuación

VersionPython

Instalar Python en Windows 10/7

Para la instalación de python en sistema operativo windows debemos acceder al siguiente link, instalaremos la versión 3.7 del lenguaje python, https://www.python.org/downloads/release/python-377/ . Debemos seleccionar el siguiente instalador:

Una vez descargado debemos abrir el ejecutable y seguir los siguientes pasos:

Seleccionamos la casilla Add Python 3.7 to PATH, lo que añadirá una variable del sistema para python con lo cual podremos ejecutar desde nuetra terminal, una vez hecho ésto debemos darle permisos de administrador.

Una vez acaba la instalación debemos tener una ventana así:

Y para probar la instalación abriremos una terminal en cdm escribiendo python para iniciar una terminal interactiva

¿Qué es Google Colab? ventajas y desventajas

Es un servicio prestado por Google, en el cual esta compañía nos presta sus equipos para trabajar, y probar nuestro trabajo, en algo que se conoce como una NoteBook Ahora la pregunta obvia seria ¿Qué es un Notebook? y ¿Porque quiero utilizarlo?, Un NoteBook es una herramienta que nos permite ejecutar nuestro codigo, por partes y ¿Porque quiero ejecutarlo en partes? Porque de esta manera es mucho más fácil encontrar bugs (nos referimos a los bugs, cuando según nosotros nuestro código ya esta bien y no necesita modificaciones pero al momento de ejecutarlo, sucede algo que hace que falle).

Pero además de lo anterior ¿Qué otras ventajas trae? ,

  1. Nos permite trabajar desde cualquier computadora que tenga internet y soporte Google Chrome
  2. No tenemos que preocuparnos de bibliotecas no instaladas, vasta unicamente con que las importemos
  3. Nos permite trabajar a distancia con un equipo, como cuando usamos Google Docs para hacer nuestras tareas.

Se escucha super cool ¿no?, pero como en esta vida no siempre podemos ganar ganar ya que utilizar esto también traer consigo ciertas desventajas como podrian ser

  1. Si no se organiza bien el NoteBook se vuelve muy difícil de seguir.
  2. Hacer problemas “Medianos o grandes” se vuelve muy difícil de tratar
  3. Si no tienes conexión a Internet, no puedes acceder.

Después de ver las ventajas y desventajas la siguiente pregunta seria ¿cómo accedo? y esto es fácil solo debemos, abrir Google Chrome y escribir “Google colaboratory”

VersionPython

Después nos aparecerá la siguiente ventana donde para acceder le daremos a iniciar sección

VersionPython

Para eso después nos pedirá nuestra cuenta Google usuario y contraseña después de esto nos mostrara el siguiente menú

VersionPython

En el cual debemos dar clic en block de notas nuevo y a continuación ya podremos empezar a crear nuestro programa y ser felices. VersionPython

Fuentes

  1. [video][https://www.youtube.com/watch?v=9fNKy9zOPkg] (Instalar Python en windows)
  2. [Video][https://www.youtube.com/watch?v=Jcm7oiaH2m8] (Instalar Python en windows y ejecutarlo)
  3. [Video][https://www.youtube.com/watch?v=Ns44jcB2lVo] (Ejecutar Python Ubuntu )
  4. [Video][https://www.youtube.com/watch?v=n7RdjB9bDKo] (Google Colab Video Avanzado)
  5. [articulo][https://www.adictosaltrabajo.com/2019/06/04/google-colab-python-y-machine-learning-en-la-nube] (Google colab Articulo)

Tipos Básicos

Sintaxis

Los lenguajes de programación van a tener algo que se conoce como Sintaxis, pero ¿Qué es la sintaxis? es la forma de escribir correctamente en el lenguaje, pensemos en un lenguaje “natural” como seria el español, tenemos ciertas reglas que respetar ciertas reglas a la hora de escribir para que nuestras oraciones tengan sentido ¿verdad?, por ejemplo si yo escribiera algo, mañana comer tunas la quería en comer yo y tamarindo agua beber ayer

En la primera lectura puede ser que no se haya entendido el mensaje que quiero dar tal vez después de algunas lecturas entiendas que, el mensaje que deseaba dar era el siguiente “yo quería comer tunas y beber agua de tamarindo ayer en la mañana” , pero ¿Eso como lo hiciste ? , como tienes nociones de el lenguaje español sabes que para que nuestras oraciones tengan sentido se estructuran generalmente por Sujeto + Verbo + Predicado, pero desgraciadamente las maquinas no poseen esta capacidad.

Por lo cual, tenemos que ser muy claro en lo que queremos ya que interprete- de Pyton (Es lo que transforma nuestro código en un lenguaje que la maquina entienda) no tiene la capacidad de saber como se estructura su lenguaje, en otras palabras sí python hablase español no podría identificar entre sujeto,verbo, predicado.

¿Pero entonces que es lo que hace python?, El esta esperando que todo este en su lugar es decir que el sujeto verbo y predicado estén donde deben estar, pero ojo python no habla español, ingles,Francés, japones ni ninguna otra lengua “Natural”.

¿Entonces que habla? Python habla su propio lenguaje osea python habla python , ¿pero como se habla python? pues en la siguiente imagen que es de ED Team (una plataforma educativa privada que enseña conceptos de tecnología) se explica bastante bien.

VersionPython

ESPEREN!, aquí hay conceptos que talvez no entiendas los cuales se abordaran de manera general a continuación y de manera más especifica a lo largo del curso.

  1. Los comentarios: Estos son algo que python va ignorar completamente son cosas que escribimos para que los demás programadores sepan de que estamos hablando o incluso para que nosotros nos enteremos de lo que esta pasando ejemplo: piensa en la ropa que te pusiste justamente hoy hace un año, probablemente no te acuerdas, (Salvo que haya pasado algo muy especial) ahora imaginate que hiciste un programa muy padre hace un año, pero se esta qudando obsoleto o se te ocurrio una mejora para ese programa.

Vas todo feliz a actualizarlo pero ya no te acuerdas de lo que escribiste ni de lo que hiciste para que tu programa funcionara y eso te pone triste :C. pero ves que tiene comentarios y dices o claro tiene lógica lo que hice y ya lo puedes actualizar.

  1. Los import, se utilizan cuando quieres usar algo que no viene en el propio lenguaje de Python, por ejemplo una biblioteca (Aun que muchas veces lo vas a ver como librería debido a una mala traducción de Library) ¿Pero qué es una biblioteca o librería? son funciones extras que son creados por tercero o por ti mismo que aplian las características que tiene python agregando nuevas clases(Se vera en Orientación a Objetos) ,Funciones (Estas se verán durante todo el curso)

  2. Funciones : Son Probablemente el concepto más importante a la hora de programar ya que al igual que las funciones matemáticas, al pasar uno o más parámetros, podemos transformarlos en algo totalmente difernente, Aun que no se desesperen este concepto aparecerá en todo el curso.

  3. Ciclos : Son La forma de indicarle a la maquina que algo se va a repetir una cantidad de veces en especifico o que se va arepetir algo hasta que ocurra una acción piensalo de esta manera es como ir a una fiesta y decir voy a tomarme 10 Shots de tequilas o voy a tomar hasta que se acabe la botella lo que pase primero esa es la idea general.

  4. Variables : Si funciones es el concepto más importante de la programación las variables son fundamentales ya que son espacios de la memoria donde almacenamos la información que necesitamos imagina que son cajas donde vamos a guardar las cosas que nos importan pero que en este momento no las vamos a utilizar como la caja de adornos de navidad , o la caja de recuerdos infantiles entre otras.

Aun que su sintaxis se vera a profundidad en su propio capitulo

  1. Identación: Este concepto es uno muy importante en python, ¿por qué? tal vez hayas escuchado el chiste de las llaves o del punto y coma , que muchos errores se deben gracias a esos simbolos entonces el poderoso python tuvo la idea de quitarlos es decir que ellos no tiene poder aquí, pero esto trajo con sigo un problema.

Ya que recordemos que el punto y coma en la mayoría de lenguajes es para decir aquí acaba nuestra sentencia y las llaves se utilizan para decir hasta aquí llega el alcance (El alcance es una forma de decirle al programa esta función llega hasta este punto a partir de aquí tu ya no sabes que pasa)este concepto se utiliza mucho en las funciones y les prometo que lo veremos cuando lleguemos a condicionales Fuentes https://blogthinkbig.com/sintaxis-basica-aprender-python (Sintaxis de Python, Básico ) https://www.codigofuente.org/sintaxis-en-python/ (Sintaxis de Python, Intermedio )

Ahora, tal vez ya estén ansiosos de hacer un programa, pero a un nos falta algunas piezas que poner antes de realizar el programa, ¿Pero qué falta, si ya tenemos python en nuestro equipo?, aun nos falta alguna manera de decirle al equipo que queremos que haga, ¿cómo?, ejemplo imaginate que le estamos enseñando a un niño pequeño como sumar fracciones pues que hacemos le enseñamos a sumar como nos enseñaron en la primaria.

VersionPython

Pero aquí nos surgen algunos problemas los cuales son

  1. ¿Qué son A,B, C & D?
  2. A una maquina no le podemos enseñar con un dibujo.

Entonces hay que resolver estos problemas, empezando por el primero.

Probablemente ya sospechen que A,B,C y D son números y efectivamente son números reales, pero probablemente se este preguntado ¿ cómo Python sabe que son números o cómo le indicamos que son números ?

Para nuestra buena o mala suerte Python es un lenguaje de programación de tipado débil ¿Qué? tipado débil, pero ¿Qué es eso? de la manera más simple de explicar esto, es que python cuenta con un interprete, donde su trabajo es ir linea por linea recorriendo el sricpt (un script unicamente es una forma fresa de decir el código fuente que escribimos osea nuestro programa) y en cada linea que va recorriendo y va interpetando( osea va viendo que es cada cosa en cada linea).

Para verlo más claro veamos un ejemplo


x=5 ##Aqui primero vamos a decir que las x son número y seran el número 5
y=6 #Aqui el interpetre guarda que ahora las y son números 6
print ("Ejemplo1")
print (x+y)# Aqui podemos ver que 5+6 = 11
z=10 #Aqui el interpetre guarda que ahora las y son números 10
x= 3 #Apartir de aquí a hora las x valen 3 XD
print ("Ejemplo 2")
print(x+y) ##se ve que  6 + 3 = 9

Al correr el programa nos muestra lo siguiente VersionPython

Ahora parece que hay una nueva pregunta, ¿Cuántos y cuáles son los tipos de datos que puede identificar Python? son 7 tipos de datos los cuales son los siguientes aunque cabe mencionar que en caracteristicas haremos mención y explicaremos hasta el fondo cada una de ellas.

  1. Strings
  2. Lista
  3. tuplas
  4. diccionario
  5. Numericos
  6. Conjuntos
  7. Boleanos

Ahora probablemente, te estes preguntando ¿Qué se puede hacer con estos tipos? , esa pregunta sera resuelta en el siguiente “Capitulo” pero por mientras a un tenemos una pregunta que no hemos resuelto, pero con lo que hemos visto ¿Podemos resolverla? la respuesta es NO a un nos falta saber que se puede hacer con los tipos numericos, por lo que a continuación pasaremos a la siguiente sección de carracteristicas de tipos. Fuentes

  1. [Articulo][https://manuais.iessanclemente.net/index.php/Python_-_Tipos_de_datos]
  2. [Articulo][http://www.pythondiario.com/2014/12/tipos-de-datos-en-python.html]

Características estos Tipos

Empecemos en orden a estudiar estos elementos el primero sera un string, estos tipos de datos son cadenas alfanumericas ¿Espera alfa numericas? esto implica que podemos guardar en ellas ciertas palabras, como Nombres, Números , Cuentas, entre otras cosa, pero aquí podria surguir una duda muy natural.

¿Como hago eso? osea como guardo mis cadenas o ¿como le indico a Python que es lo que quiero guardad?, para responder esta Pregunta tendremos que crear algo que se conoce como variable, pero que es una variable, una variable es como bautizas a tus datos ejemplo, imaginate que queremos usar una fecha de un cumpleaños o queremos guardar un nombre , hagamos un ejemplo muy concreto supmgamos que es el cumpleaños de nuestro amigo, entonces hagamos un ejemplo muy concreto imaginemos que queremos guardar el cumpleaños


cumpleaños = "15/05/2000"
nombre = "Daniel"

print (Cumplaños)
print (Nombre)

Ahora otro ejemplo, hagamos otra parte donde aparezca el nombre de un amigo con 2 de sus artistas o grupos favoritos


nombre = "Adrian"
banda1= "Mago de oz"
banda2= "Mana"

Entonces después de esto ¿cómo se podrían ver en general la declaración de variables en python?

VersionPython

Y ¿cómo se ve en el caso de los Strings?

VersionPython

Pero ahora pensemos, parece que los programas que tenemos, pues no son muy chidos, o ¿no creen ? osea solamente estamos poniendo variables, tenemos que crear algo con más poder que se denomina Función, pero que ventajas tienen las Funciones o ¿Para qué las quiero aprender este concepto?, las funciones en python funcionan como pequeñas fabricas donde tu metes datos de entrada y esto los pueden cambiar, ya sea a una cadena más chida o incluso a cualquier otra cosa como por ejemplos números, lista, tuplas, etc.

Así se vería un Método Metodos

Ahora, puede ser que te estés preguntando ¿Las funciones tienen una forma general? y la respuesta es la siguiente.


nombreFuncion(p1,p2,.....,pn):

Ahora revisemos la con más calma numero uno ¿Qué es nombre función? es la forma en que la llamaremos una vez que la creamos una función en un modulo de pyton la podemos llamar siempre que queramos sin ningún problema Observación podemos notar que empieza con minúsculas ¿porqué pasa esto?, más que nada es convenciones el nombre podría ser NombreFunción pero esto haría que nuestro código se viera feo y que las demás personas no quieran usarlo, piénselo así es como escribir, “¿Qué? o Khe?” con ambos se trasmite el mensaje de que tiene una duda pero, probablemente decidan usar el primero en una conversación.

Ahora que significan los p1,p2,…pn, son los parámetros que recibe la función, piénsalo de la siguiente forma son las materias primas que necesita nuestra poderosa fabrica para arrojar un nuevo resultado, por ejemplo en una suma necesitamos 2 números para poder hacela, o para poder hacer una derivada necesitamos que nuestro polinomio sea de al menos grado uno, entre otros ejemplos.

Pero ahora en python ¿ cómo creamos estos Métodos ?, fácil , a continuación haremos el de cumpleaños


  def creadorCuampleanos(nombre, edad):
    return "El nombre de mi amigo es " + nombre + " y su fecha de nacimiento es " + edad

Entonces ¿Qué pasa si queremos ejecutar nuestro codigo de la siguiente forma?


  def creadorCuampleanos(nombre, edad):
    return "El nombre de mi amigo es " + nombre + " y su fecha de nacimiento es " + edad

Veamos que aparece en terminal

Funciones

parece que nada se ha ejecutado, pero ¿porqué pasa esto? esto es debido a que solamente le hemos dicho que a si se va a llamar la función, en ningún lado le hemos dicho que la ejecute, piénsalo de esta manera, era como cuando eras un niño o niña y tu mamá te mandaba a comprar las tortillas tu le decías que si vas y a la hora de la comida tu mamá te preguntaba ¿ y las tortillas , no te dije que fueras por ellas ? y tu le respondías, si me dijiste pero nunca ha que horas.

Python funciona exactamente igual, entonces si queremos que ejecute le tenemos que indicar exactamente donde queremos que se ejecute, como en el siguiente ejemplo.


 def creadorCuampleanos(nombre, edad):
    return "El nombre de mi amigo es " + nombre + " y su fecha de nacimiento es " + edad


creadorCuampleanos("juan","25")

Ahora ¿qué pasa si ejecutamos?, el código ¿cómo no se ve nada? (en estos momentos debes estar pensado que fraude), pero si se ejecuto solamente que no le indicamos a la maquina que lo queremos ver, y ¿como hacemos eso?

Pues ha 2 maneras, practicas de hacer eso La primera es escribiendo la siguiente sentencia,


print (creadorCuampleanos("Juan",25))

Esta forma resulta muy cómoda, si es la ultima vez que vamos a tratar con ese resultado, así que casi nunca nos va a hacer util

Ahora la Segunda forma resulta ser un poco más talachuda pero ayuda mucho más a la hora de recuperar los datos, ¿Se imaginan cual es?, si no se la imaginan no hay problema, la solución es fácil unicamente la deben guardar en una variable de la siguiente forma.


x= creadorCuampleanos("Juan","25")
print (x)

ahora ¿Qué pasara, si intentamos ejecutar el siguiente código


def creadorCuampleanos(nombre, edad):
    return "El nombre de mi amigo es " + nombre + " y su fecha de nacimiento es " + edad


print("Esta es la forma 1")
print (creadorCuampleanos("juan","25"))

print("Esta es la forma 2")
x=creadorCuampleanos("juan",",25")
print(x)

Aparecerá lo siguiente imprimir-Funciones

Ahora ¿Qué mas podríamos ver en los strings? la verdad se podrían ver más cosas pero para sacarle el mayor jugo posible debemos,agruparlos con otros tipos de datos por lo que pasaremos al siguiente tipo básico que resulta ser una lista. Fuentes

  1. Articulo
  2. Articulo
  3. Articulo

Lista

Ahora, este tipo da datos básico, junto con tupla son tipos de datos muy pero muy curioso ya que son estructuras de datos, son ¿qué?, una estructura de datos esto ¿qué quiere decir? que estos tipos de datos son capases de guardar otros tipos de datos y además de que poseen métodos propios, pero ¿que les parece si vamos por orden?

Primera pregunta, ¿Qué tipos de datos pueden guardar en la lista? Cualquiera, esto implica que puedes tener listas de números, listas de string, listas de diccionario, lista de lista (Si puedo tener una lista de listas por más curioso que sea), listas de objetos,lista de Conjuntos, lista de Boleanos , o puedo tener un lista mezclada con todos estos datos.

pero ¿dónde puedo guardar una lista?, en una variable de la siguiente forma

Forma-Lista

De hecho la lista que se ve en el ejemplo se le conoce como la lista vaciá osea una lista que no tiene nada, más adelante veremos que esta lista es muy importante, ahora ya que por el momento no nos interesa mucho , a si que vamos a asignarles valores, para esto hay 2 formas una es dándole directamente los valores y la otra es utilizando sus Metodos*

Primero empecemos por la más sencillas que es asignarlos directamente y hagamos varios tipos de listas, ¿les parece?


x=[1,2,3,4,5,6]##Ejemplo de lista de numeros
y=["a","b","C","D"]##Ejemplo de lista de strings
z=[["a","b","f"], [1,2,3,45,],y,x] ##Ejemplo de lista de lista
a=[True,False,True,False]
dic1={
    "c1":1,
    "c2":2,
    "c3":3
}
dic2={
    "c4":4,
    "c1":2,
    "c3":3
}
dic3={
    "c1":1,
    "c6":6,
    "c7":7
}
b=[dic1,dic2,dic3]##Lista de diccionatios
c=[x,y,z,a,b]##Lista mixtas

Ahora, veamos con más calma lo que tenemos aquí primero empecemos por x & y, estas variables estan guardando una lista de números y de Strings respectivamente, ¿pero si utilizamos la función print que aparecería?, vemos,

ejemploLista

Como dijimos antes las litas son estructuras de datos, entonces por esa razón podemos acceder a los datos que estan en la lista, y esto de ¿Qué nos sirve? es como tener una cantidad infinita de variables(Obviamente no es infinita tenemos hasta donde nos de la memoria), pero seguramente te estés pensando esta súper cool que pueda tener todos esos datos pero ¿cómo accedo a estos datos?, de la siguiente manera


x[0] ###Este nos daría el elemento 0 de la lista x (En otras palabras el primer elemento de la lista)

¿Cómo que 0 es el primer elemento?, si en python casi siempre el primer elemento empieza en 0, ¿porqué es así? hay varias razones, de por que esto pero para no meternos en un gran debate filosofico dejemoslo en por que así se diseño el lenguaje.

Ahora veamos que pasa en pantalla si hacemos lo siguiente


x=[1,2,3,4,5,6]##Ejemplo de lista de numeros
y=["a","b","C","D"]##Ejemplo de lista de strings
z=[["a","b","f"], [1,2,3,45,],y,x] ##Ejemplo de lista de lista
a=[True,False,True,False]
dic1={
    "c1":1,
    "c2":2,
    "c3":3
}
dic2={
    "c4":4,
    "c1":2,
    "c3":3
}
dic3={
    "c1":1,
    "c6":6,
    "c7":7
}
b=[dic1,dic2,dic3]##Lista de diccionatios
c=[x,y,z,a,b]##Lista mixtas
print("Esto vale x")
print (x[0]) #Aquí se imprimira 1

se imprime esto ejemploLista

Pero ¿qué pasa si hacemos esto?


x=[7,2,3,4,5,6]##Ejemplo de lista de numeros
y=["a","b","C","D"]##Ejemplo de lista de strings
z=[["a","b","f"], [1,2,3,45,],y,x] ##Ejemplo de lista de lista
a=[True,False,True,False]
dic1={
    "c1":1,
    "c2":2,
    "c3":3
}
dic2={
    "c4":4,
    "c1":2,
    "c3":3
}
dic3={
    "c1":1,
    "c6":6,
    "c7":7
}
b=[dic1,dic2,dic3]##Lista de diccionatios
c=[x,y,z,a,b]##Lista mixtas
print("Esto vale x")
print (x[0]) #Aquí se imprimira 7

ejemploLista

ahora, ¿solo podemos acceder al primer elemento ? , la respuesta es no para acceder al segundo elemento lo único que demos hacer es lo siguiente


x=[7,2,3,4,5,6]##Ejemplo de lista de numeros
y=["a","b","C","D"]##Ejemplo de lista de strings
z=[["a","b","f"], [1,2,3,45,],y,x] ##Ejemplo de lista de lista
a=[True,False,True,False]
dic1={
    "c1":1,
    "c2":2,
    "c3":3
}
dic2={
    "c4":4,
    "c1":2,
    "c3":3
}
dic3={
    "c1":1,
    "c6":6,
    "c7":7
}
b=[dic1,dic2,dic3]##Lista de diccionatios
c=[x,y,z,a,b]##Lista mixtas
print("Esto vale x")
print (x[1]) #Aquí se imprimira 2

ejemploLista

Ahora podríamos seguir haciendo esto con cada elemento, pero ¿Cómo se podría ver en general? imaginemos lo siguiente

ejemploLista

Ahora con la imagen en mente los cuadros son espacios en nuestra memoria y al poner un número i talque i esta en el conjunto de los enteros, podemos acceder a ese espacio de memoria, como cuando accedimos al espacio 0, que es el primer elemento de la lista, o como se muestra en el ejemplo que esta arriba cuando accedimos al tercer elemento.

Pero ya que dijimos que i puede ser cualquier elemento en el conjunto de los enteros eso implica que i puede tomar 3 valores en general i= 0 o i < 0 o 0 <i así que veamos lo que pasa, sabemos que el caso de i=0 nos va a devolver el elemento, pero que pasa si pongo una i negativa como por ejemplo i=-1 esto nos devuelve el ultimo elemento de la lista , ¿ No me creen, preguntemos le a python? a ver que opinan. ejecutemos el siguiente codigo


x=[7,2,3,4,5,6]##Ejemplo de lista de numeros
y=["a","b","C","D"]##Ejemplo de lista de strings
z=[["a","b","f"], [1,2,3,45,],y,x] ##Ejemplo de lista de lista
a=[True,False,True,False]
dic1={
    "c1":1,
    "c2":2,
    "c3":3
}
dic2={
    "c4":4,
    "c1":2,
    "c3":3
}
dic3={
    "c1":1,
    "c6":6,
    "c7":7
}
b=[dic1,dic2,dic3]##Lista de diccionatios
c=[x,y,z,a,b]##Lista mixtas
print("Esto vale x")
print (x[-1]) #Aquí se imprimira 6

ejemploLista

Ahora si usáramos -2 nos daría la penúltima posición y si pusiéramos -3 nos daría la ante penúltima posición y así sucesivamente.

¿Y que pasa si tenemos una i mayor a 0 pues lo que pasa en este caso es que si vamos poniendo 1 nos da la segunda posición, 2 la tercera posición y así hasta llegar a la longitud de la lista, pero ¿Qué es la longitud de una lista? son todos los espacios de memoria (Piensa en los cuadros de memoria ), en los que podemos acceder

Miremos el siguiente ejemplo

ejemploLista

En la primera lista podemos acceder hasta la posición 4, en la segunda lista podemos acceder hasta la posición 2 , en la tercera lista hasta la posición 6 y en la ultima solo podemos acceder a la posición 0.

Pero que pasaría, si ala lista 1 le pasáramos 7, nos devolvería el elemento que esta en la posición 0, pero esto ¿por qué pasa? por que 7 es congruente con 7 , ¿que significa esto? que si dividimos 7/7 su resuido 0, esto pasa también con el 14, con el 21 , 28, 35, y básicamente cualquier múltiplo de 7. ¿Pero que pasaría? si pusiéramos 8 esto nos devolvera el elemento en la posición 1 , por que si dividimos 8/7 el resuido sera 1 , esto también pasa con 15, 22, 29,26, etc. con cualquier número que sea de la siguiente forma (7n)+1 donde ¿ahora que creen que pasa con el 9 , 16 , 30, etc. y cualquier número de la siguiente forma? (7n)+2,nos devolverá el antepenultimo.

Ahora un dato curioso que es Importante podemos acceder en cualquier momento al elemento de la lista que deseamos y podemos cambiarlo por cualquier otro , ¿osea qué?, Hablando en terminos tecnicos las listas tiene una propiedad que se le conoce como Mutable, las listas son mutables, ¿ ha , ok , pero esto que significa osea que importancia tiene que las listas sean mutables?

Pues que podemos ingresar a sus elementos y cambiarlos, pensemoslo de la siguiente forma, es comos si los espacios de memoria fueran casas que se ponen en renta, esto quiere decir que esos espacios de memoria podemos meterles nuevo inquilinos cuando queramos, pero OjO Si metemos nuevos inquilinos tenemos que desalojar a los viejos por lo que se pierde el dato, ¿pero como los desalojamos y metemos nuevos? Pues veamos el siguiente ejemplo


x=[1,2,3,4,5]
x[2]=7 #<- Aqui le estamos indicando que modifique el indice 2, no el número 2

Entonces al hacer ese cambio ahora nuestra lista quedaría de la siguiente forma


x[1,2,7,4,5]

¿pero por que quedo así? , recordemos que los indices empiezan desde 0 veamos ,como se ventana


x=[1,2,7,4,5]
i=[0,1,2,3,4]

Ya, ¿se ve más claro? como el 2 esta abajo del 7, esto quiere decir que el 7 esta en el registro 2 de memoria y por eso desalojamos al 3 y le dimos ese espacio de memoria al 7

Retomemos un tema que dejamos un poco en el olvido recuerdan que dijimos que ¿había dos formas de hacer que una lista no este vaciá? ya que vimos una forma que era meter los datos directamente en la lista, ahora toca hablar de como meter más elementos a través de sus funciones ya que la lista al ser una estructura de datos, posen funciones veamos cuales son sus funciones y que hacen

  1. append (elemento) <–elemento es cualquier cosa que queramos agregar a nuestra lista y lo agregara al final de ella
  2. inset (i,x) <– i es un número entero que representa donde queremos que lo agregue, y x es el elemento que se desea agregar.
  3. remove (x) <– esta función sirve para eliminar elementos, le pasa el elemento que quieres eliminar y una vez lo encuentra lo elimina ojo solo funciona con el primero que encuentra
  4. sort(key= compararer) esta función lo que hace es acomodar la lista y Key= Comparer es como tu quieres decirle que los acomode, si no se le indica pues el lo acomoda según le indica cmp.
  5. reverse () <– devuelve la lista al reves
  6. extend(l ) <– l es otra lista y lo que hacemos es todos esos elementos los agrgamos a nuestras lista original
  7. count (x) <– Le pasamos un elemento x y nos dice cuantas veces aparece
  8. index (x) <– Le pasamos un elemento x y nos dice donde aparece por primera vez en caso de que no aparezca devuele -1

A continuación veremos ejemplos de cada uno de estos métodos

Primero empecemos con append, ya que es un método que literalmente nos permite meter elementos , pero como lo hacemos pues muy sencillo primero, debemos insertar una lista no importa si es la lista vaciá o una lista llena de elementos, hagamos un ejemplo de como hacerlo.


x=[]#Con la lista vacia
x.append(1)
x.append(2)
x.append("Hola")
x.append("Divierte")

print("Esta es nuesta primera Lista")
print(x)

y=["3",4+2i, 25]
y.append("Que cool")
y.append("la lista son fáciles")
print("Esta es nuestra segunda lista")
print (y)

Por lo que vemos siempre se están creando al final de la lista, pero ahora imaginemos que queremos crear una lista de preoridades, imaginemos que estamos haciendo la lista de los cumpleaños de nuestros amigos, pero se nos pasa una fecha, por lo cual tenemos que agregar la fecha en una posición determinada, digamos que tenemos la siguiente lista


cumple=["02-03","01-04","12-04","25-04", 15-05 ]##el primer digito es el día y el segundo es el mes
amigoOlvidado = "30-04"   

Entonces como, lo mentemos en la posición que debería ir, (osea la penultima) tenemos varias opciones una de ellas es ir contando y ver que posición la queremos en este caso es la posición 4.

O ya que queremos insertarlo en la ultima posición vasta con poner el -1 y como veremos esto lo único que hará sera recordad , el 15-05, veamos lo que dice python de esto

ejemploLista

Pero Ahora pensemos que metimos mal una fecha de el cumple de un amigo, que podemos, hacer ose te imaginas que te equivocaste de poner el cumpleaños de tu mejor amigo o amiga, entonces tenemos que modificarlo, ¿pero cual sería la mejor forma cumplir esta tarea? con lo que sabemos podríamos ejecutar 2 planes muy sencillos, los cuales podrían ser Plan A ,

  1. Ingresar en la lista
  2. Poner el cumpleaños correcto con el método insert()
  3. misión cumplida

Pero este plan tiene una gran falla, y es que tendríamos un cumpleaños fantasma que no sea de nadie, y te imaginas si se nos olvida que dejamos ese cumpleaños y le compramos un regalo a alguien que no deberíamos, y nos estresamos por nada, entonces debemos cambiar de táctica, por lo tanto Plan B.

  1. Primero eliminamos el cumpleaños erado.
  2. Despues con insert lo colocamos en la posición correcta
  3. misión cumplida

pero hay un problema ¿Como eliminamos ese cumpleaños , con la poderosa función conocida como remove, al fin remove nos elimina la primera aparición de el elemento, esto ¿que significa? es de lo más sencillo es que supongamos que tenemos la siguente lista

elimina = [1,2,2,3,4,5] #<- hay dos números 2 solo se va eliminar el primero
elimina.remove(2)
print(a)

Veamos que dice python ejemploLista

Por lo que vimos todo salio cool, ahora cumplamos la misión de cambiar la fecha erada si les parece, ahora supongamos que la fecha que esta mal es “01-04” , para esto lo que haremos sera lo siguiente


cumple.remove("01-04")##Lo eliminamos
print (cumple)# Verificamos

Perfecto todo esta saliendo a la perfección ahora ya solo falta poner el cumpleaños correcto el cual es “01-05” entonces manos a la obra


cumple.insert(4,"01-05")##insertamos el elemento
print(cumple)#Verificamos

veamos que dice la terminal:

ejemploLista

Pasemos al siguiente método que es el de acomodar, este tiene un gran problema ya que si a python no se le dice como se debe acomodar, python lo hace de la manera más logica que se le ocurre y aparte esto limita mucho la forma de acomodar ya que solo puede acomodar números y Strings, pero ¿porqué, hace esto? piensalo bien como decides si una lista es mayor que otra, veamos un ejemplo


a=[1,2,3,4]
b=["uno","dos","tres"]
c=a.append(b)

Ahora cual seria la formá correcta de acomodar esos elementós , ya que aquí estas comparando peras con manzanas simplemente no se puede pero entonces ¿Qué si se puede?

Pues lo más fácil es acomodar números reales, esto no aplica para los números imaginarios(se verán en la sección de tipos básicos números) y la otra forma sencilla de acomodar es por orden alfabetico, ¿osea? como un diccionario, de esa manera se acomodan los Strings veamos un ejemplo de cada uno

Ejemplo de Números


a=[1,100,34,23,12,9,7,8]
a.sort()

ejemploLista

Falta el ejemplo de los string asi que empezemos, supongamos que tenemos la siguiente lista


palabras=[b,a,z,i,l,c]
palabra.sort()
print(palabra)#<- La vamos a ver así  [a,b,c,i,l,z]

Ahora ¿qué pasas si uso palabras completas? ,pues veamos que pasa


palabrasComplejas=["Hielo","Hola","Agua","Zapopan","Comida"]
palabrasComplejas.sort()
print(palabrasComplejas)

ejemploLista

Pero ahora, con los Strings hay que tener cuidado ¿por qué? en el ejemplo anterior todas las palabras empezaron con mayúsculas, pero ¿que pasaría sí tuviéramos mayúsculas y minúsculas intercaladas? o peor ¿qué pasas si tenemos mayúsculas, minúsculas, números y símbolos en la misma lista de palabras? algo del esta forma


lista_rara= ["a","A","#","2"]
lista_rara.sort()
print(lista_rara)

ejemploLista

Pero ¿Porqué las acomodo así?, sencillo python lo que hace es dar prioridades, entonces veamos como es su prioridad

  1. Letras mayúsculas
  2. Primeros símbolos tales como “”,#,$;%,&,/,(),@ entre otros
  3. Los números de 0-9
  4. Letras minúsculas

Ahora llego la hora de ver la función reverse, la cual no tiene mucho chiste ya que su nombre, es muy explicito lo único que hace es que la lista que tienes, la voltea pero ¿cómo que la voltea? Pues supongo que tenemos la siguiente lista


pruebaR=[1,2,3,4,5,6,7,8,9]
pruebaR.reverse()
print(pruebaR)

ejemploLista

y esto ¿funciona unicamente con lista de números? No Funciona con cualquier tipo de lista , usemos nuestras listas anteriores para verificar esto ¿Qué les parece? (En caso de que no pase directo a la siguiente función)


  x.reverse()
  print(x)

  y.reverse()
  print(y)

  z.reverse()
  print(z)

La siguiente función es incluso más sencilla que reverse, ya que Extend lo que hace es que si se tienen 2 listas las concatena ¿Pero que es concatenar? la manera más sencilla de ver este concepto es pensando en que estas juntando 2 listas.

Ahora talves te estés preguntando, ¿pero eso no lo hacíamos con append o con insert? y la respuesta es que no son 2 cosas parecidas, pero muy diferente una manera muy visual de verla seria la siguiente.

ejemploLista

Pero en código ¿como seria?

usemos el siguiente ejemplo muy sencillo


l1=[1,2,3,4]
l2=["a","b","c","d"]
l1.extend(l2)

Ahora notemos que es muy diferente de hacer estos Ahora veamos una función toda vía más sencilla la cual es count(), esta función es sumamente sencilla como su nombre lo indica, sirve para contar los elementos que son iguales, pero ¿Qué es un elemento igual? pues en números es muy fácil de identificar ,por ejemplo 1=1 2=2 3=3, etc. pero ojo es muy difernete tener 1 a 1.0000001 estos no son números iguales, además de eso otros elementos que son diferente son 1 a “1” ya que el elemento más a la izquierda es un número y el elemento a la derecha es un string , ¿por qué lo se ? por las comillas que tiene al principio (Pueden ser simples o pueden ser dobles).


l2.extend(l1)

¿porqué?, porque en el l1 tendría 1,2,3,4,”a”,”b”,”c”,”d” y en l2 sería “a”,”b”,”c”,”d”,1,2,3,4 , ¿ves como si es diferente?, por esta razón hemos de tener mucho cuidado al utilizar, por que la forma en que la pongamos puede que nos, cambie todo así que ojo aquí.

Ahora para elemetos como diccionarios,listas,conjuntos y tuplas lo que va a pasar es que en cada registro de memoria va verificar que los elementos sean iguales, en caso de que en cada registro de memoria sean iguales entonces se dice que son iguales , pero ¿qué pasa? si en alguno llegan a ser diferentes, pues en ese momento dejan de ser iguales por lo cual no contaria que ese elemento es igual.

Tuplas

Esta es una estructura de datos, prácticamente igual que las listas pero con una gran diferencia, que estas son conocidas por ser Inmutables, ¿Pero que significa que sean Inmutable?, la manera más sencilla de explicarlo es que una vez que las declaremos a si se quedan, es decir en las lista podíamos acceder a los elementos y modificarlos (Recuerden el ejemplo de la renta).

Siguiendo con el ejemplo de las rentas que se vio en las listas, las tuplas no son rentas de casas, si no más bien es como si los elementos que están en la tuplas fueran dueños de sus propias casas, por lo cual si intentaramos correrlos, ellos se quejarían y en venganza de que les quitamos sus casas nos tronarían, el programa.

Ahora ¿Por qué las usamos? dijo, parece que hacen lo mismo que una lista y peor aun parece que aparte de no ofrecer nada nuevo, nos quita funcionalides, entonces ¿Cual es su ventaja?, Principalmente tiene 2 ventajas, uno es que sabes que pase lo que pase los datos no cambian (Puedes garantizarlo) y la segunda es un poco más tecnica, recuerdan que dijimos que las listas no son infinitas, que dependemos de la memoria, pues las tuplas tampoco son infinitas y también depende de la memoria que tenemos, pero con la diferencia de que el tamaño de sus registro son más pequeños, esto quiere decir que pueden caber más tuplas que listas en un determinado espació de memoria.

Ahora ¿como declaran las tuplas en Python?, de hecho se de claran muy parecido a sus hermanos listas veamos los


x=(1,2,3,4)

Y listo así de sencillo podemos tener una tupla, ¿ahora como obtengo un elemento de una tupla ?, igual que con las listas


print(x[1])##Esto nos debe debolver 2

ejemploTupla

Ahora, las tuplas también tiene funciones , bueno de hecho solo tiene 2 funciones, ¿Pero porque tan pocas? Por que recordemos las funciones que tenia las funciones que tenia la listas y veamos si son compatibles append() <-No la podemos, usar por que esto modificaría nuestra tupla :C insert()<- No la podemos, usar por que esto modificaría nuestra tupla :C remove() <- No la podemos, usar por que esto borraría un elemento de y por tanto modificaría a nuestra tupla :C sort() <– Esta función acomoda nuestra tupla, lo cual es evidentemente una modificación por lo cual no se puede utilizar. reverse()<— Recordemos que esta función también cambia nuestra tupla por lo cual no podemos usarla. extend <—Contatena 2 listas a si que no podemos usarla count()<—Esta si la podemos utilizar ¿por qué? solo nos dice cuantas veces se repite un elemento no estamos haciendo más que consultar.

index() <–Nos dice la posición del primer elemento, que cumple con las características dadas, por lo cual

Diccionario

Esta es una de estructura de datos muy curiosa, ya que a diferencia de las 2 ultimas que hemos visto, no puedes obtener los valores a través de indices, ¿entonces como puedo acceder ellos?, antes de contestar esta pregunta veamos que tipo de estructura tienen


diccionario1= { <== Aqui empieza
  Aquí escribo como voy a encontrar el elemento (key) =>1:"primer elemento", <= tiene este valor
  Aquí escribo como voy a encontrar el segundo elemento (key) =>2 :"Segundo elemento" <= Tiene este valor
}

Un diccionario incluso más sofisticado podría se el siguiente


diccionario2={
  "nombres":[Juan, Pablo, Diana, Paola ],
  "Edades":[22,,33,19,21]
  "Cursos":[[Python,D3], [Node,js], [criptografia,Sig],[]]
}

Ahora si vemos el diccionario 2 podemos observar que nos da muchismima información podemos ver que esto puede ser utilizado para un sistema de inscripciones para alguna escuela, y si le ponemos imaginario, podriamos adaptarlo para un gimnasio o para un banco.

Pero ¿cual es su estructura general?

ejemploDiccionario

Pero si lo vemos bien, esto parece no tener mucho sentido, por que si nos fijamos bien, no estamos ganando mucho, ya que unicamente estoy usando números para acceder a los datos y eso no tiene mucho sentido por que eso lo podemos hacer con la listas, así que una pregunta muy natural sería, ¿Qué ventaja nos da? Que aparte de números para poder identificar los elementos podemos usar otros tipos básicos, como lo son números, tuplas y string (Si nos fijamos bien los tipos inmutables), Pero que ventajas nos trae poder usar ¿Strings o tuplas para identificar un elemento?

Para los Strings es sencillo piensa en un estacionamiento digamos de un centro comercial, ahora imagínese que el estacionamiento es muy grande por lo cual esta divido por zonas, esto con el objetivo de que no olvide donde dejo el auto, pero si lo pensamos bien estos nombres son como a1 a2 c2 … etc estamos de acuerdo que estos nombres no los podemos expresar como números, pero si podemos expresarlo como String.

Ahora por que quisiéramos usar las tuplas para poder identificar un elemento, este ejemplo se puede verse mejor si pensamos en una matriz, digamos que queremos obtener un elemento que esta en la posición [i][j], aquí podemos ver que un número, no nos sirve ¿porqué? por que con un número solo podemos acceder al elemento i-esimo o j-esimo pero no los dos, esto es como si te dijera obtener el elemento que esta en la fila 2, pero supongamos que por esa fila pasan 200 columnas, ¿Estaría bien devolver los 200 elementos? , verdad que no Y de igualmente pasaría lo mismo con las columnas.

Sin embargo con las tuplas puedo expresar los elementos i y j sin ningún problema y es mas puedo hacer que las tuplas puedan guardar i, j,k…. n elementos.

Pero ahora por que las tuplas si y las listas ¿no? por que las tuplas recordemos que son inmutables, ¿pero esto que tiene que ver? Recordemos que la propiedad de ser inmutables implica que una vez puesto no puedo cambiarlo, y esto es muy util por que por un momento imaginemos que tenemos un diccionario real.

Ahora imaginemos que mágicamente cada vez que queramos podemos cambiar la forma de como comunicamos una idea, es decir, que si utilizamos la palabra felicidad, para expresar un estado de jubilo, de estar bien con nosotros mismo, etc.

Pero con este diccionario mágico podamos cambiar esa expresión por yuju, pero imaginemos que ya no queremos yuju, si no yei y cada vez que alguien quiera cambiarlo, pueda cambiarlo ¿No seria muy incomodo además de in practico?

La respuesta es que sí seria muy incomodo y sobre todo inmpractico para programar por esa razón no usamos valores mutables y por lo tanto no usamos listas.

Bueno, todo esto esta muy padre y todo pero ¿Por qué de vería usar un diccionario en vez de una lista? Esto como las mayoría de ocasiones depende mucho del problema, y sera nuestra obligación como programadores distinguirlo, cuando queramos uno y cuando queramos otro.

Por lo mientras veamos en que casos me conviene uno u otro por ejemplo veamos la alineación de un equipo de Football, como lo serian los pumas


pumas={
        1:"Alfredo saldivar",
        20:"Julio Gonzales",
        4:"Luis Quintana",
        5:"Johan Vásquez",
        18:"Nicolás Frelre",
        34:"Diego Rodriguez",
        19:"Alejandro Mayogra"
}

¿Por que nos conviene verlo así ? muy sencillo por que así podemos seleccionar a cualquer jugador poniendo unicamente, su número ademas viendo bien los datos vemos que el jugador 1 es Alfredo Saldivar , pero el siguiente jugador no es el número 2 si no más bien Es el número 20 por lo que usar los indice de la lista no nos conviene.

Veamos otro ejemplo, pensemos en los números de emergencia de la CDMX


numeroEmergencia{
    "Emergencias" : 911,
    "Policia" : 066,
    "CruzRoja":065,
    "Bomberos":068,
    "Policia-Federal":56842142
}

Ahora, ¿Por que no sacamos datos de estas estructuras de datos digo para eso son?

Veamos como sacar los datos de un jugador,


print (pumas[1])

¿Como 1, esto implica que los diccionarios empiezan en uno? No, esto es diferente recordemos las partes del diccionario, lo que le estamos pasando, en los paracentesis cuadrado es la llave, es decir 1 es la llave que te da la cadena “Alfredo saldivar”, veamos un ejemplo ahora con numeroEmergencia


print (numeroEmergencia["Policia"])

ejemploDiccionario

Como vemos al declarar como parámetro de la llave Policia esto nos dio como resultado el número, correcto, ahora, ¿Esta estructura es mutable o inmutable?, Es mutable esto quiere decir que si le puedo agregar nuevos elementos, pero ¿Cómo lo hago? muy sencillo veamos

ejemploDiccionario

Ahora, con los 2 diccionarios que tenemos metamos le datos


pumas[13] = "Kemonito"

ejemploDiccionario En este ejemplo acabamos a hacer que Kemonito se ha un jugador de los Pumas,los intercamos a su plantilla, ahora veamos si podemos agregar a papas Jhons como número de emergencia.


numeroEmergencia["PapasJhons"] = 5556315200

ejemploDiccionario Bien ya tenemos nuestra pizzeria favoritos agregada a los números de emergencia, así que de hambre no nos moriremos, pero al igual que las listass estos elementos tiene funciones, veamos las:

  1. items() <–Devuelve todos los elementos que hay en un diccionario en forma de lista , los elementos son devueltos en pares ((llave, valor)
  2. Keys() <–Devuelve todos las llaves que existen en un diccionario en forma de lista
  3. values() <– Devuleve todos los valores del diccionario.
  4. get(k)<– busca el elemento por la llave, si no lo encuentra devuelve un valor por defecto
  5. pop(k)<– borramos el elemento k, donde k es la llave
  6. clear() <–Borra todo el dicciconario (Peligro)

Ahora hagamos algunos ejemplos para ver como funcionan estas funciones

Empecemos obteniendo la lista de todos los números de emergencia, que les parece


prueba=numeroEmergencia.items()
print (prueba)

Ahora ¿Qué pasa al principio podemos observar que hay un “dict_items”, esto nos avisa que no es una lista, osea podemos hacer consultas de lista pero no podemos modificarlo, por lo que esto pareceria más una Tupla

Ahora obtengamos el número de nuestro Jugadores


print("Prueba Keys")
numJugadores=pumas.keys()
print(numJugadores)

Ahora obtengamos todos los números de las instituciones, para pode llamarles


print("prueba values")
instituciones= numeroEmergencia.values()
print(instituciones)

Ahora Despidamos al pobre Kemonito de pumas es un buen luchador, pero no es un buen jugador de football


print ("Prueba de pop")
nuevaPlantilla=pumas.pop(13)
print(nuevaPlantilla)

Fuentes https://docs.hektorprofe.net/python/metodos-de-las-colecciones/metodos-de-los-diccionarios/ https://entrenamiento-python-basico.readthedocs.io/es/latest/leccion3/tipo_diccionarios.html https://www.youtube.com/watch?v=_UELgsIxE7g&t=584s

Numéricos

Dentro de python como se mencionó anteriormente, tenemos los tipos primitivos de los numéricos, éste término engloba a los siguientes:

  1. int
  2. long
  3. float
  4. complex

Es natural preguntarse ¿para qué tener varios tipos de datos numéricos? Pues muy simple, recordemos que en las matemáticas hay numeros enteros, numeros con decimal, numeros reales que sirven para distintas cosas, denotan representaciones distintas y en la computadora funcionan exactamente igual, un número entero lo vamos a entender como aquellos que no tienen parte decimal y abarcan desde -2147483648 hasta 2147483647 es decir si queremos almacenar un número más grande que 2147483647 en una variable nos sería imposible usar el tipo de dato entero, como ya sabemos python maneja tipos explícitos entonces en automático lo asignará a un flotante, que es un entero más grande, de 64 bits. Veamos un ejemplo:

x = 2147483647
x
print(x)

Obteniendo como resultado lo siguiente:

¿Qué podemos hacer con tipos enteros? Pues entre las operaciones definidas en los enteros está la suma, división entera, producto, módulo y resta, para ello veamos lo siguientes ejemplos:

Empecemos por el operador + suma o concatenación, no entraremos a detalle en la concatenación solo en la suma, entonces como podemos observar en el ejemplo tenemos una asignación del valor x=10 y y=2 , cuando hacemos una operación x+y funciona como una suma convencional, obtenemos así el resultado de 12.

El operador - es equivalente a la suma y funciona como una resta normal de enteros, por eso al restar x-y obtenemos le valor de 8.

El operador % es el operador módulo, muy util en el estudio de los números, cuando obtenemos 0 en el operador módulo entonces nos dice que el valor de y es múltiplo de x, es decir el residuo de una división entera es 0 cuando el dividendo es múltiplo del divisor, en otras palabras, podemos ver que x es de la forma x = yq + r (para más información revisar algoritmo de la división). Cuando realizamos x%y obtenemos 0 dado que es el residuo de la división de 10 entre 2 y podemos verlo de la siguiente manera 10 = 5 * 2 + 0 donde 0=r

El operador // que representa la división entera en python que a diferencia de / no nos regresa la parte decimal, entonces estamos obteniendo que x//y = 5.

El operador *‘‘** es la multiplicación en python, entonces por eso hacer x*y nos está regresando 20.

Un último operador es el operador potencia denotado por ** el cual se ve de la forma x**y obteniendo así el valor de 100.

Ahora que se cubrio el tipo numérico más básico y sabiendo que el tipo float no es más que un entero que permite valores más grandes que entero, entonces veamos el decimal

Como podemos observar, el tipo decimal almacena valores con punto flotante, es decir el resultado de la divisón 7/2 nos regresa 3.5 pero haciendo división entera 7//2 nos regresa 3. Los decimales son útiles porque en muchos casos, los datos con los que se trabaja en la vida real no son meramente enteros, son valores que implican parte decimal, para definir un decimal usaremos el . de la siguiente forma:

Tal vez para éste punto te has preguntado cómo hacer que un entero sea decimal y viceversa, a éste proceso que se define de forma explícita se le conoce como casting o audición, basicamente como python maneja tipos implícitos entonces las variables toman un tipo en tiempo de ejecución, cuando el intérprete ejecuta las líneas de código, entonces podemos decirle en algún punto del programa que queremos que una variable la convierta en otra de un tipo compatible, con compatible nos referimos a que por ejemplo una cadena “5” claramente puede convertirse a un entero pero algo de tipo “hola” no puede ser convertido a un entero, otro ejemplo sería pasar de un entero a un float o al revés, eso lo podríamos lograr de la siguiente manera:

Éstas funciones ya vienen definidas en python, solo es cosa de invocarlas con los parámetros que necesitemos:

  1. int(x) convierte a un tipo entero el valor de x
  2. float(x) convierte a un tipo flotante el valor de x
  3. complex(x) convierte a un tipo complejo el valor de x
  4. complex(x,y) convierte el valor de x y y a un número complejo con parte real x y parte imaginaria i

Entre las muchas operaciones que podemos hacer con números existen en particular las matemáticas definidas en python, para ello importamos la biblioteca math

from math import *
h = 15.5
ceil(h) # regresa 16 puesto que es la función techo, nos regresa el entero superior resultado del redondeo
floor(h) # regresa 15 puesto que es la función piso, nos regresa el entero inferior el resultado del redondeo
log(h)  # nos regresa 2.740840023925201

Entre otras funciones que podemos hacer con enteros y flotantes, realmente no explicaremos cada una pero se pueden consultar en el hipervínculo al final de la sección.

Tipo complejo El tipo complejo es un tipo de número no tan común pero puede llegar a ser útil en ciencia de datos. Un número complejo se define de la forma a+bi donde a es a lo que se le conoce como la parte real y b la parte imaginaria.En python lo podemos definir de la siguiente forma:

Las operaciones en el campo de los complejos son distintas a las convencionales:

La suma es de la forma (a+bj) + (c+dj) = (a+c) + (b+d)j, por ejemplo en python hacemos

x = 2+3j
y = 3+5j
x+y #regresa 5+8j

La resta es de la forma (a+bj) - (c+dj) = (a-c) + (b-d)j con lo que en python haríamos

x = 2+3j
y = 3+5j
x-y #regresa -1-2j

La multiplicación es de la forma (a+bj) * (c+dj) = (ac) + (adj) + (bcj) + (bdj^2), en python sería

x = 2+3j
y = 3+5j
x*y # regresa -9+19j 

La división es de la forma (a+bj) / (c+dj) = ((a+bj)/(c+di))*((c-di)/(c-di)) = ((ac + bd) + (bc-ad))/c^2+d^2 que sería en python

x = 2+3j
y = 3+5j
x/y # regresa 0.6176470588235294-0.02941176470588238j

Como último se mencionarán los operadores conocidos como asignaciones aritmético-aumentantes o augmented arithmetic assignments, ésta son una abreviaciónde una asignación y una actualización, para ello veamos los siguientes ejemplos:

Fuentes
Tipos básicos
Operadores complejos
Ejemplos tipos numéricos Video ejemplos tipos numérico
Video 2 ejemplos tipos numérico

Tipos Booleanos

Los tipos booleanos, son demasiado sencillos ya que aquí solo tenemos 2 resultados True o False, en otras palabras Si o no, ser o no ser, etc.

Al igual que los tipos numéricos estos no tienen funciones, tiene operadores, y estos operadores funcionan con proposiciones lógicas, una proposición lógica es aquella que se puede responder con un si o no.

Operadores Lógicos

  1. negación
  2. O
  3. Y

Que en pyton se escriben de la siguiente manera


not()
or()
and()

Empecemos viendo el primer operador que es la negación, es el más sencillo de los operadores ya que este operador es el único unitario, esto implica que solo requieren de un valor.

Por ejemplo si escribo True y lo niego me devolverá False o si escribo False me devolverá True y basicamente son todos los valores que puede tomar, a continuación veremos la tabla de verdad.

Tabla negacion

Veamos el siguiente, ejemplo en código escribimos lo siguiente


x= True
print (not (x))

Por lo que vemos de vuelve False, análogamente pasa lo mismo si hubiéramos puesto x= False

Ahora, hablaremos del siguiente operador que es el or este es un poco más complicado ya que con el requerimos al menos 2 proposiciones. Veamos su tabla de verdad donde 1 es equivalente a True y 0 Es equivalente a False

Tabla negacion

Veamos un ejemplo con el or


a=True
b=False
c=False
d=True
print ("Or")
print (a or b)
print (c or a)
print (b or c)
print (a or d)

Con esto vemos como se cumple la tabla de verdad, ahora pasaremos a la ultima de todas que es el and de igual forma veamos su tabla de verdad

Tabla negacion


print ("and")
print (a and b)
print (c and a)
print (b and c)
print (a and d)

Por lo que vemos se cumple el and, y con esto estaría cubierto los booleanos, sin embargo hay otra forma de declarar los booleanos y usando los comparadores, que son

  1. == <– Nos permite decir si 2 números son iguales
  2. <– Mayor que nos dice si un número es mayor que otro

  3. != <– Nos permite decir si 2 números son distintos
  4. < <– Menor que sirve para decir si un número es menor que otro
  5. <= <– Menor igual nos dice si un número es menor igual que otro
  6. = <– Mayor igual Nos dice si un número es mayor igual que otro

Veamos unos ejemplos rapidos Ejemplo


num1=10
num2=29
num3=5
num4=5
num5=7
print("Igua igual")
print(num1==num3)
print(num4==num3)
print("Diferente")
print(num1!=num3)
print(num4!=num3)
print("menor que ")
print(num4<num5)
print(num4<num3)
print(num1<num5)
print("Mayor que ")
print(num4>num5)
print(num4>num3)
print(num1>num5)

print("menor igual que ")
print(num4<=num5)
print(num4<=num3)
print(num1<=num5)
print("Mayor igual que ")
print(num4>=num5)
print(num4>=num3)
print(num1>=num5)

Bueno todo esto esta súper cool, pero esto ¿para qué nos sirve? básicamente, para poder tomar decisiones, las decisiones de saber si tomar un camino o se va a ver con más claridad en el siguiente tema que son condicionales y ciclos

Fuentes Articulo Video Video

Condicionales y ciclos

Empecemos por lo más sencillo lo que es un condicional, un condicional es la forma en que hacemos que la computadora pueda tomar decisiones ¿ pero como hacemos eso ? con los Boleanos podemos decir que si ocurre algo hacemos A y si no ocurre hacemos B, esto lo podemos hacer con la palabra reservada if veamos sus estructura

Estructura del if

Ahora veamos como hacer una condicional, con edades supongamos que tenemos que decidir quien va a entrar a un bar y quien no.


def bar(edad):
  if(edad < 18):
    return ("Lo siento usted es muy pequeño para entrar a este establecimiento")
  return ("Pase por favor")

Como vemos se nos muestra el mensaje, pero ¿Qué pasa si necesitamos más de 2 casos es decir 3, 4, 5 o más veamos un ejemplo, imaginemos que queremos registrar a alguien en una carerra y hay 4 categorias una de infantil que se permiten inscribir a niños de 8 a 14 años, la juvenil de 14 a 30 años, la de adultos de 30 50 y la de veteranos de 50 en adelante.


def carrera(edad):
  if(edad<14):
    return "tu categoria es la infantil"
  if(edad >= 14 and edad <= 30):
    return "Tu categoria es la juvenil"
  if(edad > 30 and edad < 50  ):
    return "Tu categoria es de adultos"
  if(edad >= 50  ):
    return "Tu categoria es Veterano"

Fuentes*

  1. Articulo
  2. Video
  3. Articulo
  4. Articulo
  5. Video

Cast

El Cast es un termino que se utiliza para poder decir que vamos a cambiar a un tipo básico por otro, ¿Osea cómo? Es hacer una conversión, por ejemplo imaginemos que tenemos una variable String en donde solo haya caracteres numéricos y otra variable numérica, por alguna razón las queremos sumar.

Entonces lo que tenemos que hacer es algo como esto


numero1="12"
numero2=20
print(numero2+int(numero1))

Y con esto ya sumamos un String con un int, pero que tipos, de cast existen por ejemplo en los tipos numericos tenemos los siguientes


int()<- Pasa un String (Si y solo si el String esta conformado por caracteres Numéricos) o  pasa floats a enteros
float()<- Con vierte a los enteros a números reales.
complex(x,i) <--Convierte un numero x a imaginario, pero tambien le de vez pasar su parte imaginaria
chr() <-- Convierte un número  En su forma ASCII

Cast Generales, Estos son cast de lista, diccionarios, tuplas


tuple() <--Convierte los elementos en tuplas
set() <-- Convierte los elementos en conjuntos
list() <-- Convierte los elementos en lista
dict() <-- Convierte los
str() <- Convierte a cualquier tipo básico a String

Veamos un ejemplo de conversiones


x=[1,2,3,4,5]
y=tuple(x)
print("Esto es una tupla")
print(y)
a=[(1,"uno"),(2,"Dos")]
diccionario=dict(a)
print ("Esto es un diciconario")
print (diccionario)

Fuentes

  1. Cast numericos Articulo
  2. Cast generales Articulo
  3. Video-Cast

Ciclos

Hay 2 principales ciclos, el ciclo for y el ciclo While ambos ciclos son equivalentes, esto quiere decir que si puedes escribir algo como un for, también puedes escribirlo con un while y bise versa ahora ¿Por qué aprender las 2 formas? Por que aveces sera más cómodo escribirlo de una forma que otra, ahora empecemos viendo como es el for. Estructura del For

Veamos como usar el ciclo for con una lista de 5 elementos


abecedario=["a","b","c","d","e"]
print("Este es el ejemplo for")
for i in abecedario:
    print(i)    

Con esto vemos que nos devuelve, a,b, c, d ,e pero esto de ¿qué nos podría servir?, recordemos nuestra función del bar imaginemos que nos pasan una lista de edades, y nosotros tenemos que decidir quien es mayor o menor de edad.


clientes=[10,25,74,12,13,43,34,85]
for cliente in clientes:
    print(bar(cliente))

Ahora también podemos usar una función cocida como range(), esta la pondremos despues del in como se ve en la imagen

Estructura del For

Y ¿Para que queremos usar range? , simplemente para decirle que se ejecute un número determinado de veces en otras palabras podemos hacer que un bloque de código se repita tantas veces como que queramos veamos un ejemplo, hagamos un programa que nos salude 10 veces


for i in range(10):
  print("¡hola!")

Fuentes

  1. Articulo-del-ciclo-for
  2. Articulo-de-ciclo-for
  3. Video-de-ciclos (Apartir del minuto 11 muestra ejemplo)
  4. Articulo-de-range

Estructura de control while:
Podemos pensar de la siguiente manera, un ciclo for se puede ver como un para todo elemento en el rango has algo, por otro lado while se puede ver como un mientras se cumpla la condición ejecuta ésto.
Son muy similares y de hecho podemos hacer lo mismo con una estructura que con otra pero cada uno nos resulta o facilita ciertas situaciones a diferencia del otro. Empecemos por analizar la estructrura del while:

Como se menciona, la condición de permanencia que de ahora en adelante le diremos simplemente la condicional nos garantiza la ejecución de un número determinado de veces el código interno dentro del while, y a diferencia del for, tenemos un control más explícito del valor de los iteradores.

Como no se ha mencionado anteriormente éste nuevo término, un iterador se puede pensar como un objeto/elemento que nos ayuda a recorrer contenedores o estructuras, es una variable para fines prácticos.

Ahora bien siempre tanto en for como en while debemos tener IMPORTANTE CUIDADO con la condición, si no la definimos correctamente ésta puede entrar en lo que se conoce como loop infinito o ciclo que no termina, para ello ejemplificaremos un caso donde si termina y un caso donde se puede ciclar.

Ejemplo de while que no se cicla Sumaremos los primeros 10 números del 0 al 9

i = 0
contador = 0
while(i < 10):
  contador += i
  i += 1
print(contador) #nos regresa 45

Aquí como podremos notar, el while se ejecutó 10 veces pero recordemos que i tomó valores entre 0 y 9 no entre 1 y 10 puesto que i fue inicializada en 0 y no en 1, por lo tanto la suma da 45. Además cabe destacar que nuestra condición de permanencia es la clave para que ésto ocurra le estamos diciendo que se ejecute mientras i sea estrictamente menor que 10 es decir el valor máximo para i es 9, cuando i=10 se viola la condición de permanencia puesto que i no es menor estricto que 10, al contrario i=10 por tanto no se ejecuta ya esa iteración y procede a imprimir el valor del contador.

Ejemplo de while que se cicla

i = 11
contador = 0
while(10 < i):
  print("entra al while")
  contador += i
  i += 1
print(contador) #nunca llega a imprimir el contador porque nunca termina le ejecución del while

Como podremos notar, nunca se deja de ejecutar el while puesto que la condicional nunca se “rompe” o siempre se cumple, ésto es un loop infinito. Así también debemos notar que cada “entra al while” en la imagen representa una iteración del while o en otras palabras podemos ver que cada print corresponde a una vez única que se ejecuta el while con cada valor de i que va creciendo.

Veamos otro ejemplo donde usemos la negación lógica de la condición de permanencia para ejecutar el while, como se mencionó previamente not es un operador lógico que invierte el valor de True a False o False a True según sea el caso, eso surge de las tablas de equivalencia de la lógica proposicional.

Un ejemplo para agregar elementos de una lista menos el que no queremos, tomemos 7 como el elemento de la lista que no queremos sumar.

lista = [1,5,3,2,7,8,7,9,1,2]
i = len(lista)-1
contador = 0
while i >= 0:
	if(lista[i] == 7):
		i -=1
		continue
	else:
		contador += lista[i]
		i -= 1
print(contador) #nos regresa 31

Fuentes

  1. [Ejemplos de while] https://entrenamiento-python-basico.readthedocs.io/es/latest/leccion4/bucle_while.html
  2. [Video ejemplos de while] https://www.youtube.com/watch?v=UfUM6uzl5SM
  3. [Ejemplos de while con paso a paso] https://www.snakify.org/es/lessons/while_loop/