Python 101: guía completa para principiantes | Alexander O. | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Python 101: guía completa para principiantes

teacher avatar Alexander O., Web Developer & Cyber Security Expert

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Promoción del curso

      1:45

    • 2.

      Introducción a Python

      4:53

    • 3.

      Nota importante para trabajar con Python

      4:23

    • 4.

      Cómo usar atún

      4:16

    • 5.

      Cómo trabajar con el código visual de estudio

      6:41

    • 6.

      Hola mundo

      6:31

    • 7.

      Introducción a la sección de tipos de datos

      1:21

    • 8.

      Trabajar con cuerdas

      8:53

    • 9.

      Otros tipos de variables

      4:49

    • 10.

      Operadores booleanos actualizados

      4:13

    • 11.

      Operadores aritméticos actualizados

      5:33

    • 12.

      Introducción a la sección sobre cómo trabajar con cuerdas

      1:29

    • 13.

      Manipulación básica de cuerdas

      5:35

    • 14.

      Indexación y corte de cadenas

      8:50

    • 15.

      Métodos comunes para hacer cuerdas

      7:19

    • 16.

      Más manipulación de cuerdas

      10:58

    • 17.

      Introducción a la sección de flujo de control y bucles

      1:41

    • 18.

      Introducción a los algoritmos

      5:40

    • 19.

      Declaraciones si else

      11:46

    • 20.

      Comprobador de contraseña simple

      4:38

    • 21.

      Introducción a los bucles

      4:16

    • 22.

      Bucles for y while

      10:01

    • 23.

      La afirmación BREAK

      13:16

    • 24.

      Intenta excepto declaraciones

      7:11

    • 25.

      Continuar declaración

      6:42

    • 26.

      Desafío de programación

      17:37

    • 27.

      Introducción a la sección de funciones

      1:01

    • 28.

      Definición y llamada de funciones

      3:16

    • 29.

      Parámetros y argumentos

      7:15

    • 30.

      Argumentos de palabras clave

      4:27

    • 31.

      Variables locales y globales

      5:19

    • 32.

      Introducción a la sección de estructuras de datos

      1:04

    • 33.

      Listas

      7:34

    • 34.

      Cómo usar bucles en una lista

      2:57

    • 35.

      Diccionarios

      7:57

    • 36.

      diccionarios anidados

      4:53

    • 37.

      Conjuntos

      6:57

    • 38.

      Programación de conjuntos y bucles de desafíos

      5:52

    • 39.

      Diccionarios y bucles del desafío de programación

      12:31

    • 40.

      Proyecto de sistema de autenticación

      4:22

    • 41.

      Paso 1: crea la función de registro

      6:18

    • 42.

      Paso 2 Crea la función de inicio de sesión

      7:04

    • 43.

      Paso 3: creación del sistema de autenticación

      8:42

    • 44.

      Introducción a la sección de manejo de archivos

      1:17

    • 45.

      Cómo leer y escribir archivos

      8:04

    • 46.

      Lectura y escritura de entradas en archivos de texto

      7:54

    • 47.

      Métodos de lectura y escritura

      9:25

    • 48.

      Gestión de errores de archivos

      7:44

    • 49.

      Varios excepto bloques

      3:33

    • 50.

      La declaración final

      5:03

    • 51.

      Introducción a la sección Bibliotecas y módulos

      0:54

    • 52.

      Introducción a las bibliotecas y módulos

      4:32

    • 53.

      Creación de un módulo personalizado

      6:14

    • 54.

      Cómo trabajar con un módulo estándar

      3:36

    • 55.

      Generación de contraseña con módulos aleatorios y de cadena

      7:12

    • 56.

      El módulo de hora y fecha

      6:54

    • 57.

      Trabajar con una biblioteca externa

      8:48

    • 58.

      Introducción al proyecto de la herramienta de cifrado y descifrado

      3:34

    • 59.

      Tarea 1: crea la clave de cifrado

      6:11

    • 60.

      Tarea 2: creación de las funciones de cifrado y descifrado

      8:35

    • 61.

      Tarea 3: agregar la interfaz de usuario

      15:26

    • 62.

      Introducción a la sección Oop

      1:08

    • 63.

      Introducción a OOP

      4:52

    • 64.

      Creación de una clase básica

      12:56

    • 65.

      Creación de una clase básica, parte 2

      4:09

    • 66.

      Encapsulación (1080p)

      6:02

    • 67.

      Herencia

      5:52

    • 68.

      Polimorfismo

      3:26

    • 69.

      Vista previa del proyecto final

      4:48

    • 70.

      Parte 1: creación de la interfaz de usuario

      4:39

    • 71.

      Parte 2: agregar la función de registro de usuarios

      4:28

    • 72.

      Parte 3: agregar la función de inicio de sesión

      6:24

    • 73.

      Parte 4 agregar la herramienta de comprobador de fuerza de contraseña

      12:20

    • 74.

      Parte 5 cómo crear hash de las contraseñas de los usuarios

      8:01

    • 75.

      Parte 6 agregar la herramienta de auditoría

      10:12

    • 76.

      Parte 7 agregar la función de registros de vista

      5:28

    • 77.

      Parte 8: agregar el menú de inicio de sesión de publicación

      7:05

    • 78.

      Conclusión del proyecto final

      1:44

    • 79.

      Conclusión del curso

      1:10

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

11

Estudiantes

--

Proyectos

Acerca de esta clase

Introducción a Python: la guía completa para principiantes está diseñada para dotarte de las habilidades de programación básicas de Python esenciales para el panorama de la seguridad actual. Adaptado específicamente para los entusiastas y profesionales de la ciberseguridad, este curso te guiará desde los conceptos básicos de Python hasta la creación de secuencias de comandos que automatizen las tareas de seguridad, manejen los datos confidenciales de forma segura e interactúen con los recursos del sistema de manera eficiente.

¿A quién está dirigido este curso?

  • Estudiantes que buscan desarrollar sus habilidades en Python para roles de nivel inicial.

  • Los analistas de seguridad actuales que quieren mejorar sus kits de herramientas con Python para automatizar tareas.

  • Entusiastas de TI y seguridad con poco o ningún antecedente en programación que quieran comenzar a usar Python en un contexto de seguridad.

No se requiere experiencia previa en programación, ¡solo ganas de aprender y explorar!

Lo que aprenderás

Con ejercicios prácticos, ejemplos del mundo real y aprendizaje basado en proyectos, obtendrás lo siguiente:

  • Fundamentos de Python: comienza desde cero con la sintaxis, las variables, los tipos de datos, las estructuras de control y las funciones de Python.

  • Manejo de datos para la seguridad: gestiona y procesa datos con las listas, los diccionarios y las capacidades de manejo de archivos de Python, esenciales para trabajar con registros, direcciones IP y credenciales.

  • Gestión y automatización de archivos: abre, lee y escribe archivos para automatizar tareas repetitivas y optimizar el procesamiento de datos.

  • Prácticas de programación seguras: aprende a manejar de forma segura las contraseñas, los datos de hash y a administrar la información confidencial siguiendo las mejores prácticas de seguridad.

  • Introducción a la programación orientada a objetos: descubre cómo las clases y los objetos pueden ayudarte a crear código modular y reutilizable para aplicaciones de seguridad.

  • Aplicaciones prácticas de ciberseguridad: crea guiones para resolver tareas relacionadas con la seguridad, como la comprobación de intentos de inicio de sesión, el filtrado de IP sospechosas y el trabajo con cifrado básico.

Resaltado del curso

  • Proyectos centrados en la ciberseguridad: aplica lo que aprendas en proyectos que simulen escenarios de seguridad del mundo real.

  • Guía paso a paso: cada módulo se basa en el anterior, lo que facilita el seguimiento, incluso si eres nuevo en la programación.

  • Aprendizaje práctico: gana experiencia práctica con laboratorios, ejercicios y cuestionarios para reforzar cada habilidad.

  • Código junto con ejemplos: Sigue ejemplos relacionados con la ciberseguridad para aplicar Python de forma que tengan sentido para las tareas de seguridad.

¿Por qué Python para la ciberseguridad?

Python es uno de los lenguajes más versátiles de la ciberseguridad y ofrece flexibilidad, simplicidad y un amplio ecosistema de bibliotecas perfecto para el análisis de datos, la automatización y la detección de amenazas. Ya sea que estés escaneando registros, analizando el tráfico de red o creando herramientas personalizadas, Python puede ayudarte a trabajar de forma más eficaz y lograr un impacto en tu función de seguridad.

¡Únete al curso hoy mismo!

Da tu primer paso en la programación de Python y comienza a desarrollar habilidades que respalden tu carrera en ciberseguridad. Al final de este curso, podrás usar Python con confianza para automatizar tareas, analizar datos y crear scripts centrados en la seguridad.

¡Inscríbete ahora y prepárate para aprovechar el poder de Python para la ciberseguridad!

Conoce a tu profesor(a)

Teacher Profile Image

Alexander O.

Web Developer & Cyber Security Expert

Profesor(a)


My passion is teaching people through online courses in a fun and entertaining manner.  I have been teaching online for about 3 years now and during this period, I have created over 25 different courses on different platforms including my own personal platform - The Web Monkey Academy.

What would you like to learn?

Would you like to learn how to build and manage your WordPress website? Would you like to learn advanced skills that will make you a true WordPress developer? Would you like to learn how you can establish a successful career as a web developer? Would you like to learn the basics of information and cyber security?

 If you want to do any of these things, just enroll in the course. I'm always improving my courses so that they stay up to dat... Ver perfil completo

Habilidades relacionadas

Desarrollo Lenguajes de programación Python
Level: Beginner

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Promoción del curso: ¿Te interesa tanto la ciberseguridad la programación Python Si la respuesta es sí, has venido al lugar correcto. Hola, mi nombre es Alex. Me gustaría darle la bienvenida a mi muy especial curso de programación Python para ciberseguridad Ahora bien, este es un curso que he diseñado específicamente tanto para profesionales como para entusiastas de la ciberseguridad A quienes les gustaría aprender sobre la programación Python, pero de una manera que sea relevante para la ciberseguridad Entonces, ¿qué significa exactamente un curso de Python para ciberseguridad? Simplemente quiero que todo el código y los programas y herramientas que vamos a construir juntos en este curso estarán relacionados con la ciberseguridad Ahora bien, si nunca antes habías escrito la tierra del código en tu vida, si eres completamente nuevo el mundo de la programación, no te preocupes. Te voy a enseñar todos los fundamentos de la programación. Y por supuesto, te enseñaré lo esencial de Python, como variables y tipos de datos, flujo de control y bucles, funciones, estructuras de datos, programación orientada a objetos, manejo de archivos, y mucho más. En el camino, también vamos a construir juntos diferentes tipos de herramientas de ciberseguridad, como una herramienta de verificación de seguridad de contraseña , una herramienta auditoría y una herramienta de cifrado Y finalmente, para el proyecto de clase, vamos a construir juntos un sistema de registro de usuarios. También debo mencionar que este curso vendrá con toneladas de ejercicios de codificación de pruebas para ponerte a prueba para desafiarte y asegurarte de que estás en el camino correcto Entonces, si estás buscando agregar la habilidad Python a tu currículum, tal vez estés tratando de obtener un ascenso o forjar una nueva trayectoria profesional, este curso, la programación Python para ciberseguridad va a ser perfecta para ti Entonces espero que hoy se registren para el curso, y espero verle en las sillas interiores. 2. Introducción a Python: Bienvenidos oficialmente a los fundamentos de Python para los profesionales de la ciberseguridad Mi nombre es Alex, y voy a ser tu instructor. Ahora el propósito de este video es darte la bienvenida oficialmente al curso y además darte algunos punteros sobre la mejor manera de tomarlo Entonces lo primero es lo primero, ¿de qué se trata exactamente este curso? ¿A qué me refiero con Python para la ciberseguridad? Bueno, todos los ejemplos, las pruebas, los retos, los ejercicios de codificación, todos ellos, bueno, mayoría de ellos se adaptarán proyectos relevantes de ciberseguridad Entonces, como ejemplo, estaremos escribiendo código sobre cómo cifrar contraseñas, hash contraseñas, crear cuentas de usuario, escanear puertos, cosas así Entonces, los tipos de proyectos o herramientas o tareas que normalmente realizarías en un entorno de ciberseguridad real, los vamos a hacer uso en este curso Y por eso es un curso de Python para ciberseguridad. Entonces, si eres un profesional de la ciberseguridad y quieres aprender un poco sobre Python que te permita crear algunos proyectos o herramientas relevantes de ciberseguridad, este curso va a ser perfecto para También debo mencionar que si nunca antes has escrito una línea de código en toda tu vida, vas a entrar aquí completamente ciego. No te preocupes, te tengo cubierto. Voy a empezar desde lo básico, y poco a poco vamos a trabajar nuestro camino hacia la redacción de algunos programas más sofisticados. lo que el curso se divide aproximadamente en unas diez secciones diferentes. Esto podría cambiar a medida que modifique el curso y tal vez agregue o elimine contenido. Todo depende. Pero vamos a empezar desde el principio, ¿de acuerdo? ¿Qué es la programación? Vamos a escribir líneas de código muy simples. Y luego al final del curso, vamos a crearnos un sistema de autenticación muy potente y también un verificador de contraseñas muy, muy potente. Ese va a ser el proyecto para este curso. Y te puedo garantizar que si te enfocas en el curso, haces todos los ejercicios, las pruebas, puedo garantizar que al final de este curso, tendrás los conocimientos requeridos para poder escribir algunos programas bastante buenos relacionados con la ciberseguridad Ahora, quiero mencionar una cosa sobre la programación en general, y esto es especialmente si nunca antes has escrito una línea de código en toda tu vida. Va a tomar tiempo, ¿de acuerdo? Va a tomar un tiempo antes de que seas verdaderamente competente y fluido en el trabajo con un lenguaje de programación Ahora, Python, en particular, es relativamente fácil en comparación con los otros lenguajes de programación que existen. Pero hasta Python lleva tiempo, ¿de acuerdo? Así que no te frustres si al principio, las primeras semanas, sigues luchando por escribir algunas líneas de código, estás cometiendo errores. Es sólo natural. Piense en ello como si estuviera tratando de aprender un lenguaje verbal real. A lo mejor estás tratando de aprender a hablar, no sé, griego o finlandés o sueco o lo que sea. No solo vas a recogerlo de forma automática y muy rápida, ¿verdad? Va a llevar tiempo. Podría tomar varios meses, tal vez incluso podría tomar hasta un año. Al principio, podrás decir cosas simples como Buenos días. Mi nombre es Alex. Pero entonces para construir una frase completa real, empezará a tomar tiempo, ¿verdad? Tendrás que averiguar, Bien, en este idioma, el adjetivo viene antes del pronombre o el sustantivo viene antes del verbo, ya sabes, todo ese tipo Lleva tiempo. Entonces, al principio, cometerás muchos errores. Podría llegar a ser frustrante, pero no te rindas, ¿de acuerdo? Te garantizo que si te enfocas, practicas tanto como puedas. Tú haces las pruebas y los retos que te he brindado en este curso. Te garantizo que algún día, vas a despertar y de repente darás cuenta de que aguanta un segundo, en realidad me estoy poniendo bastante bueno programando con Python. Así que colgando ahí, es sólo una parte del proceso. Toda la frustración desde el principio, es sólo una parte del proceso. Colgando ahí, y te prometo que serás recompensado. Ahora, algunas cosas más para mencionar muy rápido, vamos a estar trabajando con una plataforma en particular aquí llamada replet no te preocupes, no tienes que pagar por ello Es completamente gratuito. Tomaré sobre weblte un poco más tarde en videos posteriores Pero solo tenlo en mente. Si estás trabajando con un Mac o Linux o Windows, podrás tomar este curso. Y además, si te encuentras con algún reto o algo no está claro, siempre puedes contactarme. Estaré más que feliz de atenderte de cualquier manera que pueda. Así que una vez más, bienvenidos a los Fundamentos de Python para profesionales del cibersecurt Espero que este curso les resulte muy informativo y muy útil. Y es mi sincera esperanza y creo que para el final de este curso, habrás aprendido a programar con Python. Así que gracias una vez más por inscribirte. Y ahora comencemos. 3. Nota importante para trabajar con Python: Antes de comenzar el curso propiamente dicho, hay algo sobre lo que necesito llamar su atención. Esto es muy, muy importante. Cuando se trata de la aplicación que utilicé para crear este curso en particular, esa aplicación estaba repleta, ¿bien? Replt es esta plataforma donde prácticamente puedes escribir y trabajar con cualquier tipo de código desde cualquier lenguaje de programación Y claro, Python funciona muy, muy bien en replate Así que inicialmente utilicé replate para crear el curso. Entonces a lo largo de este curso, todo el código con el que voy a estar trabajando se escribirá en la plataforma replet La razón por la que elegí p fue porque cumplía tres criterios principales. En primer lugar, era de uso gratuito. En segundo lugar, es que es bastante fácil de usar. Y luego, tercero, es una plataforma bastante poderosa que puede ejecutar prácticamente cualquier tipo de código. Desafortunadamente, en los últimos meses, han realizado algunos cambios muy grandes en la plataforma de usuario. Y específicamente, lo han hecho porque querían incorporar IA, lo cual es comprensible. Por supuesto, estamos viviendo en la era de la IA, y todas estas plataformas, ya sabes, quieren parecer muy modernas y, ya sabes, lo siguiente mejor y una de las formas de hacerlo es simplemente incorporando IA, lo cual está bien. Pero el propósito de este curso es enseñarte los fundamentos y los fundamentos de Python Entonces aún no necesitamos ayuda de IA. La IA es fantástica una vez que ya aprendiste a trabajar con Python. Y luego, por supuesto, puedes usar la IA para atenderte. Pero como estamos aprendiendo Python por primera vez como un principiante completo, eso no va a funcionar para nosotros. Entonces lo que he hecho es que te voy a mostrar otras dos alternativas para ejecutar tu código Python en tu computadora. Ahora, de nuevo, no te preocupes, como dije antes, este curso, todo el código que escribo va a estar en plt, pero vas a estar escribiendo tu propio código ya sea en código Thonny o Visual Studio Es el código lo que importa, ¿de acuerdo? La plataforma donde estás escribiendo el código no es lo más importante, ¿de acuerdo? Hay tantas otras plataformas por ahí. Lo más importante es el código. Entonces en lugar de plt, bien, te voy a mostrar cómo trabajar con Thonny, que en realidad sería mi opción recomendada para ti porque es extremadamente fácil de instalar y es extremadamente fácil de También es gratis, y está disponible para Mac, para Linux para Windows. Entonces te mostraré cómo instalar y luego trabajar con Thonny Ahora bien, si por alguna razón, Thonny no funciona para ti, no te gusta Thonny te voy a dar una alternativa que por supuesto será Visual Studio Code, es mucho más potente que Thonny, pero también un poco más pero también Ahora, solo para hacértelo saber, para poder trabajar con Visual Studio Code, si quieres ir por este camino, vamos a tener que instalar Python primero antes de poder trabajar con Visual Studio Code. Si estás trabajando con Thonny, no necesitas instalar Python en tu computadora Otra vez, no te preocupes. Voy a guiarte a través de todo, ¿de acuerdo? En primer lugar, el siguiente video, te mostraré cómo instalar y trabajar con Thonny Y luego el siguiente video después de eso, será cómo puedes instalar y trabajar con Visual Studio Code, yo, por supuesto, también te mostraré cómo descargar e instalar Python en tu computadora. Entonces sí me disculpo por esta pequeña mezcla. Nuevamente, no tenía idea cuando creé este curso inicialmente. No tenía idea de que la gente repleta vamos a seguir adelante y renovar completamente la interfaz de usuario Entonces sí me disculpo por eso. Pero ojalá, que yo te dé alternativas, dos alternativas distintas lo van a suplir. Entonces, si tienes alguna duda o alguna inquietud, no dudes en comunicarte conmigo. Estaré más que feliz de atenderle. Puedes usar la función de mensajería en la plataforma donde estés tomando este curso, o también puedes comunicarte conmigo en Alex en labsyba.com Ese es mi correo electrónico. Puedes comunicarte conmigo y pedirme ayuda o preguntas, compartir tus inquietudes, cualquier cosa que quieras saber o con lo que necesites ayuda, pero más que feliz de atenderte. Por lo que gracias por su atención a este asunto. Y ahora, déjame mostrarte cómo descargar e instalar y trabajar con la aplicación Thonny 4. Cómo usar atún: Entonces déjame mostrarte cómo instalar y hacer uso de Thonny. Es muy posiblemente la interfaz de usuario más sencilla, y es perfecta, especialmente si eres nuevo en el mundo de Python. Entonces todo lo que necesitas hacer es ir a thorny.org, ¿verdad? Y luego aquí mismo, puedes descargar la versión para cualquier sistema abierto en el que estés trabajando. Tenemos para Windows, tenemos para Mac, Linux. Así que solo asegúrate de que estás instalando o descargando la versión correcta. Ya he descargado mío así que déjame venir aquí y voy a abrir la aplicación para que se ejecute ¿bien? Y voy a decir instalar solo para mí, y luego dar click en siguiente. Acepto el acuerdo, haga clic en siguiente, haga clic en siguiente. Podemos crear un icono de escritorio, dar clic en siguiente, Instalar. Entonces ahí lo tienes. Y así es simplemente como instalar Thonny en tu computadora. Ahora, déjame mostrarte exactamente cómo caminar con esta aplicación. Es muy, muy, muy fácil. Esperemos a que se instale. Bien, está instalado. Voy a dar click en terminar. Y ahora voy a seguir adelante y ejecutar el programa. Y, bien, entonces estoy en mi escritorio. Este es el atajo. Entonces voy a seguir adelante y correr a Thonny. Y aquí mismo, por supuesto, se puede cambiar el idioma, los ajustes iniciales, y así sucesivamente. Yo sólo me quedaré con esto tal como están. Da clic en Vamos. Y ahí lo tienes. Entonces esto de aquí es básicamente la interfaz para Thonny. De nuevo, es muy, muy, muy fácil. Ahora, solo como un ejemplo muy, muy rápido, déjame mostrarte cómo funcionaría esto. Voy a seguir adelante, bien, y escribir impreso entre paréntesis, y luego un programa muy, muy sencillo, hola mundo. Bien. Y ahora voy a ejecutar este código en particular haciendo clic en el botón Ejecutar aquí mismo o puedes presionar F cinco en tu teclado. Voy a hacer click ahí. Y luego aquí abajo, se puede ver que esta es la salida de mi código. Para que puedas, por supuesto, modificar la forma en que se ve la interfaz. Puedes arrastrar la ventana de shell un poco más arriba si quisieras. Y también puedes bajar aquí a las herramientas. Bien, puedes ir a opciones. Y entonces si quisieras, podrías ir al tema y a la fuente, y podrías cambiar el tema, ¿verdad? Entonces, personalmente, siempre me gusta ir con el tema oscuro. Pero claro, es totalmente subjetivo. Si prefieres el tema ligero, puedes quedarte con eso. Pero voy a ir con el tema oscuro. Y claro, también puedes cambiar el tamaño de fuente, la familia de fuentes de tu texto. Si lo prefieres, puedes hacerlo aquí mismo, y eso es todo. Entonces, si quería guardar este archivo en particular, bien, todo lo que tendré que hacer es hacer clic en el botón Guardar aquí mismo. Y entonces todo lo que tendría que hacer es simplemente escribir el nombre de este archivo, y voy a llamar a este ejemplo, ¿de acuerdo? Y eso es todo. Por lo que va a guardarlo automáticamente como un archivo Python. Y déjame guardar esto en mi escritorio. Y voy a seguir adelante ahora mismo, da clic en Guardar. Y ahí está la muestra en PY es ahora el archivo Python. Y claro, también podría crear un nuevo archivo simplemente haciendo clic en el botón escritor que dice Nuevo. Y luego ahí mismo, de nuevo, tengo una nueva ventana para el nuevo código, y eso es prácticamente todo. Entonces es una interfaz muy, muy sencilla para ejecutar código Python. Una pregunta que podrías tener aquí es, ¿es posible poner la ventana de concha en el lado derecho de la ventana principal? Desafortunadamente, a partir del momento en que grabé este video, no, no es posible. Entonces eso, yo diría que es probablemente el único inconveniente. Bien, pero en realidad no es un gran problema. Thonny otra vez, es sumamente fácil. Ejecutaré la gran mayoría del código Python, y no deberías tener ningún problema trabajar con esta aplicación en particular. Entonces así es más o menos cómo trabajar con la aplicación Thonny Gracias por ver. Te veré en la siguiente clase. 5. Cómo trabajar con el código visual de estudio: Mostrarte cómo puedes instalar el código de Visual Studio. Ahora, lo que pasa con Visual Studio Code es que para poder trabajar con él, en realidad necesitas instalar Python primero en tu computadora. Entonces primero lo primero, ve a python.org, y puedes ir por aquí para descargar y puedes encontrar la versión para Estoy en Windows, así que sólo voy a ir con el Python 3.140 Y voy a seguir adelante ahora mismo y simplemente guardar la aplicación. Está instalado. Entonces aquí mismo, voy a abrirlo y simplemente instalarlo. Ahora, muy, muy importante, ¿de acuerdo? Esta primera ventana de aquí, por favor marque estas dos casillas, ¿de acuerdo? Así que usa privilegios de administrador al instalar pi dot X. Y luego especialmente la ruta add python.x2 ¿Bien? Quieres marcar estas dos casillas, y ahora voy a hacer clic en Instalar ahora, clic en S, y eso es prácticamente todo lo que necesitas hacer. Al instalar Python en tu computadora. Sólo voy a esperar a que se instale esto. No debería tardar demasiado, y ahí está. Bien, entonces voy a dar click en Cerrar. Y ahora puedes pasar al código de Visual Studio en Visual studio.com Por aquí, encontrarás las diferentes versiones para Visual Studio Code. Tenemos para Windows, tenemos para Mac. Y claro, también tenemos para Linux también. Ahora, ya he descargado la aplicación Visual Studio Code, así que está aquí mismo. Entonces voy a seguir adelante ahora mismo e instalarlo. Entonces voy a aceptar el acuerdo. Haga clic en Siguiente y, por supuesto, cree un icono de escritorio. Marcaré esa casilla, haga clic en Siguiente, haga clic en Instalar. Y ahí está. Nuevamente, esto no debería tardar demasiado en instalarse normalmente solo unos segundos. Y ahí está, Bien, así que voy a seguir adelante ahora mismo, dar clic en Finalizar, y automáticamente, debería lanzarse aquí mismo. Bien, entonces esto podría ser lo primero que veas. Si ves alguna otra ventana, creo que en la mayoría de los casos, es porque ya he instalado Visual Studio Code antes. Normalmente, cuando lo instalas por primera vez, deberías verlo como una ventana de IA o algo así. Sólo ciérralo. Si tienes alguna otra ventana aquí, simplemente puedes dar click en Ventana Don o Eito, ¿verdad Esto es simplemente lo que estamos buscando. Estamos buscando, como, una ventana en blanco aquí mismo. ¿Bien? Este es el punto de partida. Entonces lo primero que quieres hacer es que quieres ir aquí a tus extensiones, y quieres instalar las extensiones de Python va a estar aquí mismo, Python. Entonces voy a seguir adelante ahora mismo, da clic en Instalar. Y ahí está. Entonces se va a instalar. No debería tardar demasiado, solo unos segundos, y ahí está. Por lo que se ha instalado con éxito. De nuevo, voy a seguir adelante ahora mismo, cerrar esta ventana, ¿no? Y ahora, si quería ejecutar un código Python, todo lo que quiero hacer es ir aquí a File. Bien, puedo dar click en Nuevo Archivo. Y como acabamos de instalar la extensión Python, ahora tenemos el enlace del archivo Python aquí mismo. Así que voy a hacer click ahí, y ahora mira esto, ¿de acuerdo? Voy a escribir la impresión de código muy simple. Hola mundo. ¿Bien? Ahora voy a seguir adelante ahora mismo y dar clic en este botón para ejecutar el archivo. No obstante, debido a que es la primera vez que ejecutamos este archivo, aún no lo hemos guardado. Tenemos que guardarlo antes que nada, ¿de acuerdo? Tenemos que darle un nombre. Entonces voy a llamar a esto simplemente prueba, ¿de acuerdo? Prueba, haz clic en Guardar. Y ahora puedes ver que es test dot PY. Bien, así que aquí abajo, ¿verdad? Esta es la terminal y es posible que tengas algún tipo de mensaje de error diciéndote que, Oh, no podemos abrir este archivo, ya sabes, lo que sea. Está bien. Simplemente vuelva de nuevo y haga clic en el archivo Ejecutar Python. Y ahora se puede ver que en realidad está funcionando. Se está ejecutando. Aquí puedes ver hola mundo. De hecho, déjame seguir adelante, agregar otra línea sólo para demostrarlo. Entonces voy a imprimir hola y voy a decir, me gusta el código VS. Bien, sigamos adelante, volvamos a ejecutar el programa. Y ahora aquí, se puede ver que dice hola mundo, me gusta el código VS. Entonces aquí arriba, tendrás tu ventana principal donde vas a escribir tu código, tu interfaz de editor, y luego aquí abajo será tu terminal. Sin embargo, podemos modificar la forma en que se ve la interfaz. Una cosa que me gusta hacer normalmente, bien, sería ir por aquí, que podamos alternar la barra lateral primaria. Voy a apagarlo, quitar la barra lateral primaria, así que ahora tenemos la interfaz de usuario ocupando toda la ventana. No obstante, justo aquí abajo terminal, voy a hacer click derecho y voy a decir muévete a, y luego voy a moverlo a la barra lateral secundaria. Esta es solo mi propia preferencia personal. me gusta tener la terminal a la derecha de mi ventana principal, ¿de acuerdo? No obstante, claro, si prefieres tenerlo debajo de tu ventana principal, eso está perfectamente bien. Esto es totalmente subjetivo. Pero así es como me gusta. Entonces ahí tienes. Así es como puedes ejecutar tu código usando VS Studio. Nuevamente, tendrás opciones aquí si quisieras. Puedes ir aquí a Archivo, crear un nuevo archivo. Puedes abrir cualquier archivo Python que hayas guardado. Puedes bajar aquí a las preferencias. Puedes ir aquí a temas, y luego por supuesto, puedes cambiar el tema del color. Puedes ir con Kimb oscuro o, ya sabes, cambiar la apariencia Depende completamente de ti. Pero así es como puedes trabajar con el VS en la aplicación Visual Studio Code. Es un poco más complicado que Thonny, pero es, claro, más potente Entonces, depende completamente de ti cualquiera de estas dos aplicaciones que prefieras, puedes elegir la que quieras trabajar con la que quieras trabajar Así que gracias por mirar, y te veo en la próxima clase. 6. Hola mundo: Bien, entonces ahora que tenemos a Thonny todo configurado, o tal vez estés caminando con Visual Studio Code. No importa. Es hora de que escribamos nuestro primer programa. Y ese programa va a ser un programa muy sencillo que imprimirá las palabras hola mundo. ¿Bien? Así que mira esto, ¿de acuerdo? Voy a decir impresión, espacio y luego corchetes entre comillas dobles. Hola mundo. Bien. Y luego voy a dar click en el botón Ejecutar. Y ahí está Hello World. Muy, muy primer programa con Python. Ahora, quiero desglosar esto por ti. Verás, en Python o, hecho, en cualquier lenguaje de programación, siempre vas a tener funciones incorporadas que harán algo por ti En este caso, print es una función incorporada que ya ha sido codificada en Python Entonces cuando usas esa función print, Python sabe que, oh, bien, quieres sacar algo, ¿verdad? Entonces eso es lo que hace Print. Y ahora la cosa es que, siempre que quieras imprimir texto, siempre necesitas tenerlos entre comillas dobles. Bueno, en realidad, hay ciertos momentos en los que puede que no necesariamente necesites citas dobles. Ya llegaremos a eso. No te preocupes. Pero en la mayoría de los casos , para ir a lo seguro, se quiere envolver el texto entre comillas dobles. Ahora bien, si tuviera que quitar las comillas y yo iba a ejecutar el programa, ahora ve que terminamos teniendo un problema. Es un error de sintaxis porque en este momento, Python no entiende lo que está pasando. ¿Dónde están las comillas dobles? Y además, necesitas tener tu texto entre corchetes. Entonces, si tuviera que añadir las comillas dobles aquí, sin los corchetes, intentemos volver a ejecutar el programa y ver qué pasa. Y entonces, de nuevo, ya se puede ver, sigue diciendo que le falta el paréntesis Entonces a la hora de ejecutar ciertos tipos de funciones, hay ciertas reglas que debes seguir. Entonces, en el caso de imprimir texto, quieres tenerlos entre paréntesis y entre comillas dobles Entonces una vez más, voy a ejecutar el programa, y ahí está. Hola mundo está funcionando. Voy a seguir adelante ahora mismo y cerrar la asistente. Y ahí está. Bien. Sigamos adelante. Hagamos esto un poco más interesante. Y si quisiera imprimir hola mundo, digamos, cinco veces, ¿verdad? Ahora, obviamente, podría simplemente copiar, ¿de acuerdo? Nuevo texto de línea, pegar, pegar, pegar, cinco veces, ¿de acuerdo? Ahora bien, si yo estuviera en el programa, ahí tienes. Hola mundo, hola mundo, hola mundo, hola mundo, hola mundo. Pero mira esto. intentar imprimir dos veces en su lugar. Y en vez de tenerlos en diferentes líneas, déjame ponerlos exactamente en la misma línea. Así que tenemos impreso Hello World, print Hello World, run, y ahora tenemos un problema. El problema que tenemos aquí es que, Oye, ¿qué está pasando? Python no entiende cuando tienes múltiples funciones en la misma línea exacta. Y esto es algo universal con todos los lenguajes de programación, ¿de acuerdo? Siempre que estés llamando a múltiples funciones, quieres tenerlas en líneas separadas. Esta es la forma ideal de escribir código. Porque si lo pienso bien, si inicias o si el programa te permitió el idioma te permitió ejecutar múltiples funciones exactamente en las mismas líneas y todo eso. Tu código podría terminar volviéndose muy, muy difícil de leer, sobre todo por otros desarrolladores. Entonces cuando lo tienes en líneas separadas, se vuelve más limpio, se vuelve más presentable Y lo mejor de todo, tu lenguaje de programación, en este caso, Python va a entender qué es lo que están tratando de hacer. Bien, hay otra cosa que debes tener en cuenta. Ahora, voy a hacer esto un poco complicado. Lo que voy a hacer aquí es que voy a crear algo conocido como variable, ¿bien? En este caso, voy a llamar a mi texto variable. Igual. Y ahora, en este caso, hola mundo. Entonces el texto es una variable. Una variable. Se puede pensar en una variable como básicamente algo que almacenará un determinado tipo de valor, ¿de acuerdo? No siempre tiene que ser texto, podrían ser números. Podría ser cualquier cosa. En este caso, ahora mismo, es un texto. Es un trozo de texto que dice hola mundo. Entonces el texto variable tiene el valor hola mundo. Ahora bien, si tuviera que entrar aquí y le dijera, imprima entre paréntesis, texto ¿Qué crees que va a pasar? Bueno, va a decir hola mundo, porque hemos asignado la variable text para tener un valor de hello world. Pero fíjate, no lo teníamos entre comillas dobles. Eso es porque le estamos diciendo a Python que, Hey, Python, queremos que imprima el valor de la variable text. Si vine aquí y asigné las comillas dobles al texto en su lugar, ¿qué cree que va a imprimir? Bueno, va a imprimir texto. ¿Bien? Así que siempre que quieras imprimir los valores de tus variables, no necesitas encapsular la variable entre comillas dobles Entonces voy a seguir adelante. Ahora mismo, quita las comillas, vuelve a ejecutar el programa y déjalo ir Hola mundo. Entonces, obviamente, vamos a profundizar mucho en estas funciones y variables y cosas así Pero solo quería darte un fragmento muy pequeño de qué esperar y, por supuesto, permitirte escribir tu primer programa usando Python Entonces a medida que avancemos en el curso, comenzarás a aprender un poco más sobre las reglas de la programación Python, cuándo debes encapsular tu texto entre comillas dobles, cuándo debes usar comillas y así sucesivamente Vamos a llegar mucho, mucho más profundo. Pero eso es todo por escribir nuestro primer programa. Gracias por ver. Te veré en la siguiente clase. 7. Introducción a la sección de tipos de datos: Bienvenido oficialmente a la primera sección principal del curso real de Python en sí. Y aquí dentro, vamos a estar hablando de variables y tipos de datos. Escucha, te garantizo que independientemente del lenguaje de programación que intentes aprender, esta normalmente va a ser la primera sección porque en el corazón de cada programa, no importa lo básico o avanzado que sea, va a girar en torno a algún dato, ya sean cadenas o enteros, vas a tener datos involucrados en cada Entonces en esta sección, vamos a hablar de los diferentes tipos de datos que existen. También vamos a hablar de las operaciones de bullying. Entonces digamos, por ejemplo, querías decir que algo no es cierto o algo es falso, cosas así. Y luego, claro, los operadores aritméticos, ¿de acuerdo? Cómo sumar, restar, multiplicar, vide en Python, matemáticas básicas, vamos a aprender todo eso en esta sección Entonces, claro, al final de la sección, va a haber un ejercicio de codificación que quiero que intentes. Dáselo a todos. No te preocupes. Si no puedes resolverlo, yo también te proporcionaré la solución. Enhorabuena. Estamos a punto de comenzar nuestro viaje al mundo de Python. Empecemos. 8. Trabajar con cuerdas: Bueno, bienvenido de nuevo. Ahora, dediquemos un poco más de tiempo a hablar de cuerdas. Hasta ahora, hemos trabajado con la cadena hello world, y sí dije que cada vez que estás envolviendo tu texto, normalmente quieres usar comillas dobles. Sin embargo, eso no siempre es cierto. El valor predeterminado es envolver su texto con comillas dobles. Sin embargo, en realidad puedes escapar usando comillas simples. Así que déjame ir por aquí ahora mismo y editar eso. Estoy usando comillas simples. Presiono Run, y puedes ver que funciona perfectamente bien. Por lo que no siempre hay que usar comillas dobles. La pregunta natural que podrías tener aquí es, Bien, entonces, ¿cuándo usamos single? ¿Cuándo usamos el doble? ¿Realmente importa? En la mayoría de los casos, realmente se reduce a tu preferencia personal, ya sea un usuario de una sola cotización o un usuario de doble cotización. Por defecto, la mayoría de los programadores tienden a ir con las citas dobles Y hay casos en los que en realidad podrías incluso usar ambos en la misma cadena. A modo de ejemplo, ¿y si quisiera decir algo como él dijo, hola, verdad? Entonces déjame ir ahora mismo y decir que dijo Kremer Y voy a saludar. ¿Cómo podríamos imprimir esto con éxito? Porque si hicimos clic en Ejecutar ahora mismo, nos va a dar un mensaje de error, ¿de acuerdo? Tenemos que envolver estos textos, estas letras entre comillas. Pero, ¿cómo lo hacemos? Bueno, podríamos hacer esto. Podría ir por aquí ahora mismo, agregar un solo arco de cotización. Oh, lo siento, tiene que estar adentro. Entonces la cita única es primero, ¿de acuerdo? Y ahora para las palabras reales que dijo hola, voy a usar las comillas dobles aquí para envolver la palabra exacta hola misma. Y entonces siempre que en realidad, esto es bastante común en los lenguajes de programación, ¿de acuerdo? Siempre que tengas una comilla de apertura, también quieres tener una comilla de cierre. Entonces voy a agregar las comillas simples ahí mismo. Y ahora si hago clic en Ejecutar, puedes ver ahora mismo que realmente funciona. Podríamos hacer exactamente lo contrario. Podría comenzar con comillas dobles, ¿de acuerdo? Y entonces voy a venir aquí ahora mismo, rap hola entre comillas simples y luego al cierre de comillas dobles, corre, y puedes ver que funciona perfectamente bien. Sin embargo, ¿y si quisiera cuerdas muy largas, verdad? Entonces sí tengo a mi Ipsum generto aquí. Así que déjame agarrar este primer párrafo de aquí, ¿de acuerdo? Copia, ven aquí. Ahora, en realidad podría envolver todo tan grande como está dentro del máximo de doble cotización, haga clic en Ejecutar, y va a funcionar perfectamente bien. Pero, ¿y si realmente quisiera crear algún espacio, y así, por ejemplo, quería tener algo de espacio aquí Vengo aquí ahora mismo y agrego algo de espacio, ¿verdad? Ahora es todo tipo de desorganizado. Hago clic en Ejecutar, y ahora vamos a tener un mensaje de flecha. Ya no funciona porque Python no puede entender el espacio entre las líneas de texto. Entonces aquí es donde entrarán las comillas triples. Así que mira esto, bien. Voy a añadir uno, dos, tres. Bien. Vaya, perdón por eso. Eso es tres. Bien. Y claro, voy a venir aquí ahora mismo y añadir las tres comillas de cierre. Y ahora si hago clic en Ejecutar, y ahí tienes, puedes ver que realmente funciona. Por lo tanto, hay ciertos casos en los que es posible que desee usar comillas triples si tiene un tipo de espaciado muy específico. También se suele utilizar para, como, documentación, escribir líneas de código, cosas así. Ahí es donde usarías la triple cotización. Ahora, también podríamos combinar cuerdas. Todo bien. Entonces, como ejemplo, déjame mostrarte rápidamente, déjame crear una nueva variable aquí y decir X, ¿de acuerdo? Igual, y luego entre comillas dobles, voy a saludar. ¿Bien? Y entonces podría crear una segunda variable Y es igual a mundo. Bien. Y ahora, si quisiera combinar ambos, podría decir imprimir entre paréntesis, muy simple, X más Y. Ahora, si hago clic en Ejecutar, ahí tienes Hola mundo. Pero si quisiéramos agregar el espacio entre hola y mundo, todo lo que puedo hacer es o bien puedo agregar el espacio en Hola aquí mismo. Entonces he agregado el espacio después de la O, haga clic en Ejecutar. Tienes Hello World, o yo podría hacer lo contrario y simplemente agregar un espacio al inicio de W, clic en Ejecutar, y ahí tienes, tienes exactamente el mismo resultado. Ahora, hagamos esto un poco más sofisticado. Este programa sólo un poco más sofisticado. Voy a presentarles una nueva función llamada input. Hasta el momento, hemos estado trabajando con la impresión. Ahora déjenme presentarles aportes. Entonces, la entrada es básicamente una función que le pedirá al usuario que proporcione algo, ¿de acuerdo? Entonces voy a decir entrada. Y luego entre paréntesis, voy a decir algo, por favor. Bien. Entonces si corro oh, perdón por eso. Si ejecuto el comando, puedes decir ahora mismo dices algo, por favor, y ahora si digo, Hola, mi nombre es Alex y presiono Enter, no pasa nada, ¿bien? Porque nuestro programa, lo único que hace es pedirle al usuario que diga algo, y eso es todo. No va a hacer nada con lo que el usuario realmente ha dicho. Entonces, para que esto sea un poco más avanzado, voy a volver aquí. Bien. Eliminemos esto vamos a crear una nueva variable. Diré respuesta del usuario. Este va a ser el nombre de mi variable. Y por cierto, permítanme decir algo muy rápido. Es buena etiqueta, buena etiqueta de programación. Siempre que estés creando nombres para tus variables o tus funciones y estés combinando dos palabras juntas, en este caso, ahora mismo, estoy combinando usuario y respuesta. La segunda palabra, la primera letra normalmente debe estar en mayúsculas. Por eso la R de respuesta aquí está en la capital. Sólo digo, ¿de acuerdo? Así que solo tenlo en mente. Entonces usa una respuesta igual, ¿de acuerdo? Y voy a decir entrada. Y ahora entre paréntesis, voy a decir algo Por favor. ¿Bien? Sin embargo, voy a bajar aquí. Ahora voy a usar la función de impresión entre paréntesis, voy a decir respuesta del usuario. Eso es. Bastante sencillo. Voy a seguir adelante ahora mismo, ejecutar el comando. Dice, di algo por favor, así que voy a decir, mi nombre es Alex. Presiona Enter, y ahí vas. Ahora está diciendo, mi nombre es Alex. Así que con éxito te introdujo una nueva función, que son entradas que le pedirán al usuario que proporcione algo. Hemos hablado sobre cómo usar el máximo de cotización simple, el máximo de comillas dobles, así como las comillas triples. También te he mostrado cómo podemos combinar cadenas creando múltiples variables y simplemente usando el operador plus para combinarlas. Así que poco a poco, poco a poco, estamos mejorando cada vez mejor en caminar con Python y cuerdas. Así que gracias por ver el video, y claro, los veo en la próxima clase. 9. Otros tipos de variables: Ahora echemos un vistazo a una forma diferente de tipo de datos. Hasta ahora, hemos estado trabajando con cuerdas, ¿verdad? Pero ahora echemos un vistazo a los puntos flotantes y enteros, también conocidos simplemente como números. Todo bien. Así que sigamos adelante y eliminemos este programa, y permítanme antes que nada, crear una variable X igual a cuatro. ¿Bien? Y entonces Y es igual, digamos, 6.0. Ahora bien, la diferencia obvia entre estos dos es que X no tiene ningún punto decimal. ¿Por qué Y tiene el 6.0? ¿Todo bien? De hecho, permítame hacer esto un poco más razonable. Hagámoslo 6.3, solo como ejemplo, ¿no? Entonces y, en este caso, sería un punto flotante porque sí tiene un punto decimal, mientras que cuatro será el entero. Entonces si seguí adelante ahora mismo e imprimí X más Y y ejecuto mi programa. Ya ves que vamos a conseguir el número 10.3. Bastante sencillo, correcto. Sin embargo, podríamos hacer ciertas cosas como decir, por ejemplo, si quisieras convertir 10.3 siendo un número flotante, si quisieras convertirlo a un entero, simplemente podríamos usar una nueva función llamada la función integer Entonces lo que voy a hacer aquí mismo está dentro de este primer soporte, voy a abrir otro soporte y agregar INT. Bien, entonces INT lo siento. Perdón por eso. I NT. Bien, entonces INT aquí es una función que significa entero, ¿verdad? Y claro, ya que hemos abierto la función integer, vamos a tener que cerrarla también. Entonces déjame agregar el corchete de cierre. Y ahora, si tuviera que ejecutar mi programa, puede ver que ha convertido 10.3 a diez debido a la función INT integer Esta fue la primera vez que añadimos una función dentro de otra función. Primero, tenemos la función print, y luego dentro de la función print, tenemos la función integer. Entonces esto es una cosa que debes tener cuenta cuando se trata de programación Python. Puedes tener una función dentro de otra función, y de hecho, puedes tener tres, cuatro funciones en lugar de una a otra, siempre y cuando la jerarquía sea correcta. En este caso, ahora mismo, no puedo hacer que la función integer entre primero y luego imprima. De hecho, ¿sabes qué? Vamos a probarlo, ¿de acuerdo? ¿Por qué no? Voy a seguir adelante ahora mismo. Imprimir, ¿bien? Y luego INT, bien, ¿qué va a pasar? ¿Qué va a pasar? Voy a hacer click en Ejecutar. Y ahí tienes. Entonces, aunque un poco bien, realmente no funcionó. Es decir, sí obtuvimos la X más Y. Obtuvimos la respuesta correcta para ser 10.3 Pero desafortunadamente, no convirtió los resultados a un entero real. Entonces Python básicamente ignoró la primera parte, que es la función integer y luego simplemente siguió adelante y dijo: Bien, imprime X más Y. Y luego, claro, nos dijo que, Oye, hay algún tipo de problema con la sintaxis. Así que hay que tener cuidado cada vez que intentas agregar funciones dentro de otra función, tiene que haber una jerarquía y tiene que ser correcta. Así que vamos a revertir esa carrera otra vez, y ahí tienes. Así mismo, si quisiera convertir los resultados a un número flotante, también podría hacerlo. Entonces por ejemplo, bien, si cambio la Y aquí a digamos cinco, ¿verdad? Pero en vez de nueve, que sería la respuesta obvia aquí, yo quería que fuera 9.0. Voy a cambiar la función entera aquí para flotar. Entonces esto es lo contrario, ¿verdad? Entonces mira esto. Voy a dar click en Ejecutar, y ahí tienes. Ahora es 9.0. Sabes, es muy probable que no necesites usar la función integer o float en tus programas. Todo depende del tipo de programas que vayas a crear. Pero sin embargo, es importante entender estos conceptos que puedes agregar. Puedes convertir un tipo de datos a otro, y que también puedes tener una función dentro de otra. Así que gracias por ver. Te veré en la siguiente clase. 10. Operadores booleanos actualizados: Un tipo más de tipo de datos que debes conocer serán las operaciones Bian o los valores booleanos Normalmente, van a ser dos de ellos. O tienes verdadero o falso, y dependerá en gran medida del resultado de ciertos tipos de operaciones. Ahora, como ejemplo, por aquí, tengo la variable X es igual a cinco, la variable Y es igual a diez. Ahora, tengo mi primera función de impresión aquí que dice que X es igual a Y. El segundo es X es menor que Y. Entonces con bollanes, o tienes verdadero o falso Ahora bien, ¿cuál crees que sería la respuesta para la primera impresión? Bueno, la respuesta obviamente sería falsa porque cinco no es igual a diez, mientras que la segunda debería ser cierta porque X es, hecho, menor que Y. Así que ahora si sigo adelante y ejecuto este programa, ahora se puede ver que tenemos falso y verdadero. Estos son todos a los que nos referimos como los valores de Bollan o los operadores de Bollan, y normalmente los usamos cada vez que intentamos crear bucles o declaraciones condicionales No te preocupes. Vamos a hablar de esos en la siguiente sección. Pero normalmente, es posible que queramos escribir un programa que revise para ver si algo ha pasado, y luego si ha sucedido, es decir, si es verdad, entonces hacer algo. O también podemos decir, si esto no ha sucedido, por lo tanto, si es falso, entonces haz otra cosa. Entonces vamos a estar haciendo uso de operadores y valores bullan un poco más tarde, pero lo que pasa los valores y operaciones booleanos es que trabajan con los operadores de comparación como tus iguales a menos de lo que es igual a, y Pero también tenemos lo que llamamos los operadores lógicos. Los operadores lógicos serían cosas como N o no. Entonces, como ejemplo, permítame darle otro programa aquí. Permítanme ante todo, decir A es igual a verdad. ¿Bien? Y entonces B es igual a falso. Por cierto, tenga en cuenta que lo verdadero y lo falso aquí no son cadenas. Y no son cadenas porque se puede ver que con verdad, empieza con una T. mayúscula Y con lo falso comienza con la F mayúscula Así que Python automáticamente sabe eso, Bien, aquí estás tratando con lingotes Entonces si quería escribir aquí una función de impresión que diga algo así como, digamos, A y B, déjame escribir otra, imprimir. Digamos A o B, y después la última impresión voy a decir digamos nota A. ¿Cuáles crees que serán las respuestas para los tres? Por lo general, siempre que esté tratando con los operadores lógicos y esté comparando dos o más valores, todos ellos tendrán que ser ciertos cada vez que esté usando la declaración and. Si uno de ellos es falso, entonces la respuesta será falsa, ¿de acuerdo? Lo contrario es con. Entonces, si estás diciendo verdadero o falso, va a ser verdad. Es verdad y falsa, la respuesta será falsa. Y entonces obviamente para el último aquí, no A será falso porque no A significa lo contrario de verdadero opuesto de verdadero es falso. Entonces, si ejecuto el programa ahora mismo, verás una vez más que A y B verdadero y falso siempre serán falsos, mientras que verdadero o falso serán verdaderos mientras que no A será falso. Entonces, una vez más, los operadores y valores de Bollin, también trabajan con operadores lógicos, como el tuyo o no Y, por supuesto, sus operadores de comparación como sus iguales a no es igual a menor que, mayor que y así sucesivamente. Entonces vamos a estar trabajando con operadores booleanos medida que avancemos en el curso. Gracias por ver. Te veré en la siguiente clase. 11. Operadores aritméticos actualizados: Hablemos de algunos operadores más y comenzando con las operaciones aritméticas Y esto es solo, ya sabes, las matemáticas o matemáticas básicas que aprendimos cuando éramos niños, ¿verdad? Entonces tienes, ya sabes, uno por uno, dos, dos, tres, más uno, diez, menos siete, ese tipo de cosas, ¿verdad? Entonces, lo que he hecho aquí es que he asignado el valor de diez a variable A y el valor de tres a la variable B. Y he escrito varias operaciones aritméticas aquí Tenemos A más B, A menos B, A por B, A dividido por B, A, módulo B, que simplemente devolverá el resto cuando dividamos A por B, y entonces el último aquí va a ser un B exponencial, que elevará el valor de A por el poder de B. Entonces, ¿cuáles serán los resultados aquí Déjame ejecutar el programa, y claro, diez más tres son 13, diez menos tres son siete, diez por tres son 30, 10/3 serán 3.33, y luego diez pérdidas modelo tres serán uno Y claro, diez por diez por diez serán iguales a 8 mil, ¿verdad? Bien, entonces espero que obviamente supieras las respuestas a todas estas operaciones. Pero vayamos más allá. Voy a quitar esto, ¿de acuerdo? Y sí tengo algunas operaciones más aquí. Y el primero aquí es lo que llamamos un operador de asignación. Se puede ver ahí mismo, dice, más iguales, ¿verdad? Déjame agregar estas nuevas líneas, y ahí tienes. Bien, entonces tenemos más iguales. Lo que esto simplemente significa es que vamos a decir X es igual a X más cinco. Básicamente es lo mismo. Entonces X más igual a cinco es exactamente lo mismo que decir X es igual a X más cinco. Esta es solo una forma breve de escribir esto. Así que permítanme seguir adelante y quitar esto. Entonces, ¿cuál crees que sería la respuesta aquí? La respuesta obviamente aquí va a ser 15 porque diez más cinco equivale a 15. Ahora, puedes hacer lo contrario, ¿de acuerdo? Se puede decir menos y luego es igual. La respuesta aquí obviamente sería cinco porque diez menos cinco serán cinco. Y tienes otras , claro, como la a multiplicación, que nos dará un 50 Y entonces también tenemos la división, que nos va a dar dos, dos puntos oh. Entonces estos son lo que llamamos los operadores de asignación. Ahora, quiero llamar su atención sobre una cosa más, y esto es lo que llamamos la precedencia del operador Déjame antes que nada, quitar el código y déjame arrastrar esto a la parte superior e imprimir en una nueva línea. Déjame copiar este comando y venir aquí y luego imprimir. Bien, así que échale un vistazo a esto. Bien, tenemos dos expresiones diferentes, ¿de acuerdo? El primero de aquí dice, dos más tres por cuatro. Bueno, el segundo aquí es que tenemos un soporte dos más tres y luego por cuatro. ¿Cuáles crees que van a ser los resultados de ambas expresiones ? Nuevamente, esto podría recordarte las matemáticas que hiciste en tus días de jardín de infantes o primaria. Pero siempre encuentro esta cosa bastante fascinante porque aquí, vamos a conseguir dos resultados diferentes. Para que puedas pausar el video e intentar adivinar cuáles serían los resultados de ambas expresiones. Si tienes tus resultados, sigamos ahora mismo y corramos. Y el primero aquí será 14 mientras que el segundo será 20 ¿por qué? Porque en la primera expresión aquí, tenemos dos operadores. Tenemos el operador aritmético plus, y luego tenemos la multiplicación Python hará la multiplicación primero antes de la adición Entonces tres por cuatro va a ser 12, 12 más dos, va a ser igual a 14. Sin embargo, por aquí en la segunda expresión, realidad va a hacer la adición primero porque están dentro de paréntesis. Por eso. Entonces a menos que me equivoque, normalmente, es que va a tener el paréntesis estará en lo más alto de los precedentes Si no tienes el paréntesis, comprobará la exponenciación Si no hay ninguna exponenciación entonces irá a multiplicación, irá Iré a modulos, suma, y luego finalmente resta Y luego en una expresión muy compleja, si tienes operadores de comparación, esos vendrán a continuación, y luego finalmente operadores lógicos. Pero no hay necesidad de ir más allá que eso. Por aquí, simplemente tenemos dos operadores principales. Tenemos tres. Tenemos el paréntesis, que por supuesto va a tener precedencia sobre la Entonces dos más tres es cinco, cinco multiplicado por cuatro equivale a 20. Entonces, una vez más, esto es lo que llamamos la precedencia del operador Nuevamente, para ser honestos, en realidad no vamos a estar trabajando con estos en este curso, pero sin embargo, esto es algo de lo que debes estar al tanto. Gracias por ver. Te veré en la siguiente clase. 12. Introducción al trabajo con la sección de cuerdas: Bienvenido a la siguiente sección donde ahora nos vamos a centrar específicamente en el tipo de datos de cadenas. Sé que antes ya hablamos de cuerdas. No obstante, necesitamos profundizar aún más en este tema en particular y ¿por qué? Bueno, eso es porque la gran mayoría de las veces el tipo de datos con el que trabajarás van a ser cadenas. Sí, trabajarás con enteros y otros tipos de datos, pero las cadenas normalmente serán aproximadamente del 80 al 90% de los tipos de datos con los que trabajas Entonces en esta sección, vamos a ahondar mucho más. Te voy a mostrar cómo puedes manipular las cuerdas. Entonces digamos, por ejemplo, tienes dos piezas de cuerda, quieres extraer ciertas letras de la cadena. Quieres extraer letras de esa otra cadena, unirlas, cosas así. Aprenderás a hacer esas cosas. Vas a aprender cómo puedes convertir cadenas enteras a mayúsculas o minúsculas, cómo puedes cortarlas y hacer tantas otras cosas. Entonces creo que vas a disfrutar de esta sección. Y también, al igual que con la primera sección, al final de esta sección, también va a haber un ejercicio de codificación. Entonces, por favor, intente el ejercicio de codificación. Ojalá, lo puedas hacer con éxito. Pero si no puedes, te voy a proporcionar la solución también para que puedas comparar tu código con mi código. Entonces, sin perder más tiempo, comencemos. 13. Manipulación básica de cuerdas: Ya está familiarizado con las diferentes formas de imprimir sus variables de cadena. Lo que tengo en mi pantalla aquí mismo, creé la variable nombre de usuario y le asigné el valor de cyber como cadena, y luego simplemente dije imprimir nombre de usuario. Eso por supuesto resultó en la impresión cibernética muy, muy simple, muy básica. Y ahora desde la línea cuatro, asigné exactamente el mismo valor cyber a la variable nombre de usuario. Pero fíjate que en la línea cinco y seis, demuestro dos formas distintas de imprimir la variable. Podría haber dicho, bienvenido al mundo de la programación y luego coma y luego el nombre de la variable, que es, por supuesto, nombre de usuario, cyber, y la salida es bienvenida al mundo de la programación, cyber Y luego en la línea seis, en lugar de usar el signo de coma, uso el símbolo más, y esto básicamente es lo que llamamos concatenación cada vez que estás usando el símbolo más, y luego tienes exactamente la misma salida No obstante, observe que hay una ligera diferencia en el espaciado. Con el símbolo de coma, tiendes a tener un poco más de espacio entre tu cadena y luego el nombre real de tu variable Sin embargo, ambos métodos funcionan bastante bien. Todo es cuestión de elección. Sin embargo, permítame mostrarle algunas otras formas básicas de manipular su cuerda Entonces digamos, por ejemplo, quería imprimir cyber diez veces, ¿verdad? En lugar de que yo creara usando name cyber, usando name cyber, usando name cyber diez veces, lo que simplemente podría hacer aquí mismo es que podría agregar el símbolo astérico y luego solo decir diez veces Y entonces todo lo que tengo que hacer ahora mismo es simplemente imprimir el nombre de usuario. Ahora si ejecuto el programa, se puede ver que tenemos ciber ciber ciber ciber ciber ciber diez veces. Y si quiero un espacio entre mis palabras, solo puedo agregar un espacio entre la letra R y el código de cierre. Y si vuelvo a ejecutar el programa, entonces te vas, tenemos ciber cyber cyber. Entonces esto es lo que llamamos repetición, ¿verdad? Otra función que quería hacerle saber con respecto a las cadenas es la longitud de una cadena. Podemos determinar qué tan larga es una cadena. Básicamente, en otras palabras, podemos determinar el número de caracteres en una cadena. Entonces por ejemplo, por aquí, si quería averiguar cuántos personajes había en el cyber, todo lo que tengo que hacer es venir aquí. Después de la función print, puedo introducir otra función llamada la función length, que es, por supuesto, LN, y luego tendré que agregar mi cierre, romperla por ahí. Y ahora, si ejecuto el programa, puedes adivinar cuál va a ser el valor? El valor va a ser cinco porque cyber está conformado por cinco caracteres, cinco letras. Ahora, tal vez te estés preguntando, Bien, todo esto está bien, pero ¿cómo es esto relevante? ¿Cómo aplicamos esto en el mundo de la ciberseguridad específicamente Estoy bastante seguro de que debes haber visto en sitios web antes donde te piden que inicies sesión. Empiezas a escribir tu contraseña, pero luego no ves los caracteres reales. En cambio, es posible que veas el símbolo de guión o más comúnmente el símbolo astérico en su lugar Podemos usar el conocimiento que hemos adquirido hasta ahora para crear un escenario similar. Así que mira esto, ¿de acuerdo? Voy a crear una nueva variable ahora mismo y llamarla contraseña. Y ahora agreguemos la contraseña real. Voy a decir pez espada, que no es exactamente la mejor contraseña, pero no importa Vamos a ir con pez espada. Entonces ahora quiero imprimir sordfsh, así que solo puedo decir imprimir una contraseña, Entonces, si ejecuto el programa, va a decir que es sordfish, pero queremos reemplazar cada letra en sordfish con Entonces, básicamente, deberíamos tener nueve símbolos astéricos en lugar de las propias letras reales Entonces, ¿qué hacemos? Puedo crear otra variable ahora mismo y llamarla la contraseña de subrayado enmascarado ¿Y ahora esto va a ser igual a qué? Voy a agregar mis códigos y ahora agregar el símbolo astérico. ¿Bien? El símbolo astérico, y ahora multiplicarlo nuevamente por la longitud de los caracteres de nuestra cadena de contraseña Y ahí está. Entonces ahora, si ejecuto el programa, y eso no funcionó. Oh, perdóname. Para la contraseña de impresión, necesitamos cambiar la línea tres aquí para enmascarar la contraseña porque ya no estamos imprimiendo la contraseña. Uy. Eso fue un poco vergonzoso. Bien, entonces ahora vamos a imprimir la contraseña enmascarada, y si ejecuto el programa, ahí tienes Bien, entonces ahora tenemos nueve símbolos astáticos porque el propio SetFish está conformado por nueve letras Y solo para demostrarte que esto realmente funciona, si agregué tres caracteres más, dígitos, en este caso ahora mismo 123, y lo vuelvo a ejecutar, ahora puedes ver que el número de símbolos astáticos ha aumentado en tres En lugar de nueve, ahora son 12. Entonces así es como podrías recrear algo muy similar en tu programa del mundo real Si querías crear un sistema de contraseñas enmascaradas, puedes usar este tipo de conceptos Así que gracias por ver el video. Te veré en la siguiente clase. 14. Indexación y recorte de cadenas: Bueno, bienvenido de nuevo. Ahora, hablemos de algunos conceptos muy importantes hora de tratar con cuerdas. Tenemos el concepto de indexación. Ahora, no te preocupes, vamos a hablar mucho más de indexar más adelante Pero ahora déjame darte una especie de breve introducción, ¿verdad? Digamos, por ejemplo, por aquí, tengo mi texto, que es igual a la ciberseguridad Ahora bien, ¿y si quisiéramos específicamente, por una razón u otra, extraer la primera letra de la palabra ciberseguridad La primera letra aquí sería C, ¿verdad? Así que podría hacer algo como decir primero y luego subrayar carácter igual al texto, y ahora voy a usar mis corchetes Y ahora necesito indicar la posición del índice de la letra a la que quiero apuntar. Ahora, en ciberseguridad, C es la primera letra. Entonces, ¿cuál crees que va a ser mi número de índice aquí? No, no es uno, va a ser cero Por favor, ten en cuenta que en la programación en general, no solo en Python, sino en la programación general, tu indexación comienza desde cero y no desde uno Entonces, si ahora quería imprimir el contenido de mi variable llamada primer carácter, la respuesta aquí va a ser C. De igual manera, si cambio este a uno, ahora va a ser Y. Así que esto de aquí mismo es la indexación, y vamos a estar trabajando con ello a lo largo de este curso Ahora bien, el segundo concepto aquí va a ser el concepto de sl pecado. El glaseado nos permite tomar una porción de la cuerda. Ahora, la ciberseguridad es una cadena bastante larga. Entonces, ¿y si solo quisiéramos apuntar, como, los cinco primeros personajes, que serían cibernéticos? ¿Cómo haríamos esto? Bueno, aquí dentro, puedo agregar mi posición de índice para el primer personaje que va a ser cero. Y entonces, ¿dónde quiero parar? Cinco. Esto de aquí mismo es a lo que nos referimos como rebanar. El primer número aquí representa desde dónde queremos comenzar el corte En este caso, ahora mismo, he agregado cero porque quería comenzar desde la primera letra. Y entonces ¿cuántos personajes queremos? Queremos los cinco personajes. Entonces ahora, si ejecuto el programa, va a ser Chi Burr Ahora bien, ¿y si quisiéramos extraer T segura solamente, verdad? No queremos etiquetarlo cyber. Queremos etiquetarlo solo de seguridad. Una cosa que podría hacer aquí es que podría decidir simplemente ir con el número índice de S, que será cero, uno, dos, tres, cuatro, cinco. ¿Bien? Podrían ser cinco. Y ahora agrego mi colon. Podría indicar cuántas letras quiero que contenga el corte Sin embargo, si no indico un valor aquí, Python automáticamente aparecerá por defecto al final de la cadena. Entonces ahora si ejecuto el programa, va a decir seguridad. ¿Vías cómo funcionaba eso? Yo indiqué, Bien, quiero comenzar desde S y el número índice de S aquí va a ser cinco. Y debido a que no indiqué dónde quiero que se detenga el corte, Python solo irá hasta el final Por eso tenemos seguridad. De igual manera, podría hacer casi lo contrario. Podría dejar el inicio vacío, y ahora podría ir por aquí. Y si indiqué, digamos, cinco como ejemplo, ¿cuál crees que va a ser el valor aquí? Cuando no indiques tu posición inicial, Python arrancará automáticamente. La posición por defecto será al principio. Entonces, ¿cuál crees que va a ser la respuesta aquí? La respuesta aquí va a ser cibernética? Porque a pesar de que no indicamos el comienzo, Python va por defecto al principio mismo, que es C. Y entonces cinco caracteres van a ser C Y, BR, y eso va a ser Psi bur. Sin embargo, eso no es todo. También podríamos usar el concepto de índices negativos. Entonces, por ejemplo, mira esto, ¿de acuerdo? Voy a ir por aquí, ¿verdad? Y si quisiera apuntar a la seguridad, una cosa que podría hacer es que puedo empezar desde el final, y sé que la seguridad es lo que son ocho personajes, así que voy a decir menos ocho. Y ahora voy a agregar mis dos puntos y por defecto hasta el final. Y ahora si ejecuto el programa, ahí tienes. Es seguridad porque Python comenzará desde el final, que es Y, y luego va a ir ocho letras a la izquierda. Se detiene en S porque S es la octava letra. Es el octavo personaje. Cuando empiezas desde el final, por eso tenemos la seguridad como respuesta. Quizás te estés preguntando, Bien, ¿cómo será esto aplicable a la ciberseguridad Alguna vez te has preguntado cómo los antimalware y los antivirus son capaces de escanear y detectar Normalmente, la extensión del archivo tendrá punto EXE. Entonces, por ejemplo, ¿verdad? Por ejemplo, si un nombre de archivo igual a CMD IOP, ya sabes, algo raro, Y luego puntear EXE. Este sería un ejemplo del tipo típico de nombre de archivo de malware que tendrás Entonces, ¿cómo podemos escribir un programa que escanee y luego detecte tan pronto como detecte la extensión EXE punto, sabe que, bien, esto podría ser potencialmente un malware. Aún no hemos hablado de la declaración If. Vamos a hablar de ello en la siguiente sección, pero solo asumamos ahora mismo que bien, si el nombre del archivo Bien. Y ahora, si agregué entre paréntesis, si quería apuntar al punto EXE desde el final, porque nunca sabemos cuánto tiempo va a estar el nombre del archivo antes del punto EX derecho. Siempre es mejor apuntar desde el final. Sé que menos cuatro, comenzando desde el final, si es igual, ¿a qué punto EXE? Si sé que los últimos cuatro caracteres en el nombre del archivo son iguales a punto EXE, entonces sé que lo más probable es que este va a ser un Milware Entonces ahora puedo simplemente decir impresiones, y luego entre paréntesis, puedo decir ML Ware encontró, ya sabes, algo como esto. Entonces así es como se puede aplicar el concepto de slicing en el mundo de la ciberseguridad Ahora, antes de redondear este video, déjame hablarte de una función más. Eso es útil a la hora de trabajar con cuerdas. Y esa va a ser la función split. Es una función que dividirá una cadena en una lista de cadenas suaves basadas en un delimitador especificado ¿De qué estoy hablando? Digamos, por ejemplo, vuelvo a mi texto, y es igual a la ciberseguridad. Ahora puedes decir que son dos palabras, ¿verdad? Ya no es una sola palabra ciberseguridad. Ahora tengo dos palabras ciberseguridad. Entonces, si quería dividir esto, puedo decir palabras. ¿Bien? Es igual al texto, y ahora se divide por puntos. ¿Bien? Estoy adjuntando la función split al texto variable porque quiero dividir la ciberseguridad Entonces ahora, si simplemente imprimí las palabras, ¿cuál crees que va a ser el resultado? Va a ser cibernético y luego seguridad. Y si te estás preguntando, Bien, ¿cómo vamos a aplicar esto en la ciberseguridad Jerman Vix Video web comenzará a echar un vistazo a las aplicaciones de ciberseguridad de rebanar, dividir y 15. Métodos comunes de cuerdas: Bienvenida de nuevo. Así que sigamos hablando los diferentes tipos de métodos o funciones que solemos aplicar en cadenas y uno muy común. De hecho, dos muy comunes más bien serían las funciones para convertir texto ya sea a mayúsculas o minúsculas Entonces en mi ejemplo por aquí, tengo mi texto variable igual a la ciberseguridad Si quisiera convertir todo a mayúsculas, simplemente diría texto y no superior abriría nuevos corchetes, y ahí está Y si quisiera convertir todo a minúsculas, haré exactamente lo contrario Este será texto impreso punto LWA. Dot ova, abre nuevos soportes, y ahí está. Entonces, si ejecuto el programa ahora mismo, se puede ver que tenemos ciberseguridad en mayúsculas, y luego ciberseguridad en minúsculas Entonces estas son dos nuevas funciones que debes tener en cuenta dot opa dot LA. Pero también existe la función para recortar espacios en blanco. Entonces digamos, por ejemplo, tengo mi variable de contraseña aquí. Tengo espacio, y mi contraseña real es pez espada, y luego déjame agregar algo más Si quisiera recortar todo el espacio en blanco innecesario aquí, todo lo que haría es decir impresiones, corchetes y luego contraseña, y ahora despojar. Una vez más, la función de tira, también podemos usarla para eliminar cualquier espacio en blanco innecesario, ejecutar el programa, y ahí tienes. Pez espada sin el espacio vacío. Pero también podemos reemplazar caracteres en nuestras cadenas. Digamos, por ejemplo, déjame darte un ejemplo aquí dentro. Digamos que tengo mi mensaje igual a, y digamos, bien, usa una contraseña. Digamos que la contraseña ahora mismo es la contraseña uno, dos, tres. Sólo como ejemplo, ¿verdad? Pero luego queríamos imprimir algo que dijera, bien, usar una contraseña y luego redactar ¿Bien? No queremos mostrar la contraseña real en sí. Es similar a lo que hicimos en la lección anterior donde usamos el símbolo Asteris para reemplazar a los caracteres Está relacionado pero ligeramente diferente. Entonces déjame mostrarte de lo que estoy hablando, ¿de acuerdo? Así que voy a venir aquí ahora mismo. Y voy a decir, vamos a crear una nueva variable. Digamos mensaje de subrayado seguro, bien, será igual a ahora message, dot, y ahora una nueva función llamada replace ¿Bien? Quiero reemplazar la contraseña real por otra cosa. Entonces dentro de mis corchetes, ahora voy a poner la contraseña real que quiero reemplazar que es la contraseña uno, dos , tres, coma, y ahora las letras o caracteres reales o cadena, quiero reemplazarla por En este caso, ahora mismo, voy a abrir mis corchetes, y en mayúsculas, puedo decir redactada Sólo como ejemplo, ¿o Entonces ahora, todo lo que necesito hacer es simplemente imprimir entre paréntesis mensaje de subrayado seguro Y ahora si ejecuto un programa, ahí tienes, usa una contraseña reduct head Entonces puedes usar la función replace para simplemente reemplazar cualquier parte particular de tu cadena con otra cosa, y así es como lo harás. Para redondear, déjame mostrarte una cosa más, y esto es encontrar subcadenas. Digamos, por ejemplo, que tenemos una variable llamada email, y es igual a, digamos, admin en labsyb.com Estoy bastante seguro, por supuesto, debes haber encontrado esto tantas veces antes donde tal vez estás tratando de crear una nueva cuenta en un sitio web, y te pedirán que proporciones una dirección de correo electrónico. Si escribes algo falaz , por ejemplo, el sistema podrá detectar eso, Oye, esta no es una dirección de correo electrónico válida, y eso es porque podría verificar para ver si el símbolo at estaba incluido en tu Entonces, si el símbolo del anuncio no está ahí, entonces obviamente sabe, Bien, lo que sea que esta persona haya escrito no puede ser una dirección de correo electrónico Entonces déjame mostrarte cómo podemos escribir un programa muy sencillo para verificar si el símbolo at está en la cadena. Entonces a partir de aquí, tengo mi correo electrónico es igual a admin en labsar.com. Comprobemos para ver si el símbolo del anuncio está en él, ¿de acuerdo? Voy a decir yo. ¿Bien? Si sé que no hemos hablado de esta afirmación en particular si, sin embargo, no te preocupes, la cubriremos mucho más detalle en la siguiente sección. Pero por ahora, solo tenga en cuenta que si es una declaración que Python usa para comprobar si algo es cierto. Entonces voy a decir si y ahora correo electrónico y luego punto, bien. Esta es la función que podemos usar para verificar para ver si algo existe en nuestra cadena. Entonces esa es la función find. Y ahora tenemos que especificar qué es exactamente lo que buscamos entre paréntesis y ahora códigos, el símbolo At. Así que estamos tratando de verificar si existe el símbolo at, y de una manera cómo podemos verificar que efectivamente existe. Está en una cadena es diciendo que no es igual a menos uno. Y luego agregamos nuestro colon. Entonces esto no equivale a menos uno es una manera de decir, Bien, algo sí existe. ¿Bien? Entonces aquí mismo, estamos diciendo si en el correo electrónico encontraste el símbolo del anuncio, y no es igual a menos uno. Entonces esto confirma que, sí, efectivamente, el símbolo del anuncio está en nuestra cadena. Entonces ahora podemos hacer algo. Podemos decir imprimir, y ahora entre paréntesis, podemos decir formato de correo electrónico válido. Entonces ahora si ejecuto mi programa, ahí tienes. Formato de correo electrónico válido porque de hecho se encontró el símbolo del anuncio. Si elimino el símbolo del anuncio, y ahora vuelvo a ejecutar el programa, puede ver que no se imprime nada porque el símbolo del anuncio ya no está ahí. No es un correo válido para Matt. Vuelvo. Vuelvo a agregar el símbolo del anuncio, corro, y ahora se puede ver que está funcionando de nuevo. Entonces, para darte un resumen rápido, antes que nada, queremos buscar el símbolo del anuncio en una dirección de correo electrónico que nos proporcionó Entonces vamos a decir si y luego estamos buscando específicamente el símbolo add. Entonces, si el símbolo del anuncio está presente y verificamos para ver si está presente con el no igual a menos uno, así que si el símbolo de agregar está de hecho presente, simplemente imprima el formato de correo electrónico válido. Así que toma nota de la función find. Entonces eso es todo por el video, gracias por verlo. Te veré en la siguiente clase. 16. Más manipulación de cuerdas: Bueno, vuelve, así que déjame guiarte a través de algunas operaciones más haciendo uso de la función split, así como alguna buena indexación antigua Entonces tengo en mi pantalla dos notas. Tengo una dirección de correo electrónico y luego también AURL. Ahora, mirando la dirección de correo electrónico, ¿y si quisiéramos extraer el dominio específicamente? Entonces queríamos extraer labsyba.com y simplemente deshacernos del anuncio de Admin labsyba.com y simplemente deshacernos del anuncio de Admin . ¿Cómo vamos a hacer esto? Bueno, antes que nada, asignemos un correo electrónico variable a B admin en labsyba.com. Bien. Entonces lo que voy a hacer ahora mismo es que voy a crear otra variable que ahora sostendrá lo que estamos buscando. Entonces voy a llamar a ese dominio. Y ahora aquí es donde ocurre la magia, ¿de acuerdo? Queremos dividir nuestra cadena, queremos separar admin de labsyb.com Entonces entre admin y labsyb.com es ¿cuál es el Entonces voy a decir correo electrónico y ahora dividido, y ahora entre paréntesis, ¿de dónde vamos a separarnos? Vamos a separarnos del símbolo At, ¿de acuerdo? Y ahora porque estamos buscando el segundo elemento, cuando separes admin en labsab.com del anuncio, una parte será admin, la otra parte será labsab.com, la otra parte será labsab.com Entonces queremos ir con el segundo elemento, y ese va a ser uno. Uno representará labsbdt com. Y ahora todo lo que tenemos que hacer es simplemente imprimir un dominio. Y si ejecuto un programa, entonces es labsbadt Si cambié uno a cero en su lugar, esto representará ahora el primer elemento, que va a ser admin. Entonces si vuelvo a ejecutar un programa ahora mismo puedes ver que ha cambiado a admin. Así que cada vez que intentas dividir una cadena en dos, usando la función split, antes que nada , quieres indicar, Bien, de dónde quieres comenzar la división. En este caso, ahora mismo, establecemos a partir del símbolo del anuncio. Entonces justo abajo en el medio, la izquierda estará el valor índice de cero. A la derecha estará el valor de índice de uno. Y como estamos buscando el dominio específicamente, cambiamos de cero a uno. Volvemos a correr, y ahí vas tenemos labcyba.com. Ahora bien, ¿qué pasa con el segundo ejemplo aquí la URL? ¿Qué es exactamente lo que buscamos aquí? Digamos que queríamos extraer el propio archivo real. Entonces no nos interesa todo gctpslabs.com, FurslashPat, FurslashT Todo lo que buscamos es simplemente el nombre del archivo. ¿Cómo podemos extraer archivo de esto? Entonces lo que voy a hacer muy simple es decir, URL es igual, y déjame agarrar esto. Déjame copiar eso. Y voy a pegarlo. Y ahí tienes. Bien, entonces otra vez, voy a crear una nueva variable que ahora mantendrá el valor de lo que estamos buscando. Llamemos a este el nombre del subrayado del archivo ahora será igual a URL, ¿verdad? Y ahora punto split, y ahora mira esto. Mirando la URL, ¿de acuerdo? Esta URL completa. ¿Qué opinas ¿Qué símbolo crees que podríamos usar para dividir la cadena en múltiples partes? Sí, debería ser obvio que va a ser el slash delantero, Porque se puede ver ahí mismo que está en todas partes. Así que vamos a dividir nuestra cadena. Vamos a escupir nuestra URL usando la diagonal hacia adelante. Y ahora, ¿cómo podemos apuntar al archivo? ¿Recuerdas la indexación negativa? Bueno, partimos desde el final de nuestra cadena. Entonces en este caso, ahora mismo, qué estamos buscando, estamos buscando el primer elemento desde el final, y ahora eso va a ser negativo ¿qué? Negativo uno. Entonces va a comenzar desde archivo. Va a empezar de derecha a izquierda, ¿verdad? Entonces ahora, todo lo que tenemos que hacer es simplemente imprimir el nombre del subrayado del archivo Y deberían hacer el truco. Sigamos adelante y ejecutemos el programa. Y ahí tienes. Tenemos el nombre del archivo. Entonces, al hacer uso de la función split y también una indexación negativa, pudimos apuntar específicamente al nombre del archivo Déjenme darles un ejemplo más. Y aquí, vamos a extraer algunas cadenas. Sin usar la función split, solo vamos a usar el valor del índice. Entonces déjenme volver a proporcionar la dirección de correo electrónico, y voy a decir admin en labsba.com Bien, entonces, ¿ y si quisiéramos extraer tanto el nombre de usuario como el dominio? Entonces queremos extraer el nombre de usuario que es admin, y luego el dominio que es labsyb.com ¿Cómo crees que podemos hacer esto? Bueno, antes que nada, puedo decir que mi nombre de usuario va a ser igual al correo electrónico y ahora recuerda cómo funcionan los índices cuando tengas tu inicio y luego el final. Así que queremos comenzar desde el principio mismo de nuestra cadena. Entonces vamos a decir colon. Vamos a dejar el lado izquierdo en blanco porque vamos a empezar desde el principio. Y ahora veamos. A va a ser el índice número cero, ¿verdad? Entonces A es cero, D es uno, M es dos I es tres, N es cuatro, y por supuesto, el símbolo add es cinco. Así que voy a decir por aquí ahora mismo, cinco, ¿de acuerdo? Y entonces puedo decir dominio es igual al correo electrónico y ahora dentro, queremos comenzar de lo que es el sexto índice, que va a ser L, dos puntos y luego dejar eso en blanco porque vamos todo el camino hasta el final de la cadena, y ahora esto debería funcionar. Entonces todo lo que tenemos que hacer es decir imprimir. Ahora aquí, digamos, usa un nombre. Bien, y luego, usa un nombre, y luego imprime paréntesis dominio de dos puntos. Bien. Dominio com. Y ahí tienes. Vamos a ejecutar el programa, y ahí está. El nombre de usuario es Admin. El dominio es lobsaba.com. Ya. Pero aguanta solo un minuto. Antes de reventar el champán, hagamos otra prueba, ¿de acuerdo? Voy a cambiar Admin aquí a no lo sé. Digamos, Alex, por ejemplo. Nunca ejecutes el programa. Uh oh, ta ta, da, da, da, da, da, da, da, da. Nosotros sí tenemos un problema. Se puede ver ahora mismo que el programa ha funcionado mal. Ya no funciona correctamente. En lugar de usar el nombre Alex, tenemos a Alex en. Y en lugar de labsyb.com, tenemos absyba.com. Lo que está pasando aquí. Verás, al tratar de extraer nuestras cadenas siendo muy específicos con los valores de índice a los que queremos apuntar, el programa va a depender mucho de la dirección de correo electrónico real, teniendo el número correcto de caracteres tanto antes como después del símbolo at. Entonces depende mucho de eso, pero no queremos que queramos que el programa sea lo suficientemente flexible como para poder extraer siempre con precisión tanto el nombre de usuario como el dominio independientemente de cuán corta o larga sea la dirección de correo electrónico real. Entonces, ¿qué podemos hacer? Bueno, recuerda que el símbolo del anuncio es donde está toda la acción. A la izquierda del símbolo add está nuestro nombre de usuario a su derecha es el dominio. Entonces podemos apuntar específicamente al valor del índice del símbolo At. ¿Y cómo lo hacemos? Para el nombre de usuario, correo electrónico, ahora mismo, De nuevo, vamos a dejar la primera parte de la columna en blanco porque estamos empezando desde el principio, ¿no? Y ahora para apuntar al símbolo real en, es el valor del índice. Voy a decir correo electrónico otra vez y ahora índice de puntos, y ahora entre paréntesis codificar el símbolo at. Entonces ahora estoy diciendo que el nombre de usuario siempre comienza siempre comienza desde el principio mismo de la cadena y luego termina una vez que hayas alcanzado el valor de índice del símbolo at. De igual manera, podemos hacer algo muy parecido con el dominio. Podemos decir dominio. Bien, comencemos desde el principio aquí, índice de puntos de correo electrónico. Y ahora, ¿a qué nos dirigimos de nuevo? Nos dirigimos al símbolo del anuncio. Sin embargo, específicamente queremos apuntar al primer carácter, el primer índice después del símbolo add. Entonces, ¿qué crees que vamos a hacer? Nosotros la buena gente, vamos a decir más uno. Más uno. Entonces ahora estoy diciendo, Bien, empieza desde el valor del índice de At, pero luego agrega uno a él. Entonces va a ir a AD y luego agregar uno. Bien, ahora, labs.com. Entonces ahora si ejecuto el programa, ahí tienes. Funciona axlabs.com Si cambio a Alex de nuevo a Admin, y ejecuto el programa, puedes ver que funciona de hecho, intentemos algo completamente diferente, ¿de acuerdo? Digamos que Jack Daniels en superyahoo.com, algo raro, ¿verdad? Vamos a ejecutar el programa, y ahí tienes. Jack Daniels y luego domainsoperyahoo.com. Entonces así es como extraer de manera exitosa y eficiente tus cadenas sin hacer uso de la función split simplemente se usan los valores de índice, y etiquetamos en él específicamente el valor de índice del símbolo add porque recuerda, nuevamente, el símbolo add es donde está toda la acción. A la izquierda del símbolo del anuncio hay un nombre de usuario a su derecha, está el dominio. Entonces espero que hayan disfrutado el video. Gracias por ver. Te veo en la siguiente clase. 17. Introducción a la sección del flujo de control y bucles: Oficialmente a la tercera sección, y ahora el teléfono realmente comienza. Ahora, estamos empezando a dar una especie de paso más profundo o un paso más grande en el mundo de la programación Python porque aquí vamos a estar hablando de flujo de control y bucles. Ahora, en lo que va de las dos secciones anteriores, hemos hablado de cadenas y enteros, y los programas han sido bonitos en su mayor parte, básicos, ¿verdad? Puedes o tal vez tener una entrada o nos proporcionamos alguna cadena y enteros, y luego decimos, Bien, voy a hacer esto y hacer esto y hacer eso y luego simplemente imprimir, ¿verdad Pero ahora con flujo de control y bucles, si quisiéramos decir, Bien, si algo es esto, entonces hagamos eso. Pero si algo no es esta cosa, hagamos otra cosa. Esto es flujo de control y bucles. Además, ¿y si, por ejemplo, tuviéramos una lista? ¿Bien? Podría ser una lista de nombres, una lista de libros, una lista de contraseñas, ¿verdad? Y entonces queríamos, como, pasar por cada contraseña esa lista y hacer algo, ¿verdad? A lo mejor queríamos tomar cada contraseña y cifrarla, o tal vez queremos tomar cada contraseña y luego verificar para ver si la contraseña es realmente fuerte o débil dependiendo de varios tipos de condiciones, vamos a cubrir eso en esta sección Esta va a ser una de las secciones principales este curso en particular, y estoy muy emocionada de enseñarte sobre el flujo de control y los bucles. Empecemos. 18. Introducción a los algoritmos: Vamos a tomar un descanso de Raplt y hablar un poco de algoritmos porque lo creas o no, realidad vamos a empezar a trabajar con conceptos un poco más avanzados en la programación Python Y es muy, muy importante que entiendas qué son los algoritmos porque son vitales, no solo para Python, sino cualquier tipo de lenguaje de programación para el caso. Ahora bien, si tuviera que darte algo así como la definición estándar de lo que es un algoritmo, básicamente es como un conjunto de instrucciones que deben seguirse para llegar a un resultado en particular, ¿de acuerdo? En este caso, ahora mismo, se puede ver este texto. He escrito algunas cosas ahí. El primer enunciado dice, si la computadora está funcionando rápido, Finalizar. Ahora bien, ¿a qué me refiero aquí? Simplemente digo eso, mira, si nuestra computadora está funcionando muy, muy bien, está funcionando muy, muy rápido. No hay necesidad de verificar nada. Está bien, ¿verdad? Por eso dije terminar. Pero me doy cuenta en la tercera línea, dije, lo contrario, también podrías decir algo así como trasero, ¿verdad? Pero en el lenguaje de programación, no usamos sino, usamos se. ¿Bien? Entonces se básicamente está significando que si la sentencia anterior no es correcta, así que si la computadora no está funcionando rápido, Bien, entonces ¿qué tenemos que hacer ahora Tenemos que antes que nada, verificar si hay algún virus. Y luego después de eso, podríamos necesitar desinstalar programas innecesarios, y luego eventualmente podríamos necesitar aumentar la rampa. Entonces, si seguimos estos tres pasos, se garantizará que una computadora funcione más rápido. Esto es un algoritmo, ¿verdad? Y dos palabras clave aquí son el IF y s. vamos a estar trabajando bastante con esto en este curso. Y si alguna vez vas a trabajar con otro tipo de lenguaje de programación, siempre te encontrarás con declaraciones IL. Estos son los bloques de construcción fundamentales de cualquier programa. Espero que entiendas lo que hicimos aquí. Bastante sencillo. Voy a hacer esto un poco más avanzado, ¿de acuerdo? Sólo un poquito, ¿verdad? Déjame abrir la segunda pestaña. Así que imagina que te vas a vestir según el clima. ¿Bien? Entonces, la primera declaración, hemos establecido un escenario, ¿verdad? Entonces nuestro programa está comprobando para ver qué debemos ponernos en función del clima. Entonces tenemos el primer resultado. Si el clima es soleado, Bien, bueno, podemos usar nuestras gafas de sol. No obstante, fíjese en la tercera línea, va de otra manera si ya no es sólo otra cosa. ¿Por qué? Bueno, porque el clima puede venir en diversas formas. Podría estar soleado, podría ser lluvioso, podría estar nevando, podría estar nublado Hay muchas más opciones, ¿verdad? En el primer documento aquí, sólo hay dos condiciones. La primera condición es, Bien, ¿la computadora está funcionando rápido o no está funcionando rápido? Eso es. Nada como, Oh, ¿ la computadora está funcionando al 25% de su capacidad? ¿Funciona al 50% de su capacidad? No tenemos ninguna otra condición. Son sólo dos. O el compter está funcionando rápido o no es ni A ni B. Por eso yo funcionaría perfectamente aquí No obstante, en este ejemplo, tenemos más de dos opciones porque, nuevo, estamos lidiando con el clima. Entonces, si hace sol, podemos usar gafas de sol. De lo contrario, si está lloviendo. Bien, podemos tomar un paraguas. Y entonces si está nevando, podemos ponernos un abrigo pesado, ¿verdad Pero ahora mira la última línea. Simplemente dice otra cosa. No más si más. Porque básicamente estamos concluyendo el programa aquí. Estamos diciendo, Bien, hemos comprobado si hace sol, hemos comprobado si está lloviendo, hemos comprobado si está nevando Entonces, si no es ninguno de estos tres va a ser solo un día normal. Así que si no, solo vístete normalmente. ¿Bien? Entonces, el primero aquí nuevo es simplemente EL porque hay dos condiciones. El segundo aquí, sí tenemos la declaración s if porque hay más de dos condiciones. De hecho, hay cuatro resultados diferentes basados en el clima. Por eso ya no podemos trabajar sólo con los I Ls. Tenemos que introducir la declaración s if. Entonces ojalá, entiendas por qué usamos la declaración Is aquí y por qué usamos else si aquí. Si no lo haces, tal vez ojalá una vez que comencemos a crear programas reales, usando los algoritmos, lo entenderás mucho mejor entonces. Pero esto ha sido una introducción al mundo de los algoritmos así como a las declaraciones Is else if. Gracias por ver. Te veré en la siguiente clase. 19. Declaraciones If Else: Entonces, en el video anterior, discutimos brevemente los conceptos de algoritmos así como las declaraciones Is if. Ahora, vamos a ponerlo en acción. En realidad vamos a escribir un programa que solicitaría un número 1-9 al usuario Ahora bien, si el número es mayor que cuatro, vamos a decir, ¿por qué tanto? De lo contrario. Es decir, que si son cuatro o menos, vamos a decir por qué tan poco. Ahora, la última línea, he difuminado por una razón en particular porque una vez que escribamos este primer programa, vamos a agregar una condición extra No quiero mostrarte cuál es esa condición extra todavía. Entonces, centrémonos en escribir este programa, ¿verdad? Así que déjame arrastrar esto. Bien. Y déjame simplemente quitarle esto. Bien. Entonces la primera parte del programa es que queremos solicitar un número entre 129. Entonces, ¿qué podemos hacer aquí? Bueno, antes que nada, podemos crear una variable llamada N. Bien, para el número. Y vamos a pasar. Recuerda, trabajamos con la función de entrada. ¿Bien? Entonces voy a decir entrada porque esa es la función que solicitaría entrada al usuario. Entonces voy a decir entrada, y voy a decir ingrese un número entre 129. ¿Bien? Primero que nada, asegurémonos de que esto esté funcionando. Bien, ingresa un número 1-9, déjame crear un poco de espacio 1-9 Corre de nuevo. Bien. Bien. Entonces la primera línea funciona. Ahora, queremos comprobar si el número está entre o es menor que cuatro, ¿verdad? Entonces voy a decir si está bien. Y luego el entero porque queremos convertir cualquier número que nos haya proporcionado, queremos convertirlo a un entero porque el usuario podría ser muy travieso. Podrían decidir proporcionar, digamos, 1.1, 4.5, 7.6, algo así. Así que queremos mantener todo como un entero. Así que voy a envolver nuestra variable ahora mismo en la función integer, ¿verdad? Entonces voy a decir I entero N, ahora espacio y luego el símbolo para mayor que mayor que cuatro, Bien. Y ahora, presta mucha atención. Voy a añadir el doble colon, ¿de acuerdo? Necesitas agregar esto siempre que estés trabajando con tus declaraciones eL, ¿de acuerdo? Así que voy a decir eso. Y ahora, por defecto, en realidad, Python ha escrito esta línea para mí, pero voy a decir por qué tanto. ¿Bien? Ahora, entra, y ahora voy a decir otra cosa si, sin embargo, Bien. Y ahora voy a decir se. Y luego nueva sangría de línea, imprimir. Y entonces voy a decir, y tan poco. Bien. Entonces voy a seguir adelante ahora mismo. Oh, por cierto, asegúrate en tu s también tienes el doble colon también, ¿de acuerdo? Sigamos ahora mismo y ejecutemos el programa, y veamos. Entonces ingresa el número 1-9, voy a decir seis Pulse Intro. Se puede ver ahí mismo, en realidad funciona. Por qué tanto. Volvamos a ejecutar el programa. Voy a decir tres, tres ahí mismo, y luego dice por qué tan poco. Así que en realidad funciona como puedes ver. Ahora, voy a repasar esto una vez más, ¿de acuerdo? Entonces, antes que nada, la mitad N, que va a ser la variable que aceptará la entrada del usuario, y la entrada en cuestión, ingresan un número entre 129. ¿Bien? Entonces ahora vamos a crear una condición que verificará para ver el valor de ese número. Así que hemos decidido convertir la entrada a un entero. Por eso tenemos el INT. Una pregunta que podrías tener aquí es, espera un minuto, Alex. Anteriormente, cuando teníamos una función dentro de otra función, tenemos que usar los corchetes, ¿verdad? El es, esto no es exactamente una función, ¿de acuerdo? Es más un algoritmo, más como un bucle solo comprobando para ver el valor de algo. No es una función real en sí misma. Por eso no tenemos el entero envuelto entre paréntesis, ¿de acuerdo? Entonces va a comprobar si el entero, si es mayor que cuatro, bueno, imprima, ¿por qué tanto? Se, es decir, que si el número es cuatro o menos de cuatro imprimir, por qué tan poco. Se puede decir que funciona bien. Y lo único a lo que hay que prestar atención sería el doble colon después los cuatro y también después del s. Y entonces también es muy buena práctica que siempre que estés caminando con declaraciones de IL o s si tienes buena sangría, yo no hice esto, ¿ No tenía mis declaraciones impresas directamente debajo de las declaraciones E y L. Esto no es nada bueno. Esta es una sintaxis de programación muy, muy pobre. Así que siempre quieres tener tu sangría correctamente, Téngalo siempre que esté trabajando con las declaraciones de EL. Bien. Ahora voy a traer vuelta nuestro programa. Y mira eso. He agregado una condición extra diciendo que ¿y si el número es un número específico, que es cinco Bueno, queremos decir Bingo. ¿Bien? Entonces, ¿cómo exactamente vamos a hacer esto? ¿Bien? Déjame arrastrar esto. Bien. Ahora, mira esto. Voy a venir aquí donde dice, imprimir por qué tanto, y voy a presionar Enter porque queremos agregar el s I entre la declaración de apertura Si y la declaración de cierre s , ¿bien? Entonces ahora voy a decir L, esta es la forma corta de escribir s si. Entonces, en lugar de decir sf, usamos LF en Python. ¿Bien? Entonces L si el entero N, es igual o lo siento, el entero N. Si es igual a cinco, el igual va a ser doble seno igual, no solo uno, ¿bien? Entonces de lo contrario si el entero proporcionado por el usuario es de cinco, y ahora voy a agregar los dos puntos dobles y luego voy a decir, perdón, voy a decir imprimir. Y luego entre paréntesis, Bingo. ¿Bien? Entonces voy a ir a eso ahora mismo. Estamos en el programa. Y ahora vamos a revisar para ver si esto realmente funciona. En primer lugar, voy a escribir tres, ¿de acuerdo? Bien, así que sigue funcionando. ¿Por qué tan poco? Bien. Vamos a probar ocho. Por qué tanto. Bien. Y ahora, si digo cinco y presiono Enter, ¿adivina qué? No es decir bingo, sigue diciendo por qué tanto. ¿Quieres saber por qué? Porque el programa Python ejecuta línea por línea. Ahora, mira la jerarquía aquí dentro. La primera condición que Python está comprobando es ver si el número es mayor que cuatro. Y porque cinco es mayor que cuatro, inmediatamente dice: Bien, ¿por qué tanto? Ni siquiera va más abajo para comprobar si el número es igual a cinco porque la primera declaración básicamente está diciendo: Oye, si el número es mayor que cuatro, entonces imprime por qué tanto. Entonces, para demostrarte esto, lo que voy a hacer aquí es esto, ¿de acuerdo? Voy a decir que vamos a cambiar la jerarquía aquí dentro. Entonces comprobaremos, primer lugar, si el entero es en realidad igual a cinco. Bien, que eso sea lo primero, comprueba. Y ahora por aquí, vamos a comprobar para ver si el entero es mayor que cuatro. Así que básicamente acabo de cambiar la jerarquía. Entonces lo primero que va a comprobar ahora mismo es si el entero es en realidad igual a cinco, va a decir bingo, lo contrario si no es igual a cinco y es mayor que cuatro, vamos a decir y tanto. Y entonces si no es igual a cinco, y si no es mayor que cuatro, entonces imprima y tan poco. ¿Bien? Vamos a ejecutar el programa. Entonces voy a venir aquí ahora mismo, correr déjame antes que nada, agrega cinco ahora y mira, Entra, y ahí tienes. Bingo. De hecho, trabajé. Volvamos a ejecutar el programa. ¿Y si escribí dos? Entra, ¿por qué tan poco? Uno, una vez más, vamos con siete. Entra, ¿por qué tanto? Ya se puede ver, funciona. Entonces, la jerarquía de tus comandos es extremadamente importante siempre que estés trabajando con Python o Pgamming en general Cuando estés comprobando las condiciones, siempre ten en cuenta que en Python ha conseguido una condición que está satisfecha, inmediatamente imprimirá los resultados. No va a ir más abajo en las líneas restantes de tu programa. Entonces la jerarquía de tus condiciones, las condiciones que se comprueban, tus comandos es tan, tan importante. Y luego, claro, también este poco ya sabes, saber dónde agregar los dos puntos, cosas así Esto es algo a lo que eventualmente te acostumbrarás. Podría ser un poco abrumador al principio, pero a medida que empieces a escribir más programas, eventualmente te acostumbrarás a ellos. Entonces eso es todo por trabajar con las declaraciones E L L if. Gracias por ver. Te veo en la siguiente clase. 20. Comprobador de contraseñas sencillo: Bien, escribamos nuestro primer fragmento de código relacionado con la ciberseguridad y este comprobará para ver si contraseña de un usuario terminó es realmente válida o no Eres más que bienvenido a intentar escribir el código por tu cuenta. Si no, déjame mostrarte cómo vas a hacer esto. Lo primero que tenemos que hacer es indicar cuál es la contraseña. Voy a llamar a la variable aquí se almacena en la contraseña de puntuación. Vamos a proporcionar un valor para la contraseña. Voy a ir con algo muy, muy genérico. Digamos, contraseña uno, dos, tres. Esta va a ser la contraseña real. Por cierto, no estoy seguro si lo he mencionado antes, pero en Python, si quisieras agregar un comentario o una pista en tu código, puedes hacerlo usando el símbolo de hashtag y luego escribiendo tu comentario. A lo mejor ya lo he mencionado antes. Si no, bueno, ahí tienes. Bien, entonces iniciar contraseña aquí va a ser la contraseña uno, dos, tres. Entonces ahora necesitamos pedirle al usuario que nos proporcione la contraseña. Y luego una vez que nos proporcionen la contraseña, entonces podremos ejecutar una declaración EL que verificará para ver si la contraseña que han escrito es realmente correcta o no, si es correcta, podemos decir acceso concedido Si no, diremos acceso denegado. Entonces lo primero que voy a hacer ahora mismo es que voy a obtener la entrada del usuario. Permítanme agregar mi comentario y decir obtener la entrada del usuario como primer paso. Lo que vamos a hacer ahora mismo es que podemos llamar a la entrada del usuario. Podemos llamarlo la contraseña ingresada. Esta será la variable que almacenará la entrada. Entonces ahí mismo, me gusta la sugerencia que Python nos ha dado. Simplemente dice que la contraseña ingresada es igual a imputa y luego vamos a pedirle al usuario que proporcione su contraseña Lo siguiente que tenemos que hacer ahora mismo es ver si las contraseñas realmente coinciden o no. Queremos asegurarnos de que lo que escriban aquí va a coincidir con la contraseña que tenemos almacenada. Por cierto, es increíble cómo no sé si ves exactamente lo mismo en tu propia pantalla, pero Python literalmente solo está escribiendo el código completo para mí. Te lo prometo, esta es la primera vez que en realidad escribo este código en replet. Te prometo que no he escrito este código antes. Es increíble cómo es tan inteligente, es tan inteligente. Sabe exactamente lo que quiero escribir, y eso es exactamente lo que quiero hacer. Quiero decir, si la contraseña terminada es igual a la contraseña almacenada. ¿Qué vamos a hacer? Vamos a imprimir. Entonces entre paréntesis, se concedió el acceso a cadenas , perdón por eso. S, ¿qué vamos a imprimir? Vamos a imprimir Brackets, abrigos. Acceso denegado. Y ahí está. Déjame quitarme el abrigo extra ahí mismo. Ahí vas. Ese es nuestro código ahí mismo. Muy sencillo, muy directo. Vamos a probarlo. Voy a correr y ahora voy a pedir la contraseña. Vamos a probar James 123. ¿Eso funcionó? No, acceso denegado. Bueno, no funcionó. Vamos a correr. El programa una vez más. Vamos a probar la contraseña. Contraseña, uno, dos, tres, presiona Enter, y luego vas, se ha concedido el acceso, nuestro código realmente funciona correctamente. Por supuesto, esto es solo un bloque de código muy simple. No es todo el programa en sí, pero este es el primer paso para crear un verificador de contraseñas más completo para. Gracias por ver el video. Te veré en la siguiente clase. 21. Introducción a los bucles: Hablemos ahora de loops, que son fácilmente uno de los aspectos más importantes de cualquier tipo de programa o lenguaje de programación. Pero, ¿qué son exactamente? Bueno, normalmente se utilizan para repetir un bloque de código varias veces hasta que se cumpla una condición especificada o para un número determinado de iteraciones En otras palabras, un bucle se ejecutará hasta que todos los elementos de una secuencia o lista hayan sido procesados, o el bucle continuará ejecutándose mientras una condición sigue siendo verdadera o se satisface. Entonces básicamente, es un bucle. Voy a seguir y seguir y seguir y seguir hasta que algo finalmente suceda. Ahora, son muy importantes porque nos ayudan a automatizar tareas repetitivas Entonces, en lugar de que repetir la misma tarea una y otra vez, podemos simplemente escribir un bucle que ejecute esa tarea por nosotros automáticamente, y por supuesto, usamos bucles para construir programas eficientes que se adapten en función de condiciones dinámicas. Y cuando se trata de bucles, hay dos tipos principales. El primero va a ser el bucle de cuatro. Mira esto, ¿de acuerdo? Tenemos una lista de 129, ¿de acuerdo? Números. Y podemos escribir un programa muy sencillo que diga: Oye, imprime cada número. Entonces básicamente imprima uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve. Pero en lugar de que tengamos que escribir cada línea individual para cada número individual, a escribir cada línea individual para cada número individual , ya sabes, imprimir una, segunda línea, imprimir dos, tercera línea, imprimir tres, solo podemos escribir un bucle que recorra todos los números de esta lista y luego imprimir esos números hasta que, por supuesto, se haya impreso el último número , que es nueve. Esta será la definición o un ejemplo más bien de un bucle de cuatro. El segundo es el bucle W. Entonces digamos, por ejemplo, la hora es entre las 12:01 P.M. Y las 4:59 P.M. Así que siempre y cuando la hora del día esté entre este rango, digamos, buenas tardes Observe la diferencia entre las dos estructuras. ¿Bien? El primero aquí, que es el bucle fol ya tiene, como, una lista o secuencia predefinida. Y mientras tengamos ítems en esa lista en particular, entonces haz algo. El bucle wil es un poco diferente porque dice, Bien, siempre y cuando esta condición siga satisfecha o esta condición siga siendo cierta, ¿cuál es la condición aquí? Siempre y cuando el tiempo sea entre las 12 1:00 P.M. Y las 4:59 P.M. S buenas tardes. Bien. Al cierre, los bucles deben tener un punto final o se ejecutarán para siempre. Básicamente, un bucle puede aplastar todo el programa. Veamos el ejemplo aquí dentro. ¿Y si los números de esta lista fueran del número uno al infinito, verdad? Eso significa que el programa continuará imprimiendo los números una y otra y otra vez, y nunca se detendrá. Esto bloqueará fácilmente el programa. Y qué pasaría si en este ejemplo ahora mismo, no hay un periodo de tiempo especificado. Y si el programa solo revisa para ver si es durante el día o en cualquier momento durante la noche, digamos buenas tardes. Bueno, siempre va a simplemente imprimir buenas tardes, buenas tardes, buenas tardes, buenas tardes. Y eventualmente bloqueará el programa, también. Entonces es muy, muy importante que siempre que estemos trabajando con bucles, siempre debe haber cierto tipo de condición que eventualmente se satisfará para que ese bucle termine. De lo contrario, bloqueará el programa. Gracias por ver el video, los veo en la siguiente clase. 22. Bucles para y mientras: Ahora vuelve a nuestro Fideicomisario plt. Y te voy a dar dos ejemplos. Uno para el bucle cuatro y otro para el bucle Wil. Entonces, para crear nuestro bucle de cuatro , primero que nada, creamos la lista. En este caso, ahora mismo, voy a proporcionar el nombre de la lista como nombres, ¿de acuerdo? Igual, y entonces voy a tener mis corchetes aquí. Y agreguemos algunos nombres. Entonces tengo a Alex. Tengo a Nancy. Y yo tengo a James. Y digamos, por último pero no menos importante, tengo a Violetta Honestamente, solo se me ocurrió ese nombre. Violetta. Bien. Entonces tenemos una lista aquí mismo de cuatro nombres diferentes, ¿verdad? Alex, Nancy, James y luego Violeta. Una cosa que puedo hacer ahora mismo es que podemos crear una variable que represente cada ítem de la lista. Algo así como cómo hemos estado asignando valores a variables como, ya sabes, X es igual a cuatro, Y es igual a siete Ahora puedo entrar aquí y luego simplemente decir cuatro. ¿Bien? Y ahora voy a decir cuatro X. En nombres. ¿Bien? ¿Cuáles son los que están aquí ? Permítanme agregar el colon ahí mismo. Entonces lo que hemos hecho con esta afirmación aquí es que estamos diciendo, Bien, vamos a usar X para representar cada nombre en esta lista. Entonces X será igual a Alex que será el primer bucle que correrá. El segundo bucle X ahora será igual a Nancy, correrá. El tercer bucle ahora será X igual a James. Y luego finalmente, el último bucle será X es igual a Violeta. Eso es básicamente lo que hace esto aquí. Entonces estamos diciendo para X en nombres. Y ahora tenemos que decirle al programa, Bien, ¿qué debemos hacer? Bueno, deberíamos imprimir el nombre X. Bien. Yo voy a correr, y ahí tienes. Alex, Nancy James y Violetta. Pero y si quisiera darle sabor a este programa un poco y digamos algo como, ya sabes, buenos días, y luego el nombre de esa persona. Entonces tendremos buenos días y Alex. Buenos días, Nancy. Buenos días James. Y, claro, buenos días Violetta. ¿Cómo vamos a hacer esto? Bueno, dentro de la función print, voy a agregar una cadena que en primer lugar va decir buenos días. Yo bien. Y entonces vamos a tener la coma, que, por cierto, es solo parte de la impresión en sí misma. No es parte del programa real, si sabes a lo que me refiero. Es parte de la cuerda. Básicamente lo que estoy tratando de decir. Podemos hacerlo sin el coma también, de hecho, ¿sabes qué? Déjame quitar la coma, solo para que no te confunda. Así que voy a decir buenos días, ¿de acuerdo? Y luego voy a agregar un espacio porque queremos que sea espacio entre la cuerda real, buenos días, y luego el nombre de la persona. Por eso he agregado el espacio ahí mismo, ¿de acuerdo? Y luego aquí mismo, voy a agregar el signo más y luego X. Así que básicamente adjuntando la cepa buenos días al nombre de la persona. Vamos a ejecutar el programa, y ahí tienes. Buenos días, Alex. Buenos días, Ansay Buenos días, James. Buenos días Violetta Ahora bien, si elimino este espacio porque quiero que entiendas esto muy bien. Si elimino este espacio ahora mismo y vuelvo a ejecutar el programa, ya puedes ver que está todo revuelto, ¿de acuerdo? No hay espacio entre la mañana y luego el nombre de la persona. Por eso, una vez más, agregué el espacio aquí mismo entre la G y la comilla de cierre, ¿de acuerdo? Entonces, quiero decir, una vez más. Y ahí tienes. Este es un ejemplo de un bucle de cuatro muy sencillo. En primer lugar, creamos una lista de nombres. Asignamos esta lista completa aquí mismo a los nombres de las variables. Y entonces ahora necesitamos crear otra variable que represente cada ítem, cada nombre en esta lista. Entonces establecemos cuatro X en la lista llamados nombres y ahora la función imprimir Buenos días, más el nombre de la persona en esa lista. Este es un ejemplo de tus cuatro Loop. Ahora, lo que voy a hacer es que vamos a crear un bucle salvaje. Ahora, para hacer esto, bajemos aquí. Y sí, podemos ejecutar múltiples programas y funciones dentro del mismo archivo exacto, ¿verdad? Entonces lo que voy a hacer ahora mismo es que voy a crear algo llamado contador. Bien, entonces contador es igual a cero. Ahora bien, ¿qué estoy haciendo aquí exactamente? ¿Qué es este contador? Recuerda que con los bucles de Wil, seguirán funcionando mientras se siga satisfaciendo una condición. Esa es la diferencia entre un bucle de caída y un bucle while. Con el bucle de otoño, tenemos una lista de artículos, ¿verdad? Entonces el bucle simplemente recorrerá todos los elementos de esa lista. Pero un bucle while, tiene que haber algún tipo de condición que se presentará. Y entonces le vamos a decir a Python que, Hey, mientras esta condición en particular siga satisfecha, ejecute el loop. Entonces la condición aquí en este momento es que mientras nuestro contador sea menor que digamos tres, ¿ves ahora que estamos diciendo, oye, siempre y cuando nuestro contador, siempre y cuando el número de aquí sea menor que tres, siga haciendo algo. Y se puede ver Python como que ya nos da un indicio de a dónde ir a continuación. Bueno, voy a decir print print, y luego voy a agregar un texto ahí mismo, la cadena. Hola. ¿Bien? Y ahí tienes. Ahora bien, lo que estamos diciendo aquí es empezar de cero, ¿de acuerdo? Comienza desde cero y luego verifica para ver si cero es menor que tres. Si son menos de tres, entonces imprime Hola. Sin embargo, en realidad no hemos terminado. ¿Por qué? Bueno, porque no le hemos dicho específicamente a Python que agregue un nuevo número al contador. Entonces, en vez de cero, ahora se convertirá en uno. Comprueba si uno es menos de tres y luego imprime hola. Aún no se lo hemos dicho a Python porque un bucle puede ir de cualquier manera. Podemos o seguir sumando o uno, dos, tres a cero, o podríamos ir en dirección opuesta, y luego en lugar de que cero vaya a uno, podría ser cero yendo a menos uno, menos dos, menos tres, menos cuatro. Y en ese tipo de escenarios, esos números siempre serán menores de tres, y la condición nunca se cumplirá o siempre se cumplirá, más bien, y entonces eso chocará el programa. Entonces necesitamos decirle a Python explícitamente que, Oye, una vez que hayas ejecutado el primer bucle donde cero es menor que tres, agrega uno al contador. Entonces voy a entrar ahora mismo y voy a decir contador y luego más equivale a uno. Esta es nuestra forma de decir, Bien, Python, el comienzo mismo del bucle será cero. Comprueba si cero es menor que tres. Si son menos de tres, imprime hola y luego ahora agrega uno al mostrador. Por lo que ahora será uno a menos de tres. Python dice, sí, uno es de hecho menos de tres. Se va a poner hola. Se va a agregar uno de nuevo, así que ahora uno se convertirá en dos. Python va a comprobar, Bien, son dos menos que tres, sí, son menos de tres, imprimir hola. Y luego se va a añadir una de nuevo. Entonces ahora se convierte en tres. Y luego finalmente, Python dirá eso, Bien, tres no es menor que tres porque tres es igual a tres, y luego terminará el bucle. Derecha. Sigamos ahora mismo y corramos. Y ahí tienes. Hola, hola, hola. puede ver ahí mismo que se detuvo en tres bucles porque el primer bucle será para cero. El segundo bucle será para uno. El tercer bucle será para dos. Si vine aquí y le dije: Bien, menos de siete carreras, ahora se puede ver que tenemos, de nuevo, 40, uno, dos, tres, cuatro, cinco, seis, saludos Entonces esa es la diferencia entre el bucle cuatro y el bucle salvaje. Se puede ver ahora mismo con los cuatro bucles, tenemos nuestra lista o nuestro camino y luego el bucle pasará por cada ítem en particular en esa matriz y hará algo. Pero para el bucle Wile, tenemos que antes que nada , especificar, Bien, ¿cuál es el punto de partida Y entonces ahora vamos a proporcionar la condición, Bien, siempre y cuando esto sea igual a esto o esto sea menor que esto, o esto es esto, esto o esto sea menor que esto, o esto es esto, hacer algo y luego agregar uno o eliminar uno o simplemente hacer algo para asegurarse de que el bucle ahora realmente comenzará a ejecutarse. Esa es la diferencia entre el bucle cuatro y el bucle while. Por supuesto, vamos a estar trabajando mucho más con cuatro y wile loops en este curso Pero gracias por ver. Te veo en la siguiente clase. 23. La declaración BREAK: Hablemos ahora de la declaración break porque es una declaración muy, muy poderosa, y vamos a estar trabajando con ella en este curso. Pero antes de hacer eso, solo quiero mostrarles una manera diferente de imprimir realmente los nombres en este ejemplo en particular. Ahora mismo, estamos diciendo buenos días y luego plus y luego X. X, por supuesto, siendo la variable que representa cada nombre en nuestra lista. Otra forma de escribir esto sería hacer algo así. En primer lugar, voy a quitar el plus X. Bien. Pero ahora voy a venir aquí mismo desde el principio. Voy a escribir F, bien. Y ahora, aquí mismo, voy a agregar mis llaves rizadas, no las llaves habituales, sino las rizadas Y ahora aquí, simplemente voy a escribir X. ¿Bien? Yo puedo ejecutar el programa, y se puede ver ahora mismo que tenemos exactamente los mismos resultados. Esto aquí mismo es una forma diferente y también más eficiente de imprimir realmente los valores de las variables en una lista o una matriz en un aspecto de cuatro o mientras. ¿Correcto? Y vamos a estar caminando así avanzando. Ahora bien, la declaración break, ¿qué es exactamente la declaración break? Se usa cuando queremos terminar un bucle temprano. Por ejemplo, en este flop que estamos viendo ahora mismo, lo que hace es que simplemente va a pasar por todos los nombres nuestra lista y luego imprimir buenos días y después el nombre de la persona, ¿verdad? Pero y si por una razón u otra, quisiéramos terminar el loop tan pronto como James haya sido alcanzado, no queremos imprimir buenos días Violeta porque no nos gusta la violeta, ¿verdad? Aquí es donde podríamos usar la sentencia break para terminar el bucle temprano. Para demostrarlo, voy a escribir un programa completamente diferente, ¿de acuerdo? Entonces, ¿vamos a hacer esto bien? Voy a escribir digamos números. Voy a crear una nueva lista aquí mismo los números son iguales, y voy a poner entre paréntesis aquí. Y vamos con una serie de números. Voy a ir con uno, tres. Vamos con siete, ocho, diez, y vamos con 11, y agreguemos uno más, par el número 14. ¿Bien? Entonces tenemos una lista de números aquí, y lo que queremos hacer ahora mismo es que queremos crear un bucle que recorra todos los números. Sin embargo, una vez que se ha alcanzado el primer número par, queremos terminar el bucle, es decir, que una vez que el número que es ocho, vamos a terminar el bucle, por lo que debería correr cuatro veces. El primer bucle para 1 segundo p para tres, tercero, busca siete, cuarto bucle para ocho. Entonces piensa en esto, ¿verdad? Vamos a crear primero el bucle de otoño, y luego vamos a introducir la declaración I. Entonces el que me vendo comprobará, Bien, ¿ este número es realmente par o es extraño? Si es par, entonces rompa el bucle porque encontramos el primer número par else. Si no es un número par, si es un número impar, continúe con el bucle. Entonces, ¿cómo vamos a hacer esto? Gatap en entrar al ciclo de otoño cuatro digamos Num. Bien, Num representará los números. Y por cierto, no estoy seguro si ya lo he mencionado antes, pero creo que ya es hora de hacerlo. Verás, sólo he escrito el número. Puedes ver ahora mismo en mi pantalla, Python ya está sugiriendo en números porque Python en realidad es bastante inteligente, ¿verdad? Entonces en este tipo de situaciones en estos momentos, si estás contento con la sugerencia que te ha dado el programa, simplemente puedes presionar la tecla tab en tu teclado, y obtendrás exactamente el mismo resultado, ¿verdad? Así que sí perdono que no pueda hablar. He grabado el número de tabulación. O la tecla tap en mi teclado, y ahora tengo cuatro num en números. Voy a sumar mi colon. ¿Bien? Ahora, voy a agregar la declaración If, ¿y usted miraría eso? Te lo prometo, en realidad no he escrito este programa antes, pero creo que Python es muy inteligente Ya tengo una idea de lo que podría estar buscando. Sí, quiero si num, y luego porcentaje dos es igual a cero. Entonces, ¿qué es exactamente esto? ¿Qué está pasando aquí? Lo que esto significa es que vamos a comprobar si el número que se ha sacado, si es divisible por dos y el resto es igual a cero, entonces sabemos con certeza que es un número par Si divide siete por dos, obtendrá 3.5, 3.5. Siempre va a haber ese resto que quedan han sido la mitad. Pero cuando divides ocho por dos, la respuesta es recta hacia arriba cuatro. No es 4.1, no es 4.2. No es 4.5, son cuatro. Entonces así es como podemos verificar si el número es realmente par. Entonces, si el número es, de hecho, par, ¿qué hacemos? Digamos imprimir. Bien. Y ahora voy a añadir la cadena F. Bien, y ahora la cadena real en sí encontró el primer número par. Bien, agreguemos mi coma. Y ahora quiero mostrar el número real, llaves, y ¿qué va a ser Va a estar entumecido. Bien. Impresionante. Entonces hemos agregado lo que debería hacer el programa si el número es, de hecho, un número par. Prince dice: Bien, encontramos el primer número, y ahora rompemos el bucle. Ya no necesitamos el bucle para correr. Romper se acabó. Encontramos el primer número malvado. Nos vamos de aquí. El Asegúrate de tus pestañas. Recuerda que la tabulación es sumamente importante, ¿de acuerdo? E y L s deben estar en la misma pestaña, derecha, la misma sangría, Así que s simplemente imprimir, digamos, imprimir. Yo agrego mis corchetes y luego mis abrigos siguen buscando ese número par. Y ahí está. Bien. Sigamos ahora mismo. Ejecuta el programa, y ahí está. Sigo buscando ese número par. Sigo buscando ese número par. Sigo buscando ese número par. Oh, mira, encontramos el primer número par, y el número es ocho. Este es el uso de la declaración break. Ahora, vamos a usarlo en una L. salvaje Ahora para hacer esto, voy a llegar hasta aquí abajo. Y vamos a crear un programa muy sencillo que le pida al usuario que escriba algo como o escriba una letra en particular, y siempre y cuando la letra no sea igual a Q, entonces simplemente siga pidiéndole al usuario una nueva letra, ¿de acuerdo? Entonces esa es básicamente la condición que hay que satisfacer. Entonces mientras el usuario está escribiendo ABCDEF, siempre y cuando no sea Q, siga pidiéndole al usuario que ingrese una Entonces voy a decir si bien cierto, lo que hace esto ahora mismo, esta es una función o loop muy simple en Python que automáticamente ha creado una condición que siempre es verdadera a menos que suceda algo más. Recuerde que con los bucles salvajes, necesita haber una condición particular que debe satisfacerse continuamente para que el bucle funcione realmente, y luego debe terminarse una vez que se haya cumplido una condición muy específica. Entonces vamos a asumir ahora mismo que la condición siempre es cierta, y ahora voy a escribir entrada de usuario. Esta va a ser la variable que representará la letra que el usuario realmente va a escribir. Entonces voy a decir que la entrada del usuario es igual, y ahora entrada, recuerda la entrada de la función, que ahora le pedirá al usuario que escriba algo. Entonces voy a decir, ingrese una letra y luego entre paréntesis, voy a decir, Oh, escriba Q. Bien. Escriba Q para salir del programa. ¿Bien? Entonces estamos dando una opción a los usuarios de aquí, ¿de acuerdo? Puedes o simplemente escribir una letra o si quieres salir del programa, solo tienes que escribir Q, ¿de acuerdo? Entonces voy a presionar Enter. Así que ahora vamos a escribir la condición que debemos necesitar para comprobar si la entrada era o no realmente Q. Así que voy a entrar ahora mismo, añadir la instrucción If. Entonces vamos a comprobar si la entrada del usuario es igual a P. ¿Qué debemos hacer? Bueno, voy a decir imprenta. Entre paréntesis. Y voy a decir que has optado por salir del programa. Elija salir del programa. Presiona Enter, y ahí está. Y ahora ya que han optado por oh, permítame agregar aquí las citas de cierre. Ya que han optado por salir del programa, ahora vamos a romper el bucle. De lo contrario, voy a entrar aquí ahora mismo y luego decir imprimir. Y ahora los códigos F, mecanografiados. Y ahora, recuerden, entre llaves, voy a decir usuario en las entradas de partitura. Y ahí está. ¿Bien? Ve a seguir adelante ahora mismo. Ejecute el programa. Bien, entonces ahora está diciendo Ingresa una carta, voy a decir Y. Presione Enter. ¿Bien? Ahora dice, Bien, tecleaste Y. Ingresa otra letra, voy a decir A. Una vez más, se está ejecutando hasta que ahora tecleé Q, y ahora ha terminado el programa Y esto de aquí mismo estamos combinando la declaración de nuestro Wil, el Wile Loop más bien con la declaración break Así que déjame repasar por esto otra vez. Sé que podrías tener una pregunta, por qué no escribimos la s Porque tenemos la declaración I. Entonces, ¿dónde está el s? Bueno, en realidad podríamos agregar el s. Va a estar justo aquí, y yo solo diré se. Y luego el byte tabulador aquí imprime, usted escribió esto. Así puedo seguir adelante ahora mismo. Ejecute exactamente el mismo programa nuevamente. ¿Bien? Viniendo aquí ahora mismo, tecleando G. Funciona bien, mecanografiando, funciona bien, tecleando Q, enter, y ahora funciona exactamente de la misma manera. Entonces, una cosa que debes entender aquí es que la razón por la que la declaración else es realmente opcional aquí es porque estamos trabajando con el wild true loop, la condición. Entonces va a asumir automáticamente que la condición siempre será cierta. Y ahora estamos usando la declaración break aquí para controlar intencionalmente cuándo terminaría realmente el bucle. Entonces realmente no hay necesidad de la declaración de Ls aquí. El bucle siempre se ejecutará porque hemos dicho Wild true y solo nos detendremos a través la sentencia break una vez que el usuario haya escrito la letra Q. Entonces realmente, la declaración Ls aquí no es necesaria Aún puedes teclearlo. El programa seguirá funcionando perfectamente bien. Pero siempre que estés caminando con la verdadera salvaje y luego las declaraciones break, ya no necesitas agregar la condición Ls. Así que hemos hecho bastante en este video en particular. Ojalá hayas podido seguir y ojalá ahora entiendas cómo se usa la declaración break. Muchas gracias por ver el video. Te veré en la siguiente clase. 24. Intenta excepto declaraciones: Bueno, vuelve. En la lección anterior, creamos con éxito este programa en particular que aceptará entrada, números positivos del usuario. Estudiará números en una lista, y continuará haciéndolo hasta que el usuario escriba la palabra hecho. Y al final del mismo, se imprimirá si había un número par, imprimirá cuál fue el primer número par y también eventualmente imprimirá todos los números de la lista. Sin embargo, una cosa que descubrimos fue que cuando ejecutamos el programa y agregamos, digamos, por ejemplo, en lugar de un entero real como ocho o nueve, agregamos, digamos, 8.6, ¿verdad? Cuando presionamos Enter, terminamos teniendo esta flecha particular valor de mensaje flecha. Ahora bien, si volvemos a ejecutar el programa, y en vez de 8.5, dije, ya sabes, IOF, escribí letras en su lugar, presiono Enter Se puede ver una vez más que también tenemos exactamente el mismo error. Y eso es porque nuestro programa ha sido creado de tal manera que se espera que sólo reciba números positivos. Si ejecutamos el programa una vez más y escribí, digamos, menos seis, que es un número negativo y presioné Enter, se puede ver que en realidad funciona de alguna manera Sí acepta el seis negativo porque es un número real. Simplemente pasa a ser negativo. Pero eso sigue derrotando el propósito porque solo queremos que el usuario escriba números positivos Por lo que ni siquiera debió aceptar este seis negativo. Así que sí tenemos bastantes problemas con nuestro programa en particular, y necesitamos introducir ahora algo conocido como el bloque try y luego el accept block. Entonces el tri block en Python es básicamente parte de lo llamamos un mecanismo de manejo de excepciones, que básicamente nos permitiría capturar y manejar errores que pudieran ocurrir durante la ejecución de nuestro código. Entonces, si ocurre un error dentro del tri Block, el programa no se bloqueará. En su lugar, se capturará el error y luego se ejecutará el código dentro del bloque excepto asociado. Ten en cuenta que no se trata solo los usuarios cometan un error cada vez que teclean sus entradas. También es posible que un hacker intente deliberadamente insertar valores que el programa no aceptará en un esfuerzo por bloquear realmente el programa. Es por ello que debemos asegurarnos siempre de que nuestros programas, siempre que acepten entradas del usuario, creamos y diseñemos los creamos y diseñemos de tal manera que sean capaces de manejar nuestras entradas equivocadas del usuario. Entonces, ¿cómo vamos a atrapar ahora algún error en particular? Bueno, voy a venir aquí. Estamos rompiendo, ¿de acuerdo? Entonces, la razón por que estamos comenzando aquí es porque aquí es donde vamos a verificar si el usuario ha agregado o no la palabra hecha o un número real. Entonces, después del descanso, ¿verdad? Después de descanso porque break comprobará, Bien, ¿ya está hecho? Si no se hace, entonces ahora se va a ejecutar. Aquí es donde ahora vamos a escribir las palabras o mejor dicho la palabra try porque aquí es donde queremos que el programa coja una flecha si la hay. Entonces ahora va a ser try y luego colon. Y ahora esto de aquí, simplemente podemos tabular eso Bien, déjame presentarlo justo aquí. Entonces estamos diciendo aquí mismo que si el usuario escribe en hecho, simplemente rompa el programa. Lo siento, rompa el lazo. Sin embargo, si es un número real, verifiquemos para ver si ese número es positivo. Entonces en este momento tenemos la variable de crédito NUM hemos agregado la entrada del usuario a NUM. Entonces ahora, comprobemos para ver si es positivo. La forma más fácil de verificar sería simplemente decir si el número es menor que cero. Esta es la forma más fácil de verificar. Si el número es, de hecho, menor que cero, vamos a decir print, por favor ingrese un número positivo. Ahora s porque después de que yo venga. Ahora se si de hecho fue un número positivo, ahora simplemente vamos a anexar Vamos a añadir la variable num dos números, y eso es todo aquí mismo ¿Bien? Y finalmente, porque tenemos try, vamos a cerrarlo usando la declaración accept. Entonces básicamente, lo que estamos haciendo aquí mismo estamos diciendo, Oye, si el valor proporcionado por el usuario era, de hecho, menor que cero, entonces imprime, por favor ingresa un número positivo. Pero entonces, ¿y si el usuario no escribió un número? Y si escribieran letras o cadenas, básicamente, ¿verdad Entonces aquí es donde va a entrar ahora el excepto. Entonces vamos a decir excepto error de valor, ¿de acuerdo? Entonces, si hay un error real dentro del valor en sí porque no es un número, ahora va a decir, imprima, por favor ingrese un número válido. Y eso es todo ahí mismo. Entonces intentemos ver si esto va a funcionar. Entonces voy a seguir adelante ahora mismo, ejecutar el programa. ¿Bien? Entonces lo que voy a hacer ahora mismo es que voy a negativo seis, presione Enter. Se puede ver aquí mismo, dice, Por favor ingrese un número positivo. Pero y si escribí una cadena como esta, por ejemplo, ahora dice, por favor ingrese un número válido Ve cómo funciona esto, ¿verdad? Así que déjame guiarte a través de todo de nuevo. Básicamente, aquí mismo donde estamos aceptando la entrada del usuario. Queremos verificar para asegurarnos de que en realidad es un número positivo. La mejor manera es que si ese número es menor que cero, entonces sabemos que es negativo, podemos imprimir. Por favor, introduzca un número positivo. Si por otro lado, es mayor que cero, sabemos que es un número positivo. Podemos seguir adelante ahora mismo y agregar el entumecido a la lista de números Y ahora tendremos que decir, Bien, pero ¿y si hubiera un error real dentro del tipo de entrada que insertó el usuario? A lo mejor no fue un número positivo. A, tal vez ni siquiera fue un número negativo. A lo mejor fue como letras o palabras o algo completamente diferente. Entonces podemos decir, Por favor ingrese un número válido. Ahí es donde entra en juego el excepto. Entonces eso es todo para el try and except declaraciones. Gracias por ver el video. Te veo en la siguiente clase. 25. Continuar declaración: Antes de redondear la sección sobre bucles y control de flujo, quiero echar un vistazo a una declaración más, y esa va a ser la declaración continue. Hasta ahora, hemos estado trabajando con la declaración break, y esto por supuesto se usa para terminar el bucle una vez que se ha cumplido una condición en particular. Pero y si por una razón u otra, simplemente quisiéramos saltarnos una iteración en particular o parte de un bucle No queremos terminar el bucle exactamente. Sólo queremos saltarnos un paso en particular. Aquí es donde entra en juego continuar. Déjenme dar un ejemplo. Déjame simplemente quitar este código. Digamos para número en ningún rango 16. Ahora, probablemente te estés preguntando qué es exactamente el rango. Rango aquí es simplemente una función incorporada dentro de Python, que generará números entre un cierto rango En este caso, ahora mismo, estamos diciendo números 1-6. No obstante, por favor, ten en cuenta que cuando estés trabajando con la función range, el primer número aquí, que es uno, será inclusivo mientras que el último número aquí, que es seis, no será inclusivo para ser exclusivo. Si yo fuera a decir simplemente, bien, simplemente imprima y luego entre paréntesis, solo imprima el número. Ya verán ahora mismo que vamos a conseguir uno, dos, tres, cuatro, cinco. Por favor, tenga esto en cuenta. Ahora, la función por defecto imprimirá uno, dos, tres, cuatro, cinco. Pero, ¿y si quisiéramos saltarnos tres en este caso? Queremos si vamos a imprimir uno, dos, cuatro, y luego cinco, ¿cómo vamos a hacer esto? Aquí es donde va a entrar en juego el enunciado continuo . Pero antes que nada, necesito crear la declaración If para verificar si el número es igual a tres, ¿verdad? Entonces ahora estoy diciendo, si es igual a tres, solo continúe. No necesito agregar la declaración aquí porque cuando se está trabajando con la declaración continua, se entiende. Python simplemente dirá, una vez que llegue a tres, voy a saltarlo. Voy a saltarme tres y luego simplemente continuar con el resto del bucle. Ahora bien, si tuviera que ejecutar el programa, ahora pueden ver que es uno, dos, cuatro, y luego cinco. Así es básicamente como funcionaría la declaración de continuar. Déjame darte otro ejemplo muy rápido. Y si ampliara el rango aquí de uno a digamos 11. Pero ahora queríamos verificar los números que son pares y luego simplemente mantener esos números pares, solo queremos imprimir los números impares. Otra vez, ¿cómo vamos a hacer esto? Primero que nada, verifiquemos para ver si es divisible por dos así que voy a decir porcentaje y luego dos aquí mismo es igual a lo que equivale a cero en mi columna ahora simplemente voy a decir simplemente continuar y luego imprimir número Ahora si programa sterni, ahora se puede ver que es simplemente uno, tres, cinco, siete y nueve Así es como funciona realmente la declaración continue. Permítanme dedicarme solo 1 minuto a hablar un poco más sobre la función de rango. Hay una cosa más. De lo que debes estar al tanto. Lo que pasa con la función range es que en realidad puede aceptar tres valores. Como ejemplo, permítanme agregar mi etiqueta hash. Por ejemplo, con rango, puedes tener algo como uno, diez, y luego dos. La función range puede aceptar tres parámetros diferentes, ¿verdad? Entonces, si te estás preguntando, ¿qué van a ser exactamente ? Bueno, el primer número aquí representa el valor inicial, que es uno el segundo aquí representará el valor stop, que va a ser diez, mientras que el tercer valor en este momento representará dos, que serán los pasos que deben omitirse Por defecto, déjame mostrarte cómo funciona esto en este momento. Si tuviera que venir aquí ahora mismo y luego decir uno, diez, o dos. Sólo como ejemplo, permítanme simplemente quitar el sepment continue aquí Bien. Si sigo adelante ahora mismo e imprimo estos números, verá que ahora es uno, tres, cinco, siete y nueve y? Porque nos estamos saltando cada dos. El paso va a ser dos, así que va a ir a uno, va a saltar a tres, va a saltar a cinco y así sucesivamente. Si tuviera que cambiar este ahora mismo a tres, puedes adivinar cuáles van a ser los valores? Ahora van a ser 14, siete. Entonces si ejecuto el programa, ahí van 147. Puede o no trabajar con la función de rango en el futuro, pero solo sentí que es importante que al menos entienda que la función de rango puede aceptar hasta tres parámetros diferentes. El primer valor aquí es el inicio, segundo es el número de parada, y luego el último valor aquí el número de paso y tenga en cuenta que el valor stop siempre es exclusivo. No va a ser incluido en los resultados reales de esa función de rango en particular. Lo último que hay que mencionar, lo último que hay que mencionar, también puede encontrarse una declaración en particular llamada la declaración de pase. Simplemente va así. En lugar de continuar, por ejemplo, verás pasar. El pase realmente no hace nada. Honestamente, realmente se usa para pasar comentarios. A lo mejor el desarrollador del programa no quiere ejecutar algo todavía pero quiere vivir como un nodo. Para eso se utiliza principalmente la declaración de pase. No vamos a estar trabajando con ello para nada. Entonces por ejemplo, aquí dentro, podría decir algo así como, Bien, pase y luego puedo agregar mi hash tag y puedo decir que agregaré la función más adelante. Sólo como ejemplo. Déjame seguir adelante y ejecutar el programa, y ya puedes ver, el programa sigue funcionando de todos modos, no va a hacerlo realmente no hace nada como tal. Eso es más o menos. Gracias por ver el video. Te veo en la siguiente clase. 26. Desafío de programación: Ok, dookie, ahora es el momento de que intentemos armar todo lo que hemos aprendido hasta ahora para escribir un programa Y el programa que queremos es el que le pida al usuario siga ingresando un número positivo o bien si quiere salir del programa, simplemente pueden escribir las palabras o la palabra hecha para salir del programa. Entonces básicamente, estamos diciendo, Oye, usuario, sigue sumando un número positivo. Sigue agregando el número. Sigue sumando número. Siempre que estés listo para salir del programa, solo tienes que escribir listo, ¿verdad? Ahora, como el usuario está escribiendo los números dos, tres, cuatro, nueve, 11, sea lo que sea, queremos agregar esos números a una lista. Queremos poder realizar un seguimiento de todos los números que el usuario sigue proporcionándonos. Entonces vamos a agregar esos números a una lista. Pero también queremos que el programa verifique los números eVo que el usuario ha agregado y realice un seguimiento del primer número EVO que se proporcionó para que podamos imprimir y decirle al usuario que, Oye, este fue el primer número par que agregaste, y luego podemos indicar cuál era ese número. De lo contrario, si el usuario agregó solo números impares, entonces simplemente podemos decir: Bien, no se encontraron números pares en tu lista. Ahora, una vez que el usuario ha agregado varios números y luego finalmente decide salir del programa, queremos que el programa imprima todos los números que fueron agregados por el usuario. Y si el usuario ni siquiera agregó un solo número, solo diga que no hay guerra de números en no es difícil. Bien. Entonces, abordemos esto paso a paso. En primer lugar, vamos a querer una lista, ¿no? Llamemos a esos números de lista, ¿de acuerdo? Entonces vamos a estar sumando todos los números ingresados por el usuario. Vamos a agregarlos a esta lista llamada números. Entonces, obviamente, vamos a hacer uso de la función de entrada para, ya sabes, solicitar al usuario que agregue números, ¿verdad? Bien. Y vamos a tener que crear un wild loop en este escenario porque queremos que el usuario siga agregando un número o proporcionando un número hasta que elija salir del programa. Entonces podemos decir, ya sabes, si bien es cierto, y luego el usuario sigue sumando un número. Y luego queremos comprobar si el número que proporcionó el usuario era en realidad un número par. ¿Bien? Así que vamos a tener que tener algún tipo de declaración de El que comprobará si el número, si es derrotable por dos, ya sabes, si eso equivale a cero, ya sabes, entonces imprime, número par, ya sabes, cosas como Ya sabes, de lo contrario, solo di que no, incluso se encontraron números. Pero, ¿qué más? Recuerda que también queremos seguir sumando los números que el usuario nos ha proporcionado. Queremos agregarlos a la lista llamada números. Entonces vamos a tener que anexar entrada del usuario a la lista de números, ¿verdad Y vamos a hacer uso de una nueva función aquí llamada Append Bien, no te preocupes. Te voy a mostrar cómo funciona eso. ¿Qué más necesitamos hacer un seguimiento? Eso es prácticamente todo en este punto, ¿verdad? Entonces Primero que nada, creamos nuestra lista llamada números, y ahí vamos a tener que solicitarle al usuario que agregue los números, verifique para ver si los números son pares. Una vez que se haya encontrado el primer número par , que el programa realice un seguimiento de eso y luego al final imprima cuál era ese número par. Y luego, por supuesto, también al final del programa, la mayoría de los usuarios ha decidido salir de él, simplemente imprimir todos los números que el usuario agregó. Así que vamos a hacer esto, ¿verdad? Vamos a alejar esto y comencemos. Entonces lo primero es lo primero, vamos a crear nuestra lista vacía que contendrá todos los números proporcionados por el usuario. Así que los números son iguales, y luego vacíos, ¿de acuerdo? Entonces el primer paso que vamos a hacer. Ahora, solicitemos al usuario que agregue el número. Entonces voy a decir while y ahora true colon ahora queremos pedir al usuario que proporcione algunos números. Sin embargo, tendremos que asignar entrada de usuarios a una variable. Entonces digamos usuario en la entrada de subrayado. Bien, esto representa lo que el usuario agregue. entrada del usuario aquí es igual a los corchetes de entrada, y ahora vamos a solicitar al usuario que ingrese un número positivo. ¿Bien? O entre paréntesis, también podrían simplemente escribir tipo hecho para terminar. ¿Bien? Hasta ahora tan bien, hemos asignado números. Tenemos nuestra lista vacía ahí mismo. Esto recopilará los números proporcionados por el usuario, y ahora hemos creado un bucle para solicitar al usuario que siga agregando un número positivo o tipo hecho si decide terminar. Entonces, lo que vamos a hacer ahora mismo es que verifiquemos para ver si el usuario realmente ha escrito las letras hechas o tecleadas hechas Bien, porque no queremos que el producto siga funcionando si el usuario decide escribir done. Entonces voy a decir si usuario En la entrada de partitura es igual a hecho. Si estos son realmente tipos hechos, ¿qué vamos a hacer? Lo adivinaste, vamos a romper el lazo. Bien, déjame agregar algo de espacio aquí. ¿Bien? Todo bien. Así que hemos comprobado para ver si dieser ha escrito hecho si rompieron No obstante, si escribieron un número positivo real, ¿qué queremos que haga el programa? Queremos que el programa agregue ese número a la lista de números. ¿Bien? Entonces, ¿cómo vamos a hacer esto? Necesitamos algo para representar los números que nos proporcionará el usuario. En este caso, ahora mismo, no lo enrosques. La variable de entrada del usuario aquí es simplemente representar la entrada aquí, ingresar un número positivo o escribir done to finish. Eso es lo que representa aquí. Los propios números reales tendrán que crear una nueva variable para eso. Entonces para la variable de aquí, voy a decir num. Bien, num va a ser igual a dos, yo NT, recuerda la función entera que convertirá lo que sea que escriba el usuario. Entonces no va a ser entero y ahora subrayado de entrada. ¿Bien? Entonces básicamente, lo que sea que escriba el usuario en esta línea aquí mismo donde decimos ingrese un número positivo, si el usuario escribe en 5.2, por ejemplo, ¿bien? Convierte 5.2 a un entero, que ahora será cinco y luego asignará cinco a la variable llamada número NUM. Ahora el siguiente paso será agregar este número que el usuario ha agregado a la lista de números. ¿Y cómo lo hacemos? Voy a escribir números y ahora echa un vistazo a esto punto append Y ahora entre paréntesis NUM. Entonces aquí mismo, este append va a ser la función que ahora comenzará a agregar los números agregados por el usuario a la lista de números Vamos a repasarlo una vez más. Entonces, antes que nada, tenemos nuestra lista vacía llamada números. Vamos a crear el bucle llamado Wil que solicitará al usuario que siga agregando un número positivo. Sin embargo, si escribieron hecho, si la entrada del usuario es igual a hecho, rompa el bucle, sin necesidad de continuar Pero si el usuario realmente agregó números reales, asigne esos números a una variable llamada Num NUM, y ahora comience a anexar esos números a la lista de números Hasta ahora tan bien, ¿ qué más queremos hacer? Queremos verificar si está agregando algún número par. Entonces, ¿qué vamos a hacer? Vamos a crear un bucle de cuatro. ¿Bien? Ese bucle va a pasar por todos los números de la lista de números y luego encontrar el primer número par. Entonces echa un vistazo a esto. Voy a decir cuatro num N en qué? En números. Así es. Ahora, agreguemos dos puntos. Vamos a crear la declaración I L. Entonces, si num dividido por dos es igual a cero, ¿ qué queremos que diga el programa? Queremos programar para decir imprimir. Y ahora nuestros corchetes. Vamos a agregar nuestra cadena F, y luego podemos decir, encontramos el primero el primer número par. Y luego, claro, llaves rizadas, y luego NUM. ¿Bien? De lo contrario, si el número que fue agregado por el usuario ni siquiera es simplemente romper. Vamos a romperlo, ¿de acuerdo? Y ahora podemos agregar nuestra declaración para hacer algo podemos decir s dos puntos y ahora vamos a decir imprimir cuando dices que no se ingresaron números pares por el usuario. Y ahí está. No obstante, nuevamente, la identación es muy, muy importante Ten en cuenta que esto es debajo de los cuatro, ¿de acuerdo? Entonces no es Es más bien. Es la declaración de las cuatro s aquí. Así que solo asegúrate de no cometer el error theidntons van a ser muy, muy, muy, muy, muy importantes Entonces es básicamente cuatro y luego num en números. Si num dividido por dos es igual a cero print, encontramos el primer número y luego imprimimos cuál es el número. De lo contrario, simplemente rompa el bucle una vez que se haya encontrado ese número, una vez que se haya encontrado el primer número positivo. Lo sentimos, se ha encontrado el primer número par. Y entonces, si el usuario no agregó ningún número par, simplemente imprimen no ingresaron números pares por el usuario. Bien. Por último, pero no menos importante, ahora tendrá que imprimir todos los números que el usuario haya agregado al final del programa. Entonces voy a salir aquí ahora mismo, agregar la nueva declaración If y simplemente decir si número. Entonces, si el usuario realmente agregó algunos números, entonces si los números, adivina qué, simplemente imprima. Y ahora vamos a decir F y ahora codifica los números que ingresaste R y luego llaves Ahora, los números. De lo contrario, así que eso va a ser s. Simplemente imprime. Es decir, si el usuario no agregó ningún número, podemos decir que el usuario no ingresó ningún número. Oh. Intentémoslo. Voy a seguir adelante ahora mismo. Ejecute el programa. Y, oh, entonces tenemos un pequeño problema aquí mismo. Dice la línea 23. Bien, imprima F. ¿Qué hice mal aquí? Oh, no debería haber ningún espacio. Lo siento. No debería haber ningún espacio ahí mismo. Ya ves como un solo espacio puede arruinarlo todo. Es un poco exasperante, pero, sí. Entonces, siempre que estés usando las cadenas F, asegúrate de que no haya espacio entre la F y tu código. Entonces intentemos eso otra vez. Corre. Bien, entonces voy a agregar uno. Bien, agreguemos tres. Agreguemos cuatro. Bien, agreguemos cinco. Agreguemos ocho. Agreguemos seis. Y ahora voy a escribir hecho, Enter, y ahí tienes. El primer número, el primer número par, era cuatro, y ahora hemos escrito los otros números que son uno, tres, cuatro, cinco, ocho y seis Entonces puedes ver ahora mismo, el programa realmente funciona. Entonces déjame repasar el programa una vez más. En primer lugar, creamos una lista llamada números. Esto contendrá cada número positivo agregado por el usuario. A continuación, creamos el bucle while que continuamente solicitará al usuario que siga agregando un número positivo, o si elige no hacerlo, simplemente pueden escribir la palabra done para terminar el programa. Así que ahora necesitábamos verificar si el usuario realmente escribió hecho Y por cierto, déjame incluso probar eso. Bien, vamos a correr, y vamos a escribir hecho al instante y ver. Bueno, ahí tienes. Entonces el programa funciona muy, muy bien. Entonces en realidad se comprueba para ver, oye, ¿este usuario tecleó hecho? Oh, lo hizo. Bien, así que si escribimos hecho, entonces simplemente rompemos el bucle Ya no necesitamos ejecutar el loop porque el usuario ha escrito en done Entonces en ese caso, ahora mismo, en este escenario en el que el usuario ha escrito hecho, básicamente, todo esto todo esto aquí mismo es completamente irrelevante, ¿de acuerdo? aquí mismo es completamente irrelevante, El programa Python pasará directamente de esto desde la declaración break, hasta aquí abajo a simplemente decir: Oye, antes que nada, todo el camino aquí mismo. En primer lugar decir: Oye, no se ingresaron números pares por el usuario. Y luego finalmente, no se agregaron números por parte del usuario. Entonces todos los nomicals integer, va a saltarse todo eso Pero, ¿y si el usuario realmente escribió un número? ¿Qué queremos que haga el programa? Bueno, queremos agregar ese número a nuestra lista de números. Entonces necesitamos asignar la entrada del usuario a una variable. En este caso, en este momento, creamos una variable llamada Num que representará la entrada proporcionada por el usuario. Y también agregamos el INT. De hecho, probemos esto y veamos. Voy a decir 4.5 Entra y oh oh, oh, oh. Bien. Aquí hay un pequeño problema, ¿tienes un mensaje de error? No te preocupes. Te voy a mostrar cómo podemos manejar los errores en el siguiente video. Bien, B, déjame dirigir esta una vez más, ¿de acuerdo? Y escribe, digamos, cinco, ¿de acuerdo? Escriba en cinco, escriba en ocho, listo. Bien, así que sigue funcionando bien. Así que nos aseguramos de haber asignado los números agregados por el usuario a la variable llamada NOM, y luego agregamos NOM a la lista de números usando esta función particular escribiendo números punto append y num, ¿de acuerdo? Ahora, debido a que el usuario en realidad agregó algunos números, queríamos que el programa verificara si alguno de esos números era realmente par. Y al hacerlo, tuvimos que crear un bucle que recorriera todos los números de la lista de números. Y entonces si el número era divisible por dos sin resto, simplemente di, Bien, encontramos el primer número par, impresora ese número De lo contrario, si el usuario no sumó ningún número par, simplemente diga que el usuario no ingresó ningún número par. Y al final del día, simplemente imprime los números que fueron agregados por el usuario. Y si el usuario no agregó ningún número, simplemente diga que ningún número fue terminado por el usuario. Eso es exactamente lo que hicimos aquí. Entonces, siéntete libre de pasar por este programa tantas veces como necesites. Ojalá fuera relativamente sencillo. Y claro, como siempre, si tienes alguna duda sobre algo hayamos hecho aquí y que no estés, ya sabes, estás exactamente seguro, siempre siéntete libre de comunicarte estaré más que feliz responder cualquier pregunta que tengas. Por lo que Jomini Vernick Video web ahora comenzará a echar un vistazo a cómo podemos manejar los errores en 27. Introducción a la sección de funciones: Ven a la flamante sección donde vamos a echar un vistazo a las funciones, y te garantizo que ningún curso programación estará completo sin hablar de funciones, ¿de acuerdo? Las funciones son extremadamente importantes, y lo creas o no, en realidad hemos estado trabajando con algunas funciones, e incluso ya hemos creado algunas de nuestras propias funciones. En este curso. aún no lo sabes. Entonces en esta sección, vamos a enfocarnos en las funciones. Te voy a mostrar cómo puedes crear tus propias funciones personalizadas, y luego cómo puedes usar algo conocido como los parámetros, ¿bien? ¿Con qué queremos que trabaje nuestra función? Qué tipo de tipos de datos, cosas así. También vamos a echar un vistazo a argumentos de palabras clave, variables locales y globales, y mucho más. Y al igual que con las secciones anteriores, va a haber un ejercicio de codificación al final de la sección. Entonces, por favor, inténtalo. Ojalá puedas pasar. Si no, no te preocupes, te voy a dar la solución. Entonces, sin perder más tiempo, comencemos a hablar de funciones. 28. Definir e invocar funciones: Bien, así que bienvenidos a esta nueva sección de Bn donde vamos a echar un vistazo a las funciones, ¿verdad? Y hasta ahora tan bueno, en realidad hemos estado trabajando con un buen número de funciones preconstruidas dentro de Python. Entonces funciones como la impresión, entrada, rango, etc., todas realizan un tipo particular de operación. Sin embargo, ¿y si quisiéramos crear nuestras propias funciones personalizadas? ¿Cómo podemos hacer eso? Bueno, para hacerlo, vamos a tener que definir primero el nombre de la función, y luego decidir si esa función va a aceptar o no lo que llamamos parámetros. Y entonces también podemos decir, Bien, esta función sumará estos números o va a hacer algo. Y luego finalmente, podemos optar por devolver un valor dentro de esa función. Entonces va a ser algo así. Tendrás DEF, que va a ser la función para definir el nombre de la función, y luego puedes elegir tener parámetros dentro de esa función, ¿de acuerdo? Y entonces tendremos el cuerpo de función. Entonces, ya sabes, agrega A más B, agrega esto, haz esto, divide esto, revisa para ver si este bucle es verdadero, cosas así. Básicamente, sea lo que sea que haga la función. Y luego finalmente, entonces podemos optar por devolver un valor, que por cierto, esto va a ser opcional. No siempre tenemos que devolver un valor cada vez que estamos creando nuestra propia función. Déjame darte un ejemplo muy, muy básico. Entonces digamos porque queríamos crear una función que imprima las palabras hola mundo, ¿verdad? Podemos decir DF, y luego puedo llamar a mi función Grit Entonces el nombre de mi función va a ser GET y luego puedo agregar mis corchetes en los dos puntos y luego terminar hub. Por cierto, fíjate que no he agregado ningún parámetro dentro de los corchetes de aquí. Los parámetros son opcionales, ¿de acuerdo? Sin embargo, voy a entrar ahora mismo y luego definir qué va a hacer realmente la función. Voy a decir imprimir. Ahora voy a proporcionar las palabras hola mundo. Y ahora todo lo que tendría que hacer es simplemente llamar a la función. ¿Y cómo hago eso? Voy a saludar. Y luego los paquetes, y ahí está. Entonces ahora si para ejecutar el programa, ahí tienes, simplemente dice hola mundo. Entonces, una vez más, empezamos dando el nombre saludo a nuestra función. Y entonces ahora dijimos qué debía hacer la función. La función debe imprimir hello world cada vez que llamamos o usamos esa función. Y luego aquí mismo, simplemente llamamos a la función simplemente diciendo grit y luego entre paréntesis, y ahí tienes Entonces esta de aquí es una de las clases más básicas de funciones que podemos crear. Pero eso es todo. Jerman Vanex Video Ware ahora comenzará a echar un vistazo a los parámetros y argumentos de las funciones. Te veré entonces. 29. Parámetros y argumentos: Bueno, bienvenido de nuevo. Ahora, hablemos de parámetros y argumentos. Ver, un parámetro es básicamente una entrada que podemos agregar a una función para personalizar su comportamiento. En este caso, ahora mismo, en el ejemplo anterior, el nombre de la función, que es grid, no tenía ningún parámetro en absoluto. Básicamente está vacío. Por eso cuando dijimos, Bien, imprime y luego simplemente hola mundo, y luego llamamos a la función, todo lo que simplemente hizo fue simplemente decir hola mundo. Pero, ¿y si ahora queremos agregar un parámetro particular en su interior? En este caso, ahora mismo, voy a entrar aquí ahora mismo y decir nombre. ¿Bien? Entonces el perímetro aquí mismo se llama nombre, y ahora quiero que mi función diga hola y luego el nombre que se proporcionará. Así que voy a venir aquí ahora mismo. Vamos a usar la cadena F, y ahora voy a agregar mis llaves, corchetes más bien y llamarlo nombre ¿Bien? Entonces ahora, mira esto. Cuando estoy llamando a mi función ahora mismo, puedo agregar lo que llamamos el argumento. Cuando le estás pasando un valor a la función, se va a convertir en un argumento. Tenga en cuenta la diferencia entre parámetros y argumentos. Aquí arriba, cuando estemos definiendo por primera vez la función, vamos a usar el parámetro. El parámetro básicamente está diciendo: Oye, te estamos proporcionando esta entrada, y voy a usar esta entrada para personalizar cómo se comportará la grilla de funciones. Sin embargo, una vez que se ha creado la función, hemos dicho lo que se supone que debe hacer la función. En este caso, ahora mismo, hola y luego nombra el perímetro. Cuando llamamos a esa función, cuando queremos aportar un valor, se va a convertir en lo que llamamos un argumento. Entonces en este caso, ahora mismo, si quería saludar, digamos, Alice, por ejemplo, ¿verdad? Alice ahora mismo es el argumento, y si yo fuera a ejecutar el programa, ahí tienes. Dice: Hola Alice. ¿Y si quisiera saludar, digamos, Bob? ¿Correcto? Bob, sigamos adelante, ejecutemos el programa, y ahí está. Hola Bob. Se trata de perímetros y argumentos. Sin embargo, también podemos tener múltiples parámetros en nuestra función. Hasta ahora, sólo hemos estado trabajando con un solo parámetro, que es name. ¿Y si quisiéramos crear una función que sume dos números juntos? ¿Cómo vamos a hacer eso? Bueno, podemos comenzar definiendo el nombre de la función. Entonces voy a llamar a esto sumar números. Agregar números será el nombre de la función. Y ahora dentro, vamos a proporcionar dos parámetros que van a ser A y B, dos puntos, ¿bien? Ahora, devuelve A más B. Aún no hemos hablado de la función return o return statement. Lo que hace aquí el retorno es que simplemente va a devolver el valor de una operación en particular. En este caso, ahora mismo, va a devolver los valores de A y B cuando se sumen juntos. Eso es lo que hace el retorno. Entonces ahora voy a entrar aquí y decir resultado. ¿Bien? El resultado va a ser igual para sumar números. ¿Bien? Y ahora dentro, puedo sumar los dos números que quiero agregar, digamos cinco y seis. Y ahora todo lo que voy a tener que hacer es simplemente imprimir el resultado. Y ahí está. Si quiero mi función, ahí van 11. ¿Ves cómo funciona esto? En primer lugar, creamos una función, pero usando la función definida llamada add numbers. Ese es el nombre de nuestra función. Y luego dijimos: Bien, nuestra función va a recibir dos parámetros, A y B. Y ahora con el retorno, básicamente estamos definiendo qué va a hacer la función. Va a devolver el valor de A más B. Ahora, todo lo que tenemos que hacer es crear una variable que almacene el valor de nuestra función. Entonces ahora la variable aquí se llama resultado, que es igual al número de anuncio. El nombre de la función se llama ahora mismo con los dos valores que son cinco y seis, y ahora simplemente imprimimos resultado, que es igual a 11. Así es exactamente como parametrizar argumentos y también funciona la función return Por cierto, antes de redondear el video, una palabra muy rápida sobre el comunicado de retorno. Se usa para dos propósitos principales, ¿de acuerdo? El primer propósito suele ser salir de una función. Entonces puedes usarlo para detener la ejecución de la función. En segundo lugar, devolver un valor real. Entonces, como ejemplo, déjame mostrarte muy rápido. Si dije definir y luego saludar. Bien, déjame agregar parámetros vacíos aquí. Y yo dije, imprimir hola. Y luego dije regreso Bien, pero luego después de regresar en otra línea, también digo imprimir Y entonces, digamos, déjame decir, como abrigos, hola Jack incluso puedes ver ahora mismo que dentro de nuestra repleta el texto en sí está un poco ajustado, es decir, que Python no ejecutará esta línea en particular Entonces, si tuviera que correr, ya pueden ver, no hace absolutamente nada en absoluto, pero eso es porque aún no he llamado a la función. Entonces déjame venir aquí y decir saludos y luego corchetes, y ahí tienes Entonces, si tuviera que ejecutar la función ahora mismo, se puede ver que todo lo que dice va a ser hola. ¿Por qué? Porque regresar aquí mismo significa que, oye, detener la ejecución de la función, no debería ir más allá de esta línea en particular Y por eso sólo tenemos hola. No obstante, si tuviera que quitar la declaración de retorno, y vuelvo a ejecutar el programa, se puede ver ahora mismo que dice hola y luego hola Jack. Entonces este es otro uso de la sentencia return, pero puedes usarla para detener la ejecución de la función, o como te mostré anteriormente, puedes usar la sentencia return para devolver un valor en particular. Gracias por ver el video, los veré en la próxima clase. 30. Argumentos de palabras clave: Bueno, vuelve. Quiero que hablemos ahora de argumentos de palabras clave, ¿verdad? Funciones de Python, básicamente nos permiten pasar argumentos usando nombres de parámetros. Los nombres de parámetros son lo que denominamos palabras clave. Harán que un código sea más legible y flexible, especialmente cuando estamos tratando con muchos parámetros. Ahora, hasta ahora hemos estado tratando con parámetros como A, B, X, Y, pero déjame mostrarte algo más, ¿de acuerdo? Voy a crear una nueva función y llamemos esta función describir, subrayar persona, ¿de acuerdo? Entonces esta función va a describir el nombre de alguien, la edad, y digamos ciudad, ¿verdad? Entonces, permítanme agregar los corchetes ahí dentro. Y ahora aquí dentro, podemos agregar el argumento de la palabra clave. Entonces voy a decir nombre, edad, y luego digamos ciudad. Bien. Y ahora para la función real en sí misma, oh, perdón, me olvidé de agregar los dos puntos. Y ahora la función en sí misma, ¿qué va a hacer? Queríamos imprimir, Bien, John tiene 30 años y vive en Londres, solo como ejemplo, ¿verdad Entonces voy a decir print, bracket y ahora la cadena F. ¿Bien? Y ahora abrigos y ahora tirantes rizados Nombre espacio es llaves nuevo se llaman ahora el perímetro de edad El soporte es viejo. Y dejaré que Python termine el resto por mí. Y ahí está. Entonces básicamente, la función dirá: Bien, Alex tiene 100 años y vive en la ciudad de Nueva York, solo como Entonces echa un vistazo a esto. Voy a llamar a la función para que veas ahora mismo voy a llamar a Alice. Gracias, Python por brindar esta sugerencia. Entonces voy a decir que Alice tiene 25 años y vive en Entonces, si ejecuto la función ahora mismo, pueden ver que dice, Alice tiene 25 años y vive en Bastante sencillo, ¿verdad? No obstante, échale un vistazo a esto. También puedo llamar a la función proporcionando los valores para los propios parámetros . Mira esto, ¿de acuerdo? Puedo decir describir a la persona. Y ahora entre paréntesis, en vez de decir: Bien, Alex, 30, Londres, en cambio, puedo decir que la edad es igual a 30. Y ahora coma. Y entonces puedo decir que el nombre es igual a Bob City es San Francisco. ¿Vías lo que hice ahora mismo? En lugar de proporcionar los valores reales para los argumentos directamente, acabo de decir, Oye, voy a pasar los valores a los argumentos de palabra clave. Por lo que la edad será de 30. Se llama Bob, la ciudad es San Francisco. Y, claro, por favor preste atención al hecho que Bob y San Francisco son cuerdas. Por eso tienen los códigos dobles. Mientras que 30 es un número entero. No es una cuerda. Por eso no hay códigos. Entonces, si ejecuto la función, se puede ver ahora mismo que dice que Bob tiene 30 años y vive en A pesar de que aquí, la edad llegó primero. No dijimos que el nombre es igual a Bob y luego a la edad o a la ciudad. No. Eso es porque Python simplemente va a usar lo que hemos descrito en la propia función real. No va a importar el orden todos los argumentos. A Python no le importa eso. Todo lo que le importa a Python es, Bien, me has dado los argumentos de las palabras clave, bien. Y ahora esta es la orden. Se va a mirar la función que dice: Bien, imprime primero el nombre y luego tiene 8 años y luego vive Entonces estos son a los que nos referimos como los argumentos de palabra clave. No es probable que vayamos a trabajar con ellos más adelante en este curso, pero sin embargo, esto es algo que al menos debes tener en cuenta cuando estés trabajando con Python. Así que gracias por ver el video, los veré en la próxima clase. 31. Variables locales y globales: Bueno, bienvenido de nuevo. Una última cosa de la que quiero que hablemos antes de redondear la sección de funciones será el concepto de alcance variable. Ver, en Python, o de hecho, en cualquier lenguaje de programación, tenemos variables tanto locales como globales. Las variables tienen el alcance que determinará dónde se puede acceder a ellas. Ahora, las variables que están dentro de una función serán locales a esa función, y no se puede acceder a ellas fuera de esa función. Mientras que las variables que se definen fuera de cualquier función son globales como ejemplo, ¿de acuerdo? X es igual, digamos 12, ¿verdad? Esto aquí mismo es a lo que nos referimos como una variable global. ¿Por qué? Porque es por sí solo. No está dentro de ninguna función o cualquier bucle o cualquiera si más, es por sí solo. Es sólo que X es igual a 12. No obstante, si creé mi propia función y dije definir, subrayar, modificar, variable, corchete, dos puntos, y ahora dije, X es igual a tres La X aquí mismo será lo que llamamos una variable local porque está dentro de la función que se modifica en la variable score. Entonces la variable global de X es 12, la variable local de X es tres porque, nuevamente, esta tres justo aquí está dentro de la función modifivariable Así que echemos un vistazo a esto, ¿de acuerdo? Voy a decirle a mi función que imprima el valor de X, ¿de acuerdo? Y ahora, voy a llamar a la función modificar variable. ¿Cuál crees que va a ser el valor de X aquí? El valor de X aquí va a ser tres porque simplemente estamos llamando a la variable de función modificada, que ya tiene el valor de X para ser igual a tres. Entonces si ejecuto mi función, se puede ver que es justo ahí tres. Pero y si quisiera llamar a la variable global X es igual a 12. Quiero imprimir ese valor. Todo lo que necesito hacer es llamar al comando print default o print function four, Python, y luego simplemente decir print X. Ahora, si vuelvo a ejecutar el programa, puedes ver tres y ahora 12. De nuevo, debido a que esta impresión aquí mismo, no es la misma impresión que está bajo la función de modificar variable. Esta impresión aquí está destinada a producir o imprimir el valor de X, que es el valor local que está dentro de la función, modificar variable. No obstante, esta impresión X w aquí notará nuevamente la sangría No está dentro de esta función, está afuera. Entonces la X aquí va a ser la que pertenezca a la variable global, que es 12. Esa es la diferencia entre variables globales y variables locales. Si quisieras obtener este valor particular de X, que es tres, necesitarás llamar siempre a la función que alberga o que posee ese valor en particular, que es, por supuesto, variable modificada. Pero la variable global, puedes acceder a ella en cualquier lugar siempre y cuando no esté dentro de la función. Sin embargo, en realidad podemos modificar el valor de nuestras variables globales dentro de una función. Sí, podemos hacer eso. Mira esto, ¿de acuerdo? Voy a volver a mi función aquí, ¿no? Y justo debajo, voy a decir global X. solo usar la declaración llamada global, podemos modificar el valor global de X. Así que ahora estoy diciendo global X, X es igual a tres. En este caso, ahora mismo, simplemente estamos modificando la variable global. Eso es lo que estamos haciendo ahora mismo, simplemente vamos a modificar la variable global de X. Así que ahora, si llamé, si ejecuto mi programa, puede ver ahora mismo que en primer lugar, la variable modificadora de función X es igual a tres producirá tres. Y debido a que ahora hemos modificado la variable global de X para que ahora sea tres en lugar de 12, incluso cuando llame a la función print que está fuera de la función variable modificada, todavía va a producir tres porque, nuevamente, dentro de esta función, modificamos la variable global X. Cambiamos el volumen 12-3 usando la palabra clave global aquí mismo Entonces así es como también se pueden modificar las variables globales dentro de una función local. Muchas gracias por ver el video. Te veo en la siguiente clase. 32. Introducción a la sección de estructuras de datos: Bienvenido a la sección de estructuras de datos. Y aquí, nos vamos a centrar en tres tipos principales de estructuras de datos. Vamos a hablar de listas, diccionarios y conjuntos. Y, claro, voy a resaltarte las diferencias entre estos tres. Entonces vas a aprender exactamente qué hace que una lista sea diferente de un diccionario. Vas a aprender exactamente qué es un conjunto. Y luego una vez que hayas aprendido a crear tus propios conjuntos y diccionarios y listas, vamos a aprender a incorporar bucles en ellos. Entonces digamos, por ejemplo, tienes una lista de contraseñas y querías un bucle para pasar por cada contraseña y hacer algo, vas a aprender a hacer algo similar en esta sección en particular. Y, por supuesto, va a haber una gran variedad de diferentes ejercicios de codificación, así que por favor inténtelos. También van a haber dos retos de programación, que, por supuesto, voy a guiarte a través de cómo resolverlos. Y, por supuesto, al igual que con cualquier otra sección al final, vamos a tener el principal ejercicio de codificación que quiero que intentes. Así que por favor asegúrate de hacerlo sin perder más tiempo, vamos a saltar justo adentro. 33. Listas: Bien, entonces comencemos hablando de listas. Ahora, las listas no son nada nuevo para nosotros. De hecho ya hemos trabajado con bastantes listas. Hemos tenido listas de nombres, listas de autos, etc. Pero una cosa de las listas es que son lo que llamamos mutables Es decir, que los ítems o elementos que tienes en una lista, realidad podemos modificarlos, ¿verdad? Entonces podemos agregar a la lista. Podemos eliminar de la lista, y podemos modificar los elementos que ya existen dentro de esa lista en particular. Ahora, por aquí, tengo una lista de contraseñas comprometidas. Entonces, la contraseña habitual, uno, dos, tres, cuatro, cinco, QW, TY, y así sucesivamente Ahora, quiero mostrarte algunas cosas que podemos hacer aquí, ¿verdad? Puedo decir impresión, ¿de acuerdo? Y ahora entre paréntesis, puedo llamar a la lista contraseñas de compromiso. Y ahora puedo proporcionar el número de índice del ítem que quiero enumerar. En este caso, ahora mismo, es el índice número cero. Si ejecuto mi programa, puedes ver que va a ser contraseña. Entonces lo primero que quiero que entiendas es que los ítems de una lista, todos tienen números de índice a partir de cero. Entonces, si tuviera que imprimir el índice número dos, ¿ cuál crees que sería la respuesta? Sí, va a ser QWERTY. Bien, eso es lo primero que quiero que entiendas. A continuación está el hecho de que podemos realizar diversos tipos de funciones en nuestra lista. Por ejemplo, puedo decir, déjame volver a llamar a la lista, y ahora puedo agregar esta función aquí llamada append Anexar aquí mismo en términos técnicos, es a lo que nos referimos como un método Los métodos también son funciones, pero son tipos de funciones muy especiales. Hablaremos de métodos un poco más tarde. Pero por ahora, solo entiende que sí tenemos funciones muy especiales a las que llamamos métodos que puedes aplicar directamente a las listas y van a hacer algo. Entonces en este momento, lo que haría un pend es que agregará cualquier nuevo ítem que queramos a nuestra lista Como ejemplo, puedo abrir mis corchetes. Y digamos que agregamos pez espada. ¿Bien? Esta es otra contraseña muy, muy popular utilizada por mucha gente, ¿de acuerdo? Por lo que he anexado a la lista Pez salado. Entonces, si vuelvo ahora mismo e imprimo mis contraseñas comprometidas, puedes ver que Sordfsh ha sido agregado a la lista Entonces este es el primer método o función que quiero que entiendas que puedes usar con tu lista. El siguiente va a ser lo que llamamos la función extend. Ver, un bolígrafo con un bolígrafo, puedes agregar ya sabes, elementos individuales, elementos, etc. Con Extender, en realidad puedes agregar todos los elementos de otra lista. Entonces como ejemplo, tengo mi primera lista ahí mismo, contraseñas de compromiso. Y digamos que hemos creado otra lista de contraseñas comprometidas. ¿Bien? Es igual, y ahora permítanme abrir los corchetes aquí. Y agreguemos un nuevo lote de contraseñas. A ver. Tenemos una de las contraseñas muy comunes que la gente suele usar. Bien, digamos uno, dos, tres, A, B, C, qué tal eso. Y déjenme añadir uno más. Y llamemos a un perro, gato, hueso. Ya sabes, sólo algo, ¿verdad? Bien, entonces ahora tenemos dos listas diferentes, ¿verdad? Una para las contraseñas de compromiso y luego otra para las nuevas contraseñas de compromiso. Así que mira esto, ¿de acuerdo? Puedo venir aquí ahora mismo y decir, comprometer contraseñas y ahora extender. Y ahora entre paréntesis, puedo decir nuevo sobre esta contraseña comprometida. Entonces básicamente, estoy adjuntando las nuevas contraseñas a la lista de contraseñas antiguas. Y ahora, si ejecuto mi programa, ahora puedes ver que 123 ABC y perro gato Bone se han agregado a mi lista de contraseñas comprometidas. Ahora bien, otro método del que quiero que estén al tanto va a ser todo lo contrario de append que se va a eliminar Entonces permítanme antes que nada, cortar nuestra primera o segunda lista más bien y voy a modificar esta línea aquí mismo y luego decir, eliminar. Y ahora entre paréntesis, sólo como ejemplo, bien, puedo proporcionar lo que quiero quitar, que es uno, dos, tres, cuatro, cinco. Entonces digamos que quería quitar este elemento en particular muy, muy fácil. Yo solo diré No elimines, corras, y ahora puedes ver que 12, tres, cuatro, cinco ya no está en la lista de contraseñas de compromiso. Así que muy, muy directo. Otra que podemos hacer es simplemente despejar. Podemos borrar toda la lista como ejemplo. Entonces, si iba a venir aquí ahora mismo, cambiar quitar a Clare, ¿verdad? No necesito tener nada dentro de los soportes. Entonces solo Clare y Iron, ahí tienes, va a estar vacío Ya no hay nada dentro de la lista. Entonces hay bastantes otros métodos con los que puedes caminar. Creo que son alrededor de 11 de ellos. Pero déjame darte dos más, ¿verdad? Otro más que podamos usar va a ser inverso, ¿verdad? Entonces básicamente, lo que esto simplemente hará es que invertirá los ítems en la lista el orden. Va a revertir el orden. Entonces si ejecuto esto, ahí tienes, comienza desde Uh, déjame entrar y va hacia atrás hasta llegar a la contraseña. Y entonces uno más que quiero mostrarles que puede ser muy útil sería el método copy. Entonces, como ejemplo, por aquí, déjame venir aquí y voy crear una copia de seguridad, ¿de acuerdo? Así que copia de seguridad y digamos cuentas de subrayado, ¿de acuerdo? Puedo asignar la copia de seguridad a mis cuentas de respaldo variables y ahora puedo decir iguales, y ahora contraseñas comprometidas, y ahora punto, copia y ahora entre paréntesis. Bien, así que básicamente, lo que estoy haciendo ahora mismo es que me gustaría hacer una copia de seguridad de esta lista, esta lista de contraseñas de compromiso y luego asignarla a las cuentas de respaldo variables Entonces ahora si tuviera que imprimir las cuentas de respaldo y corro, verá ahora mismo que tenemos exactamente la misma lista, exactamente los mismos artículos. Entonces esto es lo que usarías para crear copias de seguridad o copiar los elementos en una lista en particular. Entonces como dije, tienes algunos otros como sort, pop, y así sucesivamente. Vamos a hablar de métodos un poco más adelante en el curso. Pero por ahora, esa es la introducción a las listas y los métodos que puedes usar para trabajar con ellas. Gracias por ver. Te veré en la siguiente clase. 34. Cómo usar bucles en una lista: Continuar trabajando con nuestras listas, y quiero que intentemos escribir un programa que simplemente imprima los días de alta actividad. Ahora bien, lo que ves en mi pantalla es una lista de intentos de inicio de sesión por día. Así que escribamos un programa que pasará por esta lista y luego imprima los días de alta actividad. No obstante, para determinar cuál sería una actividad alta, digamos intentos de inicio de sesión que son diez o más. Bien. Entonces, para ello, vamos a crear una variable que almacene los días de alta actividad. Entonces puedo decir alta y luego subrayar actividad en los días de puntuación. Bien. Ahora esto va a ser igual a digamos intentos. ¿Bien? Queremos crear un bucle de cuatro que vaya a pasar por la lista, ¿de acuerdo? Entonces tenemos nuestros corchetes aquí, y luego puedo decir intento, Bien, cuatro, ¿ recuerdas ahora por intento en dónde estamos comprobando el número de intentos? Va a estar en la lista de intentos de inicio de sesión. Entonces voy a decir en los intentos de inicio de sesión. Y ahora aún no hemos hablado de esto, pero también se puede incluir una declaración if directamente dentro de un bucle de cuatro. Entonces queremos crear un bucle que vaya a pasar por nuestra lista, y luego si el intento es de diez o más, vamos a imprimir un día de alta actividad. Entonces intento por intento en intentos de inicio de sesión. Ahora bien, si el intento es mayor o igual a diez. Lo entendiste, ¿de acuerdo? Entonces ahora, ¿qué debería pasar? Simplemente vamos a imprimir. Y luego entre paréntesis, podemos decir algo como días de alta actividad, colon, y luego coma, días de actividad de subrayado alto Entonces ahora si ejecuto el programa, y ahí tienes. Los días de alta actividad, tenemos diez, 12, 15 y 20. Entonces así es como podemos ejecutar un bucle de cuatro para ir a través de nuestra lista y luego imprimir o hacer otra cosa. Entonces voy a brindarte un ejercicio, un reto en el siguiente video. Por favor, revíselo e intente responder a las preguntas. Gracias por ver el video. Te veo en la siguiente clase. 35. Diccionarios: Hablemos de diccionarios. Y al igual que con las listas, puedes modificar, puedes agregar, eliminar elementos en tus diccionarios. Sin embargo, la principal diferencia entre tus listas y tus diccionarios es que a diferencia tu lista donde tienes elementos o valores individuales o elementos en tu diccionario, vamos a tener lo que denominamos un par de valores clave. Entonces, como ejemplo, puedo tener un diccionario llamado user info, y ahora es igual voy a usar ahora las llaves, bien, normalmente usamos las llaves para Entonces aquí, puedo tener información como el nombre de usuario, que sería admin. Entonces aquí mismo, username va a ser la clave mientras admin va a ser el valor de la clave. También podemos tener una contraseña, ¿de acuerdo? Y digamos que la contraseña aquí es dejarme entrar solo como ejemplo. E incluso podríamos tener otro, como, digamos, el último inicio de sesión. Bien, último inicio de sesión, llame, y puedo tener una fecha, digamos, 2024 10-22, solo como ejemplo, ¿verdad Así que tenga en cuenta que cada vez que esté agregando sus pares de valores clave en su diccionario, al final de cada línea, tendrá la coma Pero entonces para el último par de valores clave, no hay necesidad de agregar la coma al final, ¿verdad? Entonces solo toma nota de eso. Entonces esto es a lo que nos referimos como diccionario, ¿verdad? Tenemos nuestros pares de valores clave, nombre de usuario, el valor es admin, tenemos la contraseña clave, el valor es dejarme entrar. Y claro, tenemos la clave último inicio de sesión, y luego tenemos la fecha ahí como valor. Entonces a partir de aquí, podría decidir imprimir la información. Podría bajar aquí y luego decir “print”. Y ahora si quisiera imprimir, digamos, el nombre de usuario, primero comenzaría diciendo user underscore info, y ahora los corchetes regulares aquí, simplemente diría nombre de usuario, y eso es todo Entonces ahora si en cuanto a ejecutar, puedes ver admin ha sido proporcionado. Entonces así es como puedes imprimir los valores de las claves en tu diccionario. Simplemente indica la clave cuyo valor desea imprimir y el programa hará el resto. Bueno. Ahora, igual que dije con los diccionarios, puedes agregar o modificar fácilmente los elementos en tu diccionario. Entonces, por ejemplo, si quisiera agregar alguna información nueva como, digamos, el correo electrónico del usuario, todo lo que necesito hacer ahora mismo es que pueda bajar aquí y simplemente decir información de subrayado de usuario, Bien Y ahora voy a tener los corchetes regulares, y ahora simplemente voy a agregar la clave aquí, que va a ser correo electrónico. Y luego muy simple, solo voy a decir iguales, y ahora puedo agregar la dirección de correo electrónico ahí mismo. Digamos que admin en labcyber.com. Bien. Sólo como ejemplo, ¿verdad? Entonces, si tuviera que bajar aquí ahora mismo e imprimir la información del usuario, permítanme simplemente quitar la clave ahí. Por lo que queremos imprimir toda la información del usuario aquí. Yo dirijo el programa, y ahí está. Va a imprimirlo todo. Entonces nombre de usuario es admin. La contraseña es dejarme entrar. El último inicio de sesión es esta fecha, y luego el correo electrónico ahí mismo es admin en labsyber.com También podríamos actualizar. También podríamos actualizar la información en nuestro diccionario. Entonces una vez más, como ejemplo, si quería actualizar, digamos la contraseña, ¿verdad? Entonces puedo decir usuario Oder score info, y ahora entre paréntesis, claro, la clave aquí va a ser la contraseña, ¿verdad? Entonces contraseña. Y ahora necesito proporcionar la nueva contraseña. Entonces llamémoslo pez SOD. Pescado SOT. Y ahí está. Si ejecuto mi programa, ahora se puede ver que la contraseña efectivamente ha cambiado a SOD fish Así que al igual que con tus listas, puedes agregar nuevos pares de valores clave a tu diccionario, también puedes modificar los valores de las claves existentes. Además, al igual que con las listas, tenemos una variedad de métodos que realmente podemos aplicar a nuestro diccionario. Entonces el primero aquí del que quiero hablar aquí va a ser el método G, que recuperará el valor asociado a una clave. Entonces, por ejemplo, permítanme eliminar toda esta información aquí, ¿verdad? Si quería imprimir la información del usuario, o cuando obtengo el nombre de usuario, el valor del nombre de usuario clave, todo lo que necesito hacer aquí es que puedo decir imprimir user dot info y luego punto G. Bien. Y ahora otra vez entre paréntesis, voy a añadir ahora la clave que es el nombre de usuario. Entonces esto de aquí mismo debería imprimir el nombre de usuario. Si corro, ahí está admin. Así que al igual que con tu lista que usamos una pluma, copia y así sucesivamente. Tenemos exactamente los mismos métodos también para diccionario, y llegar justo aquí es uno de ellos. Otro método va a ser las claves donde simplemente puedes imprimir todas las claves que tenemos en un diccionario. Así que déjame eliminar toda la información aquí. Entonces si corro, ahí tienes. Tenemos todas las claves que son nombre de usuario, contraseña y último inicio de sesión. También tenemos lo contrario que serían los valores. Entonces es una especie de llaves. Voy a cambiar este de aquí a valores y si corro, ahora vamos a tener todos los valores listados en la salida. Ahora, también podríamos crear un bucle que pasará por nuestro diccionario. ¿Y cómo podemos hacer esto? Bueno, podemos usar el bucle cuatro porque tenemos un diccionario. Recuerda que los cuatro bucles funcionan bien con listas, diccionarios y así sucesivamente. Así que voy a decir cuatro, y ahora voy a tener que decir Key, ¿de acuerdo? Entonces para clave y luego valor de coma en, y ahora usuario subrayado info, y tenemos que agregar otro método llamado items items y ahora corchetes, dos puntos, y ahí está Así es como crearás tu loop que recorrerá tu diccionario. Entonces va a decir cuatro claves valor de coma, y luego en el diccionario de nombres, y luego vas a agregarle el método items Y ahora todo lo que tenemos que hacer desde aquí es simplemente imprimir la información. Entonces voy a decir imprenta. Y usemos la cadena F. Entonces nuestros corchetes regulares primero. Y ahora la cuerda F y ahora abrigos, llaves rizadas para sostener y mostrar la clave, y ahora vamos a tener dos puntos, y ahora las otras llaves rizadas para sostener qué mantener el Y ahora si corro, ahí tienes, usa el nombre Admin, contraseña déjame entrar y por supuesto, la última fecha de inicio de sesión ahí mismo. Así que también puedes usar bucles para recorrer tus diccionarios, tus listas, etc. Entonces eso es todo para los diccionarios. Alegría en el siguiente video, donde ahora echaremos un vistazo a lo que denominamos diccionarios anidados. Te veré entonces. 36. Diccionarios anidados: Y atrás. En la lección anterior, hablamos de diccionarios, pero ahora vamos a ir un paso más allá para hablar de diccionarios anidados Entonces básicamente, diccionarios dentro de otro diccionario. Hasta ahora, hemos estado tratando con una sola información de usuario. Pero, ¿y si tuviéramos múltiples usuarios, verdad? ¿Cómo podemos crear esto? Entonces lo que voy a hacer aquí mismo es, cambiemos el nombre información de usuario a credenciales de usuario, ¿verdad? Este va a ser el nuevo nombre para un diccionario, y ahora llaves rizadas Ahora podemos agregar el primer diccionario NSTA que contendrá la información para Admin Entonces voy a venir aquí mismo, escribe Admin. Ese será nuestro primer usuario. Y ahora las credenciales, llaves. Vamos con contraseña. Contraseña aquí. El colon, y luego podemos ir con admin 123. ¿Bien? Entonces el primer usuario aquí, admin, la contraseña va a ser admin 123, y podemos agregar otra credencial que sería el último inicio de sesión Entonces último inicio de sesión vamos a tener este en nuestros códigos. Vamos a iniciar sesión. Ahora colon. Vamos a agregar las fechas. Digamos, algo así como 202-04-1019 Bien. Sólo como ejemplo, aquí hay un poco de flecha. Déjame ver qué es exactamente lo que estoy haciendo mal? Ah, por aquí con contraseña, la columna debería estar afuera. Yo cometí un error ahí. Bien, mucho mejor. Entonces este es el primer diccionario de Nesta que tenemos admin que tiene los pares de valores clave Tiene la contraseña clave, y el valor para una contraseña aquí va a ser admin 123. Y entonces la otra clave aquí va a ser el último inicio de sesión, y el valor es, por supuesto, 2024, 1019 Pero podemos agregar otro diccionario. Voy a decir coma. Y ahora podemos agregar otro usuario. Llamemos a esta persona usuario uno. Y sólo voy a dejar que repl haga el resto, llene toda la información ahí dentro y ahí va usted Entonces el día de la contraseña va a ser usuario uno, uno, dos, tres, y luego el último inicio de sesión también es No, cambiemos la fecha aquí por otra cosa. Entonces vamos con 06 y luego tal vez un 14. Muy bien, por variedad. Entonces esto de aquí mismo es a lo que nos referimos como un diccionario anidado El diccionario está dentro de otro diccionario. Y por supuesto, podemos acceder a la información bastante sencillo. Entonces, por ejemplo, si quería imprimir la contraseña para el Administrador, ¿cómo puedo hacer esto, bien? Simplemente puedo decir imprimir. Y ahora entre paréntesis, voy a decir credenciales de subrayado de usuario, ¿de acuerdo? Y ahora los corchetes regulares y dentro de las capas dobles, voy a decir admin. Bien. Y ahora queremos imprimir la contraseña para el administrador. Así que entre corchetes otra vez, agreguemos contraseña. Y ahí está. Entonces si ejecuto el programa ahora mismo, puedes decir que dice Admin uno a tres porque al decir, Hey, imprime desde el diccionario de credenciales de usuario, queremos que imprima el valor de la contraseña clave que pertenece al usuario admin. Y por eso tenemos Admin 123. O podría decir, bien, imprimir y corchetes, credenciales de usuario, y vamos a imprimir el último inicio de sesión para el usuario uno. ¿Cómo vamos a hacer esto? Nuevamente, muy sencillo. Simplemente voy a entrar aquí y decir usuario uno, y ahora nuevos corchetes y luego simplemente poner en la última clave de inicio de sesión, última en la partitura, iniciar sesión. Y ahí tienes. Así que corre, y ahí vas 202-04-0614 Entonces esto de aquí mismo es un ejemplo de diccionarios anidados. Y esto puede ser particularmente útil si estás intentando crear funciones o programas para firewalls o una herramienta pastor check in o una herramienta que verifique credenciales de usuario, cosas así, ¿verdad Puede usar diccionarios anidados para ese tipo de programas Así que gracias por mirar, y, por supuesto, te veré en la próxima clase. 37. Conjuntos: Continuar con las estructuras de datos, y lo siguiente va a ser lo que llamamos conjuntos. Ahora, en mi pantalla aquí mismo, parece que tengo dos listas distintas que son similares en los elementos dentro de ellas. Sin embargo, observe que las contraseñas de compromiso usan los corchetes regulares, mientras que las nuevas contraseñas de compromiso usan las llaves Ahora bien, créanlo o no, esto es sumamente importante porque los corchetes regulares indican que estos elementos están en una lista, mientras que las llaves indicarán que los ítems no están en una lista, sino dentro de un conjunto Entonces la pregunta natural en este momento sería, bueno, ¿cuál es la diferencia entre una lista y un conjunto? Hay bastantes de ellos. El caso es que, con tus artículos en una lista, puedes ordenarlos. Puedes ordenarlos. Puedes referenciarlos usando un número de índice, mientras que en un conjunto, no están en ningún orden en particular. Están ordenados, ¿verdad? De hecho, te lo demuestro. Si tuviera que imprimir ahora mismo las contraseñas comprometidas, ¿verdad? Y luego también imprimo las nuevas contraseñas de compromiso mira el pedido. Para la lista real, se puede ver que sigue la misma contraseña de pedido, 1234 QWERTY Pero con el set, es casi algo aleatorio. Partió en 123, cuatro, luego fue a ABC 123, fue a Monkey, y así sucesivamente. Entonces la cosa es con los conjuntos, los artículos no están en ningún tipo de orden en particular. Otra gran diferencia es que tu lista permitirá duplicados, ¿verdad? Entonces, por ejemplo, podría agregar en mi lista 123, cuatro nuevamente. No obstante, si tuviera que hacer lo mismo en mi set, notarán la diferencia. Entonces si corro, de nuevo, se puede ver ahora mismo en la lista, 1234 se repite. Mientras que en el set, 1234 aparece solo una vez. No está permitido. No se te permite tener duplicados en tus sets. Y es por eso que cada vez que intentas crear una función o un programa que involucre, como, una lista de elementos que deben ser únicos, como, digamos, contraseñas o direcciones de correo electrónico o cuentas de usuario, quieres usar conjuntos para esos en lugar de lista porque sabes que, bien, no hay dos usuarios que puedan tener exactamente las mismas credenciales. Por lo que será más ideal usar un conjunto. Por lo tanto, los conjuntos suelen ser mucho más rápidos de ejecutar. El programa puede correr a través de un conjunto mucho más rápido de lo que sería una lista. Ahora, ambos son mutables. Tus listas y tus conjuntos son mutables, lo que significa que puedes hacer cambios Puede agregar elementos, mover elementos, puede modificarlos. Y eso es prácticamente todo. Pero al igual que con sus listas, también tenemos operaciones o métodos que podemos usar en nuestros conjuntos, realidad los llamamos operaciones matemáticas como intersección de unión, diferencia. Déjame mostrarte, ¿de acuerdo? Déjame quitar esto aquí mismo. Y ahora, déjame venir aquí y vamos a trabajar con dos conjuntos diferentes. ¿Bien? Creo que ya no necesito esta línea, en realidad. Bien, entonces aquí mismo, hemos puesto uno, hemos establecido dos, y luego ambos tienen dos direcciones IP. Ahora, podría decidir encontrar direcciones IP que sean comunes en ambos conjuntos, ¿verdad? Entonces podría decir, por ejemplo, IPs de subrayado común ahora serán iguales a establecer una, y ahora unión ¿Bien? Entonces intersección, ¿verdad? Intersección y ahora establece dos. Entonces intersección aquí mismo es lo que nos referimos como un operador que encontrará los elementos comunes en ambos conjuntos. Entonces, si iba a subir ahora mismo y luego decir print, IPs comunes y ejecuto, verás que 10.0.0.1 es común en ambos Por eso se imprime. Pero también tenemos lo que llamamos el operador matemático de la Unión. Así puedo cambiar un símbolo aquí mismo por el símbolo de la unión. Lo que esto hará, es como el método extend para la lista donde agregarás los elementos de una lista a otra. Entonces ahora mismo, si corro, se puede ver que ahora tenemos todas las direcciones IP. No obstante, toma nota que de nuevo, debido a que se trata de un conjunto, la IP 10.0.0.1 que está presente en ambas solo se listará una vez, Tenemos otro operador aquí, que será el operador de diferencia. Solo usa el signo menos. Ahora bien, lo que esto hará es que encontrarás elementos que están presentes en un conjunto, pero no en el otro. Entonces si ejecuto esto ahora mismo, se puede ver que 192 uno.uno.01 es un elemento que está presente en el primer conjunto, pero está ausente en Entonces podemos hacer lo contrario, ¿de acuerdo? Puedo decir conjunto dos menos conjunto uno, y ahora esto nos dará el 19216 ocho.uno.102, que está, por supuesto, presente en el conjunto dos, pero no presente en el conjunto uno pero no También tenemos métodos como tu add, remove, Clare. Entonces como ejemplo, si quisiera agregar una nueva dirección IP para establecer una, todo lo que tendría que hacer aquí es, solo diría establecer uno y ahora agregar punto, y ahora entre paréntesis, puedo agregar la nueva dirección IP, así puedo decir 192.168.0.10 Bien, sólo como ejemplo. Entonces ahora, si tuviera que imprimir set uno, corre, y ahí tienes. Se puede ver ahora mismo que 192-16-8010 de hecho se ha agregado También puede tener otros métodos como remove, clear, y así sucesivamente, no dude en buscar esto en el sitio web de Python si lo desea. Entonces eso es todo por sets gracias por ver. Te veré en la siguiente clase. 38. Programación de conjuntos y bucles de desafíos: Regresa. Ahora, quiero guiarte a través un ejercicio que tiene dos tareas. Y en mi pantalla, se puede ver que tenemos un diccionario de diferentes logs. Se pueden ver los pares de valores clave ahí, el nombre de usuario, y luego las IPs, y luego los estados, ¿verdad Entonces las dos tareas son las siguientes. En primer lugar, queremos identificar e imprimir todas las direcciones IP únicas en los registros. Y entonces, segundo, es buscar una dirección IP especial que pueda existir. Si existe, entonces vamos a imprimir algo. Si no existe, podemos imprimir otra cosa. Así que eres más que bienvenido a pausar el video e intentar resolver estas dos tareas por tu cuenta. Una pista que voy a dar es que definitivamente vamos a tener que trabajar con algún tipo de bucle de cuatro que iba a pasar por cada registro y luego sobre todo buscar la val de las direcciones IP, y vamos a tener que pasar los resultados a un conjunto porque recuerda que con conjuntos, no vamos a tener ningún duplicado Y como estamos buscando direcciones IP únicas, conjuntos serían la forma ideal de hacerlo. Para que puedas pausar el video y probarlo por tu cuenta. Si no, te voy a explicar cómo podemos resolver ambas tareas. Entonces, antes que nada, Tarea uno, necesitamos identificar todas las direcciones IP únicas. Entonces, una cosa que podríamos hacer en este momento es que simplemente podríamos crear un conjunto que vaya a almacenar estas direcciones IP únicas. Y voy a llamar a ese conjunto IPs únicas. Bien. Y ahora, lo que voy a hacer es porque es un set, voy a abrir mis lugares rizados. Pero ahora piénsalo, ¿de acuerdo? Queremos pasar por cada registro. Y luego buscar el valor de la clave I P. Así que mira esto, ¿de acuerdo? Voy a decir log, y ahora voy a abrir mis corchetes porque queremos apuntar a cuál es la clave, que es IP. Entonces esencialmente, estamos diciendo, Bien, para cada registro, vamos a acceder a la IP, y ahora voy a introducir mis cuatro bucles diciendo cuatro registros de inicio de sesión. ¿Correcto? Entonces, lo que hemos hecho en este momento es que hemos creado los cuatro bucles que pasarán por cada registro en nuestro diccionario de registros, y buscaremos específicamente el valor de la clave IP. Entonces, como hemos pasado todo a un set, todo lo que tenemos que hacer ahora mismo es simplemente imprimir. Y luego entre paréntesis, podemos decir algo así como direcciones IP únicas, dos puntos y luego simplemente agregar una coma, y ahora IPs de subrayado únicas Y ahí está. Estoy bastante seguro de que podrías haber esperado que esto tomara algunas líneas más de código. Entonces enhorabuena si pudiste resolver esto por tu cuenta, independientemente de si fueron o no dos líneas o tres líneas o cuatro líneas o cinco líneas porque hay otras formas de cómo podríamos resolver la tarea, pero esta es fácilmente la forma más corta y efectiva. Entonces déjame seguir adelante y ejecutar el programa ahora mismo solo para asegurarme de que funcione, y ahí tienes. Impresionante. Entonces tenemos todo ahí, 182, 168, 11, un punto cinco, uno a dos, un punto cuatro, y luego un punto tres. Impresionante. Fresco. Bien. Siguiente va a ser la tarea dos. ¿Bien? Entonces, ¿qué estamos buscando aquí? Buscamos una IP especial que sea igual a 182168, un punto cuatro Entonces podemos decir IP especial es igual a 19216814. Entonces, ¿qué vamos a hacer ahora mismo? Tendremos que usar la declaración Is porque estamos diciendo, Bien, si esta dirección IP especial se encontró en esto, haz esto, de lo contrario, haz otra cosa. Entonces voy a decir si especial subrayan IP en lo que N donde en nuestro conjunto único Subrazo único Lo siento, IPs únicas, IPs subrayado bastante únicas. Qué queríamos hacer. Queríamos decir print, y luego podemos decir, ya sabes, se encontró una dirección IP especial, ¿de acuerdo? De lo contrario. Oh, perdón por eso Y entonces podemos decir otra cosa Imprimir. Y entonces no se encontró la dirección IP especial. Y ahí tienes. Bien. Sigamos adelante, ejecutemos el programa, y ahí está. De hecho se encontró la dirección IP especial. Ahora bien, si cambio cuatro aquí por digamos diez, solo para asegurarme de que realmente está funcionando, y vuelvo a ejecutar el programa, ahí tienes. No se encontró la dirección IP especial. Entonces, una vez más, enhorabuena si pudiste resolver cualquiera de las tareas o ambas tareas por tu cuenta. Si no, no te preocupes. Todo es parte del proceso de aprendizaje, pero ahora mismo te voy a dar un ejercicio que tendrás que intentar por tu cuenta. Entonces te veré en la siguiente clase. 39. Programación de diccionarios y bucles para desafíos: Bienvenido de nuevo. Entonces he decidido agregar una tarea más para que sea la tercera tarea, y va a ser un poco más complicada. Y esta tarea va a implicar contar el número de intentos fallidos de inicio de sesión por usuario. Entonces, esencialmente, vamos a revisar cada registro, contar el número de veces un usuario en particular falló en su estado, y luego simplemente imprimir Ale tiene, ya sabes, cuatro flautas, Bob tiene una filure y así sucesivamente, ya sabes, algo así Entonces eres más que bienvenido a pausar el video e intentar resolver esta tarea por tu cuenta. Si no, pasemos por los dos juntos. Entonces, como dije antes, tengo mi archivo de bloc de notas aquí porque quiero que abordemos esto lógicamente, Entonces vayamos paso a paso. La primera pregunta aquí es ésta. ¿Vamos a estar tratando con un conjunto, un diccionario o una lista? Vamos a pensarlo, ¿ verdad? Obviamente, no puede ser un conjunto porque los conjuntos no aceptan duplicados. Entonces, si vamos a usar un set aquí y Bob tuvo un intento fallido de inicio de sesión, la segunda vez que Bob tiene un intento fallido, el conjunto no lo aceptará porque conjuntos de recordar no aceptan duplicados Entonces los sets no funcionarán aquí. Tampoco puede ser una lista porque piénsalo, ¿bien? Necesitamos asociar el nombre de usuario con el número de veces que han fallado, y son los diccionarios los que son excelentes para trabajar con pares de valores clave. Entonces la clave aquí será el nombre de usuario, y entonces el valor va a ser el número de veces que ese nombre de usuario en particular ha fallado en su estado. Entonces vamos a estar trabajando con un diccionario. Entonces necesitamos diccionario para almacenar el nombre de usuario y sus respectivos intentos fallidos de inicio de sesión, ¿verdad? Bien. Ahora bien, ¿qué necesitamos hacer para averiguar realmente el número de veces que cada usuario ha llenado? Necesitamos crear un bucle de cuatro. Entonces para loop para pasar por cada registro, ¿verdad? Y luego un bucle, cuando pasa por un registro, ¿qué buscamos exactamente? Queremos buscar el estatus que dice fracaso. No nos interesa el éxito. Nos interesa el fracaso. Entonces podemos decir si el estatus. Entonces, si el estatus, equivale al fracaso. ¿Qué queremos hacer? Queremos identificar el nombre de usuario asociado a esa falla. Así que vamos a extraer el nombre de usuario, ¿de acuerdo? Vamos a extraer el nombre de usuario y luego podemos almacenarlo en una variable llamada, digamos nombre de usuario, ¿verdad? Así podemos almacenar los nombres de usuario en la variable, nombre de usuario. Entonces una vez que se haya encontrado ese nombre de usuario, permítanme corregir este extracto. Bien, entonces una vez que se ha encontrado que un nombre de usuario tiene un estado o falla, hay dos escenarios posibles aquí hay dos escenarios posibles. Piénsalo, ¿de acuerdo? Es o bien esta es la primera vez que el nombre de usuario ha tenido un intento fallido de inicio de sesión, o podría ser la segunda vez, la tercera o la cuarta vez. Esencialmente, podría ser que no es la primera vez. ¿Bien? Entonces necesitamos crear condiciones para ambos, así podemos decir si es la primera vez ¿Bien? Podemos decir, bien, el nombre de usuario aquí, el puntaje es cero porque es la primera vez, ¿bien? No obstante, si no es la primera vez, si no es la primera vez, necesitamos agregar una, bien, y luego agregarla también a su registro anterior. Entonces, si es la primera vez, empiezas desde cero, obtienes uno. Pero si no es la primera vez, si es la segunda o la tercera vez, simplemente vamos a agregar una a tu registro anterior. Espero que eso tenga sentido. Y luego, finalmente, podemos simplemente imprimir los intentos fallidos de inicio de sesión. ¿Bien? Para que puedas volver a pausar el video e intentar resolver esta tarea por tu cuenta. Si no, escribamos el programa juntos. Bien, entonces, ¿qué estamos haciendo, antes que nada? Estamos creando nuestro diccionario. Entonces voy a llamar al diccionario intentos fallidos, ¿de acuerdo? Igual, y luego llaves rizadas, va a estar vacío porque no hay nada ahí por ahora Entonces, a continuación van a venir los cuatro bucles. Voy a decir para log in logs, dos puntos. Y ahora, ¿qué estamos buscando? Estamos buscando estamos buscando verificar para ver si el nombre de usuario tiene el estado de falla. Entonces específicamente, estamos buscando verificar si el estado es un fracaso. Entonces voy a decir, me registro, y ahora queremos apuntar al estado, ¿verdad? Entonces, si el estatus aquí es igual, Oh, perdón por eso. Debería haber afuera. Entonces, si el estatus es igual a lo que al fracaso. Si es igual al fracaso, qué estamos buscando, queremos extraer el nombre de usuario. Entonces voy a decir nombre de usuario será igual a. Y ahora vamos a extraer el nombre. Voy a decir log, y ahora entre paréntesis, nombre de usuario. Déjame agregar los códigos ahí mismo. Y ahí tienes. Bien, entonces, ¿qué hemos hecho hasta ahora? En primer lugar, hemos creado los intentos fallidos del diccionario. Ahora, hemos creado nuestros cuatro bucles para pasar por cada registro en los registros y luego buscar cualquier registro cuyo estado sea igual a falla. Cuando encuentres ese estado que es igual a error, vamos a extraer el nombre de usuario y luego asignarlo al nombre de usuario variable. Ahora recuerden, van a haber dos condiciones. ¿Es esta la primera vez que este nombre de usuario tiene el estado de falla o no es la primera vez? Entonces, mira esto. Voy a decir, si Usa un nombre Bien, no lo es. ¿Cómo verificamos si es la primera vez? ¿Si no está en los intentos fallidos? ¿Bien? Entonces al decir, si esta es la primera vez que realmente estamos descubriendo que este usuario tiene un registro fallido, así podemos verificar que diciendo use el nombre no está en los intentos fallidos. ¿Qué queremos hacer? Queremos decir intentos fallidos. Y ahora entre paréntesis, usar un nombre va a ser igual a cero. No obstante, si es para arriba, perdón por eso. Permítanme intentos fallidos. Intento. En realidad, sí me disculpo. He cometido un error con los intentos. Que ella sea T para el S ta ta ta ta. Sí me disculpo. Déjame agregar mi T ahí y agregar mi T ahí. Bien, entonces, sin embargo, si no es la primera vez, si es la segunda vez, la tercera vez, ¿qué estamos haciendo? Estamos diciendo intentos fallidos. Y ahora, usa un nombre. Usar un nombre va a ser igual más igual a uno. Porque vamos a estar incrementando el valor. Si era uno antes, ahora va a convertirse en dos, si eran dos antes, ahora va a convertirse en tres y así sucesivamente. Quiero señalar el hecho de que note los segundos intentos fallidos aquí, es afuera. No está dentro de esta declaración de If, ¿de acuerdo? Porque esto de aquí mismo, la línea 21 22 es solo para verificar si el nombre de usuario no existía previamente. Y ahora, el segundo campo intenta aquí, esto es para comprobar si efectivamente el intento fallido ya se ha registrado previamente y ahora estamos incrementando en uno Entonces todo lo que tenemos que hacer ahora mismo es imprimir Bien. Y luego asegúrate de que esto esté afuera, imprime. Y ahora entre paréntesis, podemos decir algo así como intentos de inicio de sesión llenos llenos llenos por usuario, y luego simplemente ahora podemos agregar intentos de subrayado relleno Y ahí tienes. Bien, entonces ojalá esto funcione. Yo voy a ejecutar el programa, y ahí tienes. Impresionante. Entonces, Bob tenía tres años. Alice tenía dos años, y Dave era uno. Creo que esto es correcto. Bob tiene uno aquí, uno, uno que son tres. Bien, Alice tiene. Alice tuvo éxito aquí. Bien, esto es un fracaso fracaso, dos, bien. Y entonces Dave es uno. Y, por supuesto, Carol no tiró porque Carol solo tenía un tronco, y ella tuvo éxito. Entonces eso es más o menos en resolver esta tarea en particular. Entonces, una vez más, creamos un diccionario llamado intentos fallidos. Creamos un bucle para pasar por cada registro y luego decir: Bien, si encontramos un estado que es fracaso, queremos verificar primero que nada, queremos extraer el nombre de usuario asociado a esa falla, y luego verificar para ver si el nombre de usuario ha estado en nuestros intentos fallidos anteriormente o si es la primera vez. Si es la primera vez, les asigno el valor de cero, y luego si no es la primera vez, simplemente agrego uno a su valor anterior. Por cierto, una confusión podrías estar teniendo aquí es, espera, Alex, ¿por qué es que aquí en la línea 21 22, si es la primera vez que el registro es un fracaso, que el NM tiene un récord de fracaso, por qué no decir igual a uno? Y Z O? El motivo es porque en la línea 23, nosotros , independientemente, vamos a sumar uno al valor, sea o no la primera vez o sea la segunda vez, así que ni siquiera importa. Espero que entiendas lo que estoy diciendo, bien, porque esto va a ir. Entonces, si es la primera vez, bien, antes que nada, el programa dirá: Bien, tu número de campo de Ts es cero en la línea 22, y luego en la línea 23, va a agregar uno independientemente. Por eso asignamos cero aquí y no uno. Si asignamos uno aquí, entonces automáticamente, quien haya tenido solo un intento fallido tendrá ahora dos en contra de su historial. Y para demostrártelo, puedes ver ahora mismo Dave solo tiene un intento fallido de inicio de sesión, ¿verdad? Si vine aquí ahora mismo y cambio cero a uno en su lugar y ejecuto el programa, miren eso. Dave ahora tiene dos por eso hicimos este 10 primero, porque sabemos que en la línea 23, en el siguiente paso, se agregará uno al registro de ese usuario independientemente de si es o no su primera vez o su segunda vez. Entonces ojalá entiendas lo que hicimos ahí. Gracias por mirar, y por supuesto, los veo en la próxima clase. 40. Proyecto del sistema de autenticación: Muy bien, así que bienvenidos al reto de programación donde vamos a crear para nosotros mismos un sistema de autenticación muy básico Vamos a aplicar todo lo que hemos aprendido hasta ahora de variables a funciones, a bucles, y por supuesto, más recientemente diccionarios, ¿bien Ahora, ya he escrito el programa. Esta es la salida. Entonces la forma en que va a funcionar el programa es así. Al principio, al usuario se le presentarán tres opciones para registrarse, iniciar sesión o simplemente salir del programa. Ahora, si dicen tres, saldrá inmediatamente del programa y terminará todo el sistema de autenticación. No obstante, si fueran a ir con uno y presionar Enter, ahora serán X proporcionar un nombre de usuario. Voy a ir con John, déjame proporcionar mi contraseña como contraseña, y ahí tienes. La inscripción será exitosa. Ahora bien, si tuviera que ir a escribir uno de nuevo, e intenté usar exactamente el mismo nombre de usuario John para crear una nueva cuenta, el sistema comprobará para ver eso, Oh, John ya existe, prueba con un nombre de usuario diferente. Entonces nuestro programa va a comprobar para ver si el nombre de usuario ya existe. Ahora, para el número dos, si intentamos iniciar sesión, va a pedir el nombre de usuario. Ahora bien, si digo John, correcto, y luego le proporciono la contraseña correcta, se puede ver ahora mismo va a decir login successful. Bienvenido de nuevo. Ahora bien, si intenté iniciar sesión nuevo con exactamente el mismo nombre de usuario, John, pero esta vez usé la contraseña obviamente incorrecta, va a decir nombre de usuario o contraseña inválidos , por favor inténtelo de nuevo. Entonces este va a ser nuestro sistema básico de autenticación. Así va a funcionar. Y lo que quiero hacer ahora mismo es traer aquí mi archivo del Bloc de Notas solo para que te den una idea de con qué vamos a estar trabajando Entonces, obviamente, vamos a necesitar un diccionario que almacene las credenciales de usuario porque vamos a tener que comparar y ver si el nuevo nombre de usuario que el usuario quiere introducir ya ha sido creado antes, si la contraseña es correcta, cosas así. Y vamos a estar usando un diccionario porque tendremos que crear el par de valores clave, usándolos y ware de contraseña, usándolos será la clave, y luego el valor de la clave será la contraseña. Entonces los diccionarios van a ser útiles aquí. Vamos a necesitar dos funciones distintas. La primera función será registrar al usuario, y luego la otra será iniciar sesión en el usuario. Ahora bien, para que la función real registre al usuario, ¿ qué necesitamos? En primer lugar, vamos a tener que pedirle al usuario que proporcione el nombre de usuario y luego tendremos que tener algún tipo de declaración EL que verificará para ver si el nombre de usuario ya existe. Si pide otro nombre de usuario. Sin embargo, si se trata de un nombre de usuario nuevo, entonces el programa puede proceder a pedir la contraseña. Una vez que el usuario haya proporcionado tanto el nombre de usuario como la contraseña, entonces tendremos que crear el nombre de usuario contraseña clave valor pay. Te voy a mostrar exactamente cómo hacer esto. Una vez hecho esto, podemos decir entonces que el registro ha sido exitoso, así que bastante sencillo. Para que la función inicie sesión en el usuario existente, nuevamente, tendremos que pedirle al usuario proporcione el nombre de usuario y contraseña. Y entonces tendríamos que verificar para ver si el nombre de usuario coincide con la contraseña que ya se ha guardado en el diccionario. Si es falso, entonces vamos a imprimir nombre de usuario y contraseña inválidos. De lo contrario, si es cierto, si la contraseña y el nombre de usuario coinciden, entonces podemos decir que el inicio de sesión es exitoso. Y luego finalmente, la tercera etapa será la de crear el sistema de autenticación real donde al usuario se le presentarán tres opciones para registrarse, iniciar sesión o salir. Y dependiendo de la opción que elija el usuario, tendríamos que llamar a la función relevante. Entonces vamos a construir este sistema de autenticación desde cero. ¿Estás emocionado? Espero que lo estés. Vamos a saltar a la derecha. 41. Paso 1 crea la función de registro: Entonces lo primero que vamos a hacer será crear la función que registrará al usuario. Sin embargo, vamos a crear un diccionario que se utilizará para almacenar las credenciales de usuario. Entonces, para el diccionario, podemos llamarlo credenciales de subrayado de usuario Bien, es igual, y entonces vamos a tener nuestras llaves Colly. Todo bien. Ahora para que la función real registre a nuestro usuario, de hecho, permítanme agregar la nota ahí muy rápido. Función para registrar usuario. Bien. Definamos la función. Voy a ir a la muerte y luego digamos registrar usuario de subrayado Llamar a. Ahora, ¿qué necesitamos? En primer lugar, tenemos que pedirle al usuario que introduzca el nombre de usuario. Podemos asignarlo a una variable. Llamemos a la variable nombre de usuario igual. Ahora vamos a pedirle al usuario que proporcione la entrada del nombre de usuario, y luego podemos decir que ingrese su nombre de usuario. Bien. Sólo como ejemplo, presionemos Enter. Déjame dejar algo de espacio aquí entre los dos puntos y los códigos ahí mismo para tener algo de espacio adentro. Entonces ahora mismo, necesitamos verificar para ver si el nombre de usuario que el usuario proporciona realmente ya existe. Permítanme agregar un nodo aquí en una línea separada. Agreguemos la nota, verifiquemos para ver si ya existe el nombre de usuario. Entonces, ¿cómo vamos a hacer esto? Bueno, podemos hacerlo usando la instrucción If. Voy a decir si nombre de usuario y ahora en las credenciales de usuario. Nuevamente, Python ya nos ha dado el código. Si el nombre de usuario en las credenciales de usuario, Colón, vamos a imprimir nombre de usuario ya existe, por favor elija un nombre de usuario diferente. Creo que esto me gusta. No obstante, voy a quitar la devolución. No necesitamos eso. Entonces sin embargo, si el nombre de usuario no existe, si es un nombre de usuario nuevo, entonces podemos agregar nuestros s. ¿ Qué más tenemos que hacer ahora? Tenemos que pedirle al usuario su contraseña. Voy a decir otra cosa. Vamos a crear una contraseña variable y luego asignarla a las entradas y luego entre paréntesis, digamos, Ingresa una contraseña. Llama, y luego agreguemos el código de cierre, y ahí está. partir de aquí ahora mismo, el siguiente paso que tendremos que hacer es crear el par de valores clave para nombre de usuario y contraseña. Ahora bien, ¿cómo vamos a hacer esto? Bueno, vamos a hacerlo llamando a las credenciales de usuario del diccionario. Bien. Ahora mira esto. Voy a abrir mis corchetes y voy a proporcionar la clave que será nombre de usuario y ahora es igual a contraseña. Así es como podemos crear el par de valores clave. Usted proporciona el nombre de su diccionario y luego entre paréntesis, proporciona el nombre de la clave es igual a su valor, y ahí está justo ahí. Entonces el paso final ahora será simplemente imprimir el registro exitoso. Y ahí está. Ahora, intentemos algo. Voy a llamar a esta función y veamos si realmente funciona. Voy a decir registro de usuario, corchetes, dos puntos, y ahí está. Vamos a probar esto. Así que aquí no necesitamos dos puntos. Pedir disculpas. No necesitamos dos puntos ahí mismo Vamos a ejecutar el programa. Bien, ingrese use un nombre. Voy a decir John, vamos a introducir una contraseña. Digamos que John por la contraseña. John, Enter una vez más y dice registro exitoso. Sin embargo, observe que el programa ha terminado, y eso es porque no tenemos un bucle real que se ejecute continuamente para seguir pidiendo al usuario que proporcione un nuevo nombre de usuario, una nueva contraseña. ¿Qué podemos hacer para ejecutar este programa indefinidamente? Bueno, podemos introducir el bucle while true. Por aquí, justo debajo de la función registrar usuario, no voy a llamar en un bucle que diga while y luego true. No obstante, la sangría va a ser muy, muy importante. Voy a tabular todo esto para asegurarme de que todo caiga bajo la salvaje declaración verdadera. Mira, déjame agregar mi columna ahí mismo, y ahí está, ahora vamos a tener el programa funcionando continuamente. Comprobemos para ver si realmente comprobará si el nombre de usuario que proporcionamos ya existe. Volvamos a ejecutar el programa . Todo bien. Entonces esta me voy a ir con Mark. La contraseña es contraseña. Bien, bien. Registro exitoso. Ahora puedes ver que está pidiendo otro nombre de usuario. Vamos a probar Nancy, Password, vamos con SOD, Fish. Está funcionando. Ahora, intentemos usar Mark nuevamente, Enter y ahora dice, nombre de usuario ya existe, por favor elija un nombre de usuario diferente. Impresionante. Podemos ver ahora mismo que la primera parte de nuestro programa, la que comprueba para ver si la que registra usuario y comprueba si el nombre de usuario ya existe, puedes ver ahora mismo que está funcionando perfectamente bien y eso es increíble. Únete a mí en el siguiente video donde ahora vamos a pasar a la etapa dos, donde vamos a crear la función para iniciar sesión al usuario. 42. Paso 2 Crea la función de inicio de sesión: Bienvenido de nuevo. Ahora pasemos a la segunda etapa donde vamos a crear una función dos, iniciar sesión en un usuario existente. Lo que voy a hacer es que voy a empujar la función aquí todo el camino hasta el final y afuera, agreguemos unas nuevas notas que diga función dos, inicie sesión el usuario. ¿Qué necesitamos? Permítanos ante todo, crear el nombre de la función que será def, digamos, login subrayado usuario Y agreguemos dos puntos. ¿Qué vamos a necesitar? Vamos a necesitar tanto el nombre de usuario como la contraseña. Digamos nombre de usuario es igual y ahora entrada, vamos a pedir al usuario que proporcione su nombre de usuario. Escriba su nombre de usuario. Colón, vamos a agregar algo de espacio ahí mismo. Bien, siguiente será la contraseña, voy a decir contraseña es igual y luego ingresa tu contraseña, produce sencillo. Vamos a tener que verificar ahora para ver si el nombre de usuario realmente coincide con la contraseña que teníamos en la sección de registro. Voy a añadir mi nota muy rápido. Verifique si el nombre de usuario y la contraseña coinciden. Entonces, ¿cómo hacemos esto? El bien viejo si y ahora nombre de usuario credencial de subrayado de usuario lo siento por eso Yo uso un nombre en las credenciales de usuario y debido a que tanto el nombre de usuario como la contraseña tienen que ser revisados y las credenciales de subrayado de usuario y ahora los corchetes, usar un nombre igual a la contraseña Mira lo que hicimos aquí, estamos comprobando para asegurarnos de que si el nombre de usuario que ya se ha almacenado en el diccionario credenciales de usuario y ahora el par de valores clave para el nombre de usuario y contraseña, si realmente coinciden , entonces podemos imprimir, voy a decir imprimir digamos, bienvenido de nuevo. Un muy, muy, muy sencillo. De lo contrario, si no es un partido, podemos imprimir. Ahora podemos decir, inválido usando mi contraseña, por favor intente ganar. Todo bien. Ahí está. Bastante sencillo. Lo que voy a hacer ahora mismo es que voy a llamar a ambas funciones registrar usuario, y luego también iniciar sesión en el usuario score. Sin embargo, debemos prestar mucha atención al hecho de que el bucle reside actualmente dentro de la función de registro. No está afuera. Necesitamos ejecutar nuestro bucle independientemente de la función de registro y de la función de inicio de sesión. Lo que voy a hacer es que voy a cortar el salvaje verdadero cortarlo, y luego voy a pegarlo afuera solo mientras cierto. No obstante, todo lo demás debe caer bajo ella. Voy a tablar todo debajo déjame hacer esto otra vez y ahí tienes Ahí está. Se puede ver ahora mismo que las credenciales de usuario y luego el bucle wile son independientes fuera Ahora, el Wil true, todo el bucle comienza con registrar al usuario y luego iniciar sesión en el usuario, verificando para ver si hay coincidencias, cosas así. Esto debería funcionar. Voy a seguir adelante ahora mismo para ejecutar el programa y dejarnos ver. Voy a proporcionar el primer nombre de usuario. Vamos con Mark y luego la contraseña será admin registro exitoso. Ahora intentemos iniciar sesión como Mark. Voy a decir Mark y luego admin Lo siento, Mark y luego Admin, y ahí tienes. Bienvenido de nuevo. Funciona con éxito. Ahora se ha vuelto a la fase de registro. Si intento ahora crear otra cuenta con Mark, va a decir que el nombre de usuario ya existe. Por favor, elija un nombre de usuario diferente. Vamos con Nancy. Contraseña para Nancy, vamos con contraseña. Bien, ahora puedes ver que dice, lo siento, usuario o contraseña inválidos, por favor inténtalo de nuevo. La razón por la que esto sucede es porque la forma en que se escribe el programa en este momento, simplemente va paso a paso a paso independientemente de si el paso anterior fue exitoso o no. Por aquí, se puede ver que partió con la fase de registro que funcionó. Luego pasé a la fase de inicio de sesión que funcionó. Ahora volvió a venir aquí para la fase de inicio de sesión. Perdón por la fase de registro otra vez, vi que Mac ya existe como usuario. Entonces dijo por favor elija un nombre de usuario diferente. No obstante, sigue pidiendo al usuario que cree otro sname por aquí, pasó directo a la fase de inicio de sesión donde verifica para ver si Nancy existía Nancy no existía. Por eso decía no válido nos nombre de contraseña, por favor inténtalo de nuevo. Ahora mismo, ha vuelto a la fase de registro. Si vuelvo a decir Nancy, ahora puedes decir que le está pidiendo la contraseña a Nancy porque está en fase de registro. Ahora escribiendo Admin, dice registrarse exitoso. Ahora intentemos iniciar sesión porque Night ha pasado a la fase de inicio de sesión. Yo digo que la contraseña de Nancy Nancy es admin, pero voy a escribir algo diferente, Enter, y luego dice No válido nos nombre de contraseña, por favor inténtalo de nuevo. Podemos ver ahora mismo que el programa funciona como 80%. La fase de registro y la fase de inicio de sesión funcionan, sin embargo, si lo ideal fuera, cuando intentamos crear una nueva cuenta de usuario, y si estamos tratando de usar un nombre de usuario que ya existe, el programa no debería pasar a la segunda etapa, que solo para iniciar sesión en el usuario hasta que el usuario haya proporcionado realmente un nombre de usuario nuevo para el registro. Eso lo vamos a arreglar en la tercera y última parte de esta tarea. 43. Paso 3: creación del sistema de autenticación: Llegaré a la parte final de nuestra tarea, y eso es crear ahora el sistema de autenticación real. Eso incitará al usuario a registrarse, iniciar sesión o tal vez simplemente incluso salir del sistema. Ahora, lo que voy a hacer, en primer lugar, es que voy a quitar las funciones aquí dentro, registrarme e iniciar sesión. También voy a quitar el bucle while aquí mismo porque vamos a ejecutar eso en una ubicación diferente. Ahora voy a cambiar la sangría y asegurarme de que las funciones registren usuario y usuario de inicio de sesión en la misma línea Esto aquí mismo debería estar bajo la función Iniciar sesión usuario y ahí está. Empecemos por crear el sistema de autenticación. Voy a agregar mis notas y llamar a ésta el menú principal. Ahora podemos definir nuestra función aquí, sistema de subrayado de autenticación Y ahí está. ¿Qué necesitamos aquí? Necesitamos solicitar al usuario que se registre, inicie sesión o salga. Vamos a imprimir un par de declaraciones. Empecemos por imprimir y voy a decir, digamos sistema básico de autoría. Esto estará en lo más alto. Luego, vamos a imprimir la primera opción para el usuario. Podemos decir que un registro será la primera opción y luego imprimir la opción número dos, este será el inicio de sesión de dos puntos. Entonces la opción final aquí sería tres y luego llamemos a esa salida. Ahí está. Aquí tenemos nuestras tres opciones. Ahora, el usuario tendrá que agregar uno, dos o tres. Vamos a crear una variable que represente esa opción en particular. Voy a llamar a esta opción, opción va a ser igual a input, y ahora vamos a pedirle al usuario que ingrese su elección. Le estamos preguntando al usuario en este momento, Oye, proporciónanos lo que quieres hacer. Vamos a tener que crear el escenario if donde comprobaremos si el usuario elige la Opción uno, que es registrarse, podemos llamar a la función registrar usuario. Si eligen la opción dos, podemos llamar a la función de usuario de inicio de sesión o si salen, simplemente podemos terminar el bucle. Voy a decir ahora mismo que si opción aquí es igual, y ahora puedo decir una. Colón. ¿Qué hacemos si esta opción de quesos uno Bueno, podemos llamar a la función registrar subrayado usuario. Muy, muy directo. Ahora bien, si que va a ser si. Si era la opción dos, ¿qué vamos a hacer? Vamos a llamar a la función login underscore user. Ahora para la última, si la opción equivale a tres, ¿qué hacemos? Podemos imprimir. Entonces código, podemos decir saliendo del sistema. Y ahí está, y entonces podemos decir otra cosa si el usuario tal vez proporciona la opción cuatro, cinco, seis, que no existen, entonces podemos decir, de lo contrario, imprimir y luego entre paréntesis, podemos decir elección inválida, y luego podemos decir, por favor elija entre las opciones uno, dos o tres. Ahí está. Ahí está. Ahora por fin, podemos ejecutar el sistema de autenticación podemos hacer esto simplemente diciendo sistema de autenticación, y ahí está. Hay una cosa que aún no hemos agregado. No sé si puedes detectar lo que es, pero ese es el bucle. Porque en este momento tal como es, este programa se ejecutará solo una vez, pero queremos que el usuario siga iniciando sesión o registrándose o saliendo ¿Qué hacemos? Aquí es donde tendremos que llamar a in the Wild true loop. Pero, ¿dónde crees que lo vamos a poner? Vamos a ponerlo justo debajo de la función de nuestro sistema de autenticación. Aquí es donde voy a decir salvaje verdad. Ahora recuerden, todo aquí dentro tendrá que caer bajo la salvaje declaración verdadera. Así que asegúrate de que tu identación sea correcta, y luego vamos a tener que agregar la sentencia break también para terminar el bucle Ahora bien, donde vamos a terminar el bucle terminamos el bucle donde el usuario elige la opción tres, que es salir del sistema. Justo debajo de aquí, debajo de la impresión, voy a decir break y ahí está nuestro programa ojalá funcione sin ningún problema. Déjame seguir adelante ahora mismo y ejecutarlo. Nosotros sí tenemos un problema aquí mismo y eso porque el break está fuera del bucle y mira eso. Oh, guau, la sangría es tan importante. Se puede ver ahora mismo que si todo esto no es la misma sangría que la sentencia while Entonces, volvamos por aquí y sanguémoslos adecuadamente y ahí está Se puede ver incluso, cometo errores con mi sangría también Entonces, asegurémonos de que todo lo demás esté sangrado correctamente Intentemos ejecutar el programa una vez más. Agradecidamente, ahora funciona. Déjanos probarlo. Voy a ir con la opción número uno. En primer lugar, vamos a registrar Mark y su contraseña es admin. Impresionante. Ahora intentemos ir a la opción número dos para iniciar sesión, usa el nombre. Probemos Nancy como ejemplo, contraseña, digamos, Bob. Pero ahora dice nombre no válido, usando el nombre de la contraseña, por favor inténtelo de nuevo. Obviamente está funcionando muy bien. Intentemos nuevamente registrarnos esta vez como Marcar una vez más verificar para ver si el programa detectará que Mark ya existe, entonces Mark y dice, Bien, nombre ya existe, por favor elija un nombre de usuario diferente. Bien. Intentemos iniciar sesión en este tiempo como Mark. Vamos a proporcionar la contraseña que es admin y dice, bienvenido de nuevo. De hecho, trabajé. Intentemos iniciar sesión de nuevo como Mark. Pero esta vez, usemos una contraseña diferente, una contraseña larga y luego dice: Nombre de usuario inválido de la contraseña, por favor inténtelo de nuevo. Parece que está funcionando correctamente. La prueba final es salir, entrar, y ahí vas. Al salir del sistema, el bucle ha terminado, el programa ha terminado. Ahí está. Hemos creado con éxito un programa, que es un sistema básico de autenticación que permitiría a un usuario registrar el inicio de sesión o simplemente salir del programa. Por supuesto, hemos agregado cheques para garantizar que no se puedan registrar cuentas duplicadas. También hemos agregado comprobaciones para garantizar que los nombres de usuario y las contraseñas coincidan, y ahí está. Enhorabuena. Espero que hayan disfrutado de esta tarea, de este reto. Gracias por ver. Te veo en la siguiente clase. 44. Introducción a la sección de manejo de archivos: Bienvenido a esta sección donde vamos a estar hablando de manejo de archivos, y lo creas o no, este es oficialmente el comienzo de los temas más avanzados sobre la programación Python porque aquí, vas a aprender cómo puedes escribir programas que puedan crear archivos e incluso modificarlos. Y quizás aún más importante, vas a aprender exactamente cómo manejar los errores de archivo. Entonces digamos, por ejemplo, algo sucedió en tu programa, no funcionó del todo de la manera que estaba destinado a funcionar. Vas a aprender exactamente cómo puedes modificar o diseñar tu programa de tal manera que este tipo de errores se manejen de manera profesional. Entonces esta va a ser una sección muy, muy interesante. Y, por supuesto, también vas a aprender los diferentes tipos de métodos que podemos aplicar a nuestros archivos, como por ejemplo cómo puedes leer desde un archivo, o tal vez incluso escribir en un archivo o tal vez incluso anexar o modificar un archivo en particular Y claro, también vas a aprender sobre el manejo de los errores de archivo de los que ya he hablado usando los múltiples bloques except y también la sentencia finally también. Entonces, sin perder más tiempo, saltemos a hablar de manejo de archivos. 45. Lectura y escritura en archivos: Bien hablemos del manejo de archivos y ahora mismo como es, el único archivo con el que hemos estado trabajando es el archivo principal dot py. Es solo un archivo Python y nada más. Sin embargo, podríamos crear otro tipo de archivos. Y si quisiéramos escribir un programa que le pidiera al usuario que proporcionara su nombre de usuario o contraseña, y luego almacenamos esa información de usuario en un archivo separado. ¿Cómo podemos hacer eso? Bueno, podemos hacerlo de diversas maneras. Eso es lo que vas a aprender aquí. Lo primero que quiero mostrarte es cómo crear un archivo. Hay una declaración llamada con y luego una función llamada corchetes abiertos. Lo que esto hará es que la función open normalmente acepta dos parámetros. Tendrás que proporcionar el nombre del archivo con el que quieres trabajar, y luego el segundo parámetro será lo que sea que quieras hacerle a ese archivo. Tal vez quieras leer el archivo, escribir en el archivo, anexar el archivo, y así sucesivamente Como ejemplo, permítanme decir, quiero abrir un archivo llamado ejemplo punto TXT. Es un archivo de texto ahora coma, y ahora tengo que proporcionar la operación ¿Quiero abrir este archivo? ¿Quiero leer el contenido del archivo? ¿Qué quiero hacer? Quiero escribir en el archivo, así que voy a usar W para representar la función correcta, la operación correcta. Y ahora para terminar esto, voy a decir un expediente. Esto de aquí, esta suele ser la sintaxis. Usted dirá con open y luego entre paréntesis proporcione el nombre del archivo, y luego el operador relaciona W para escritura, R para lectura, y así sucesivamente y luego decir un archivo. Ahora voy a saltar a la nueva línea y decir archivo punto w Esta va a ser la función que vamos a usar para escribir realmente la cadena o lo que sea que queramos escribir en el archivo. Entre paréntesis, voy a decir hola mundo. Esto es lo que quiero escribir en el expediente. Ahora, mira esto. Voy a seguir adelante. Ahora fíjate hasta el momento todavía tengo un solo archivo, el punto principal PY. Pero si yo fuera a ejecutar el programa, ya ves que dice ejemplo punto. Aunque no tenía este archivo creado antes, siempre que estés escribiendo en un archivo, si ese archivo no ha existido antes, entonces Python creará automáticamente ese archivo por ti. Ahora bien, si tuviera que abrir mi ejemplo al texto, se puede ver ahora mismo que dice hola mundo. Y si vengo por aquí ahora mismo y escribo otra función correcta y digo, esto es increíble. ¿Qué crees que va a pasar? Sigamos adelante y ejecutemos el programa. Si vuelvo a mi ejemplo, doc TXT, ahora puedes ver que dice hola mundo, esto es increíble. Ahora ha agregado esto es increíble a nuestro archivo. Déjame regresar y cerrar esto. Déjame quitar la segunda función de archivo. Ahora, podemos ver que hola mundo es de hecho en ejemplo punto TXT. Pero y si en nuestra consola, quisiéramos mostrar el contenido del ejemplo punto TXT. Lo que voy a hacer aquí es decir con abierto nuevo y ahora entre paréntesis, una vez más, el nombre del archivo, ejemplo TXT. Ahora vamos a usar la función R en su lugar. Esto es lo que usamos para leer el archivo. Voy a decir como archivo, dos puntos. Ahora bien, ¿y si quisiéramos imprimir el contenido del archivo? Puedo asignar una variable llamada content equals, y ahora voy a usar un archivo de función punto Rojo. Esta función aquí mismo archivo punto rojo leemos el contenido de nuestro archivo. Va a pasar los contenidos al contenido variable. Ahora todo lo que tenemos que hacer a partir de aquí será simplemente decir impresiones y luego entre paréntesis, qué estamos imprimiendo, estamos imprimiendo contenido. Bien. Ahora voy a correr y ahí está justo aquí en una consola, puede ver que tenemos hola mundo que se está mostrando. Esto es básicamente una introducción a la lectura de archivos, escritura a archivos. Una pregunta que puede tener es, bien, ¿ podemos realmente crear nuestros archivos sin usar la declaración with? La respuesta de hecho es sí, podemos hacerlo sin usar la declaración with. ¿Cómo haríamos esto? Bueno, permítanme solo antes que nada, quiten la programación aquí. Lo que tenemos que hacer, en primer lugar, es decir archivo es igual, y luego abrir. Esta va a ser la función abierta propiamente dicha. Recuerda que open acepta dos parámetros. Ahora tendremos que abrir nuestro ejemplo punto TXT, ahora lo que queremos hacer queremos escribir en el archivo. Voy a decir W. Déjame simplemente eliminar déjame eliminar este ejemplo de archivo de texto punto. Déjame borrarlo. Estamos empezando desde el cero. Ahora, le he dicho a Python, quiero que creen este archivo llamado ejemplo punto TXT. ¿Qué queremos escribir ahora en el archivo? Voy a entrar ahora mismo y decir archivo punto escribir. Porque ahora estoy escribiendo en el archivo y luego entre paréntesis, vamos a proporcionar la cadena hola mundo. Ahora lo que voy a tener que hacer es que voy a tener que cerrar el archivo. Cuando estás abriendo un archivo o estás leyendo en un archivo o estás en un archivo, por defecto, el archivo necesita ser abierto para que ocurra esa operación. Lo que siempre quieres hacer es asegurarte de que el archivo esté cerrado una vez finalizada la operación. Si no haces esto, esto puede llevar a que programas filtren memoria y puede ser muy vulnerable a diferentes tipos de ataques Entonces para cerrar el archivo de manera muy simple, archivo punto W punto cerrar. Y eso es todo. Ahora bien, si vuelvo a ejecutar el programa, puedes decir ejemplo que el texto está por ahí, puedo abrir el archivo y es justo el hola mundo. La razón por la que preferimos o la mayoría de los desarrolladores prefieren usar la declaración W es porque con la declaración With, permítanme deshacer todo esto. Con la declaración W, notará que en realidad no tuvimos que cerrar el archivo manualmente. Python es lo suficientemente inteligente como para saber que, cuando estés usando la instrucción W, cuanto hayas realizado cualquier operación que sea la que quieras realizar en el archivo, ciérrela automáticamente. Es por eso que los desarrolladores suelen utilizar la declaración with. Ya no tienes que cerrar el archivo porque Python lo hará automáticamente. Además, también es más limpio, tienes menos líneas de código. Es por eso que la instrucción Wi se usa típicamente junto con la función open. Gracias por ver. Te veo en la siguiente clase. 46. Lectura y escritura de entradas en archivos de texto: Hablemos ahora de cómo podemos leer y escribir en archivos de texto. Digamos, por ejemplo, que queríamos crear un programa que aceptara una entrada del usuario. Digamos que se le ha pedido al usuario que proporcione su nombre de usuario y luego queremos almacenar ese nombre de usuario en un archivo separado. ¿Cómo podemos hacer esto? ¿Bien? Lo primero es, asignemos una variable que aceptará la entrada del usuario. Voy a llamar a mi variable username equals y ahora la función input. Ahora ingresa tu nombre de usuario, bastante sencillo. Ahora recuerda de la lección anterior con Sintaxis abierta, voy a decir con y ahora abierta y por supuesto, recuerda abierta aceptará dos parámetros. En primer lugar, el archivo con el que quieres trabajar y luego el operador, voy a crear un archivo llamado users dot txt. Y luego vamos a agregar la idea funcional W para escribir y luego voy a decir un archivo. Ahora, ¿qué queremos hacer? Queremos escribir el nombre de usuario al archivo. Lo que voy a hacer ahora mismo es muy sencillo archivo punto, escribir. Ahora entre paréntesis, nombre de usuario. Entonces solo por si acaso, podemos imprimir algo después de que el usuario haya proporcionado el nombre de usuario. Digamos imprimir y diré que se ha agregado nombre de usuario al archivo, solo como ejemplo. Sigamos ahora mismo. Ejecute el programa. Ingresa tu nombre de usuario, voy a decir Alex, presiona Enter y ahora dice nombre de usuario se ha agregado al archivo y puedes ver a los usuarios TextiFle ha sido creado y si lo abro, puedes ver que está ahí mismo Alex. Hasta el momento tan bueno. No obstante, si vuelvo y vuelvo a ejecutar el programa, y esta vez, usé un nombre de usuario diferente, dije Alice, presiono Enter. Si voy a mis usuarios o envío un mensaje de texto al archivo, se puede ver ahora mismo que Alice ha sobrescrito a Alex Eso es porque cada vez que aceptas entradas de tus usuarios, estás almacenando en un archivo de texto. Cuando usas el operador correcto, simplemente sobrescribirá lo que sea que haya existido en ese archivo anteriormente ¿Y si no queremos esto? ¿Y si solo queremos seguir agregando archivos o nombres de usuario a nuestro archivo sin sobrescribir los anteriores? ¿Cómo hacemos esto? En primer lugar, déjame borrar mi historial, eliminar a nuestros usuarios puntear texto el archivo. ¿Vamos a fingir que estamos empezando de cero? En lugar de usar la función W, voy a usar A, que representa una pluma. Con un bolígrafo, podemos seguir pidiendo al usuario que proporcione un nuevo nombre de usuario y una vez que sigan agregando nuevos nombres de usuario, se almacenarán en nuestro archivo y los nombres de usuario anteriores no se sobrescribirán Voy a ejecutar el programa otra vez. Proporcionar mi nombre de usuario, Alex. Ahora puedes ver que tenemos a nuestros usuarios dot txt file, Alex, al igual que hicimos con el operador adecuado. Pero ahora si vuelvo, vuelvo a ejecutar el programa y esta vez, digo Ale. Lo que ahora pasa, voy a mi usuario punto textifle y luego vas tú, tenemos a Alex, tenemos Se ve que Alex no fue sobrescrito. Por cierto, si querías almacenar tus nombres de usuario en líneas separadas, todo lo que tenemos que hacer aquí mismo es estamos escribiendo el nombre de usuario del archivo Solo podemos decir más ahora mira esto. Quieres decir slash forward, lo siento, slash hacia atrás y luego N. Así que esto de aquí mismo, esto es lo que usamos para crear líneas, lo que sea que estés agregando se agregará a una nueva Entonces lo que voy a hacer aquí es que eliminemos nuevamente a los usuarios dotExifle Déjame ejecutar el programa una vez más. Alex, presiona Enter. Volvamos a ejecutar el programa. Esta vez, voy a decir Alice. Pulse Intro. Ahora si abro mis usuarios hacen TextiFle, ahora se puede ver que Alex y Alice están en Esto justo aquí es la diferencia entre su operador correcto y su operador append Pero, ¿y si quisiéramos leer los datos, los nombres de usuario del archivo? ¿Cómo podemos hacer esto? Bueno, yo sólo voy a bajar aquí, digamos con abierto otra vez, brackets, y voy a decir usuarios TXT, entonces ¿qué vamos a hacer? Códigos R. Entonces como archivo, Colm ahora queremos crear un bucle de cuatro. Voy a decir cuatro nombre por nombre en archivo. Para los nombres de usuario para los nombres en el archivo, ¿qué queremos hacer? Queremos imprimir. Voy a decir imprimir y luego podemos decir, usar un nombre. Colon y ahora voy a agregar coma y ahora nombre tira de puntos. Esta es una función nueva y va a tener sus propios corchetes vacíos y ahí está. Ahora bien, si ejecuto el programa, Alex, y ahí tienes, úsalos como agregarlos al archivo. Ahora por nuestra función por aquí, estamos leyendo el archivo, va a decir nombre de usuario, Alex, nombre de usuario Alice, y luego nombre de usuario Alex otra vez porque el usuario TextiFle tiene Alex Alice Alex Es así como podemos leer el contenido de nuestro archivo. Por cierto, la tira de puntos aquí mismo, este es un método que se usa muy a menudo siempre que estamos manejando archivos. Ahora, lo usamos para eliminar cualquier carácter de espacio en blanco inicial o trilling una cadena Esto puede incluir cosas como tus espacios, puñaladas o incluso un nuevo carácter de línea Es solo una forma muy eficiente de asegurar que sea cual sea el texto que estemos emitiendo o imprimiendo, sea de la manera más eficiente sin ningún espacio innecesario Es por eso que el strip se usa muy a menudo cuando estamos manejando archivos de texto. Ahora, es completamente opcional. No tienes que usar el método de la tira, de hecho. Si quito el método de la tira y acabo de cerrar mi corchete normalmente, si ejecuto el programa, funcionará exactamente de la misma manera. Permítame darle un nuevo nombre. Digamos Mandy. Como ejemplo. Ahí vas. Tenemos nombre de usuario Alice, sname Alex, nombre Mandy ahí está, todavía va a funcionar Pero puedes ver ahora mismo que sí tenemos el espacio extra, las líneas entre sname Ale, nombre de usuario Alex, usa nombre Mandy porque estamos usando el nuevo carácter de línea, la nueva cadena de línea aquí para agregar cada entrada en una línea separada Eso es más o menos para leer y escribir en archivos de texto. Gracias por ver. Te veré en la siguiente clase. 47. Métodos de lectura y escritura: Bueno, vuelve. Ahora, antes de seguir adelante, quería hacerle saber que existen diferentes métodos para escribir y leer nuestros archivos. Ahora, hasta ahora, hemos estado tratando con el método file dot, que es, por supuesto, muy sencillo. Entonces si ejecuto el programa ahora mismo, va a crear mi ejemplo dot THD Lo abro y ahí está Hello World. Ahora, la escritura de punto de archivo es útil y se usa cada vez que escribimos cadenas individuales o muy simples en nuestro archivo. Hola mundo es muy sencillo, es muy sencillo. Pero y si quisiéramos escribir múltiples cadenas o queremos escribir grandes cantidades de texto. Ya no se utilizará la escritura de archivos. Tendremos que usar un método diferente. Como ejemplo, si tuviera una lista de nombres, permítame crear mis nombres de lista. Déjame agregar el primer nombre, Alex y déjame agregar el nuevo carácter de línea, slash déjame permitir que Python agregue los nombres restantes Tenemos a Alex, Bob, Caroline, Dave y Fred. Si quisiera escribir estas cadenas, ya no puedo usar file voy a tener que usar un método diferente. Lo que voy a hacer ahora mismo es que voy a ir con el ancho habitual, abrir, y luego corchetes y luego recordar, vamos a tener que abrir nuestro archivo ejemplo punto CxT luego W por supuesto dos, escribir tenemos nuestros dos puntos y luego voy a decir, perdón, como archivo y luego nuestro colon Ahora puedes ver archivo punto líneas a la derecha y luego nuestros nombres. Escribe el archivo punto escribir líneas, esto se usa siempre que estemos escribiendo varias cadenas o escribimos grandes trozos de texto en nuestro archivo. Si ejecuto un programa ahora mismo, y lo abro entonces te vas, tenemos los nombres ahí mismo. Por favor, tenga en cuenta esto. En el futuro, si vas a crear programas avanzados que requerirán escribir grandes cantidades de texto o cadenas en un archivo en particular, quieres ir con las líneas de escritura de archivo en lugar de la escritura habitual de punto de archivo. Al igual que con la escritura, también tenemos diferentes métodos de lectura. Ahora, hasta ahora, hemos estado usando el muy simple leer el archivo punto leer déjame copiar algo de código aquí. Déjame pasar esto aquí muy rápido. Hasta ahora hemos estado tratando con código así. Tendremos archivo y luego diremos contenido e llama archivo punto leído y ahí está. Si tengo un programa ahora mismo, muy, muy sencillo, tenemos a Alex Bob, Caroline, Dave y Fred. Bien. Lo que pasa con usar file dot RED es que va a leer todo el archivo a la vez, lo cual es genial siempre estés trabajando con archivos muy pequeños. Sin embargo, si estás tratando con archivos grandes , seguirá funcionando. No me malinterpretes. Seguiré trabajando, todavía va a leer todo. Sin embargo, el problema es que debido a que va a leer todo el archivo a la vez, tendrá que usar mucha memoria para poder cargar todo el texto de ese archivo a la vez. Ese es el problema. No es muy eficiente cuando se trata grandes cantidades de texto en un archivo como archivos grandes. Quieres usar un método diferente. Ahora, déjame mostrarte. Voy a crear un nuevo programa aquí mismo y decir con open. Ahora supongamos ese ejemplo TXT, en este escenario tiene grandes cantidades de texto, es un archivo muy grande. Voy a ir a declarar la salida habitual, agregar nuestro nombre de archivo y luego R y luego decir un archivo Ahora, mira esto. Voy a decir que la línea es igual a la línea lectura de punto de archivo. Observe la diferencia. Ya no es archivo leído, ahora es archivo punto leer línea, y luego puedo crear mi bucle y decir línea while. Mientras nuestro archivo está abierto, tiene texto en él. Queremos imprimir la línea. También podemos decir entonces la línea es igual a la línea de lectura de punto de archivo. Y aquí está. Si tuviera que volver a ejecutar el programa, verán ahora mismo que tenemos casi exactamente las mismas salidas. Realmente no vas a notar la diferencia porque estamos tratando con un archivo pequeño independientemente. Sin embargo, por favor, tenga en cuenta en el futuro, igual que con el método correcto, si va a estar tratando con grandes cantidades de archivos de los que necesita leer, desea usar la línea de lectura de puntos. Si se trata de un archivo muy pequeño, se usaría archivo punto Read. Es ideal para esos escenarios. Sin embargo, no hemos terminado. Hay otro método que es el archivo punto leer líneas. Lo que esto hace es que va a leer todas las líneas a la vez y las devolveremos como una lista de cadenas donde cada elemento es una línea del archivo. En otras palabras, combina los beneficios tanto de su lectura como de su línea de lectura al leer todo el archivo a la vez, al igual que la lectura de puntos del archivo. Sin embargo, va a almacenar cada línea como un elemento individual en una lista. Entonces déjame darte un ejemplo. Voy a volver aquí. Voy a modificar esto para cambiar la línea dos líneas. Es igual a líneas de lectura de puntos de archivo. Ahora en lugar de usar el bucle Wil, voy a cambiar esto al bucle cuatro. Voy a decir cuatro líneas en líneas, dos puntos, y ahora podemos simplemente imprimir entre corchetes línea. O mejor aún, agreguemos el método strip para eliminar cualquier espaciado innecesario. Ahí está ahora mismo, si yo fuera a ejecutar el programa, ahí tienes. Alex, Bob, Caroline, Dave y Fred. Nuevamente, no vas a notar la diferencia cuando estás tratando con un archivo muy pequeño. Una vez más, ten en cuenta que si estás tratando con archivos grandes, quieres ir con la línea de lectura o las líneas de lectura. El último método que quiero mostrarles va a ser el for line in file. El propósito aquí es leer el archivo línea por línea de una manera eficiente en memoria. Voy a volver aquí. Déjame quitar las líneas. Tenemos con ejemplo abierto punto TXT, archivo RS. Ahora voy a decir por línea en, podría decir archivo, Para línea en archivo, ahora simplemente imprimir línea tira de puntos y nunca para ejecutar el programa, ahí tienes. Este enfoque es en realidad muy similar al uso de tu línea de lectura, pero en realidad es más conciso y se considera la mejor práctica para leer archivos grandes porque cada iteración recupera una sola línea, por lo que el uso de memoria va a ser bajo Para resumir, si quieres leer de un pequeño archivo, la lectura habitual de nuestro archivo será la mejor Si estás leyendo de un archivo grande, puedes ir con tu línea en archivo. Es mejor que tu línea de lectura de puntos de archivo, y también mejor que tus líneas de lectura de puntos de archivo. Ahora, también solo quiero señalar que además los modos para tu modo de lectura, tu modo de anexar, tu modo de escritura, también tenemos modos adicionales como tu modo de lectura y escritura, tu modo de escritura y lectura, así como tu modo append y read Como ejemplo, en lugar de R aquí, puedo decir R y luego más. Todo esto se conoce como el modo de lectura y escritura. Esto va a abrir un expediente tanto para lectura como para escritura. Sin embargo, tenga en cuenta que el archivo debe existir y el contenido puede ser leído y modificado. Tu archivo ya debe existir para que puedas usar este modo en particular. También tenemos el modo escribir y leer, que va a ser W y luego plus. Esto de aquí mismo abrirá un archivo para lectura y escritura pero iba a reemplazar cualquier contenido existente. Entonces finalmente, por supuesto, tienes tu modo Append plus, que es el modo de lectura append Esto abrirá un archivo para lectura y escritura, añadiendo nuevo contenido al final sin cambiar ningún contenido existente Eres más que bienvenido a jugar con estos modos y ver cómo modifican tu archivo. Gracias por ver. Te voy a ver en la siguiente clase. 48. Manejo de errores de archivos: A medida que continúas avanzando en tu recorrido como programador Python o como programador en general, hay un hábito que quiero que adoptes y este hábito va a implicar escribir programas o diseñar programas que sean capaces de manejar errores potenciales de manera agraciada Ver la cosa es que, la mayoría de los programadores por ahí, crean todos estos grandes programas que pueden hacer esto, hacer eso No obstante, si algo sale mal, tal vez el usuario del programa agregó algún tipo de entrada o tal vez usaron números en lugar de letras o algo así. Muchas veces estos programas terminan chocando porque el programador no ha diseñado el programa de tal manera que si se producen tales errores potenciales, el programa sabe manejarlo Hemos hablado de manejar los errores brevemente cuando hablamos de loops, pero ahora vamos a ir un poco más a fondo. En mi pantalla ahora mismo, tengo un programa muy sencillo que lee el archivo, el ejemplo punto TXT. Pero tenga en cuenta, sin embargo, que este programa, el bloque corto de código, se basa en este archivo, ejemplo punto TXT realmente existente. Y si tal vez cometí un error o el uso del programa el uso del programa, cometí un error. En lugar de ejemplo punto TXT, tenemos ejemplo punto TXT. Ahora bien, este archivo no existe. No está en mi directorio. Si ejecuto el programa, ahora puedes ver que tenemos un error. Python nos está diciendo que, oye, lo siento, no hay tal archivo o directorio, archivo no encontrado error. Esto no se ve bien. Queremos escribir nuestros programas de tal manera que si se produce tal error, lo va a manejar de una manera muy grácil y profesional Lo que queremos hacer ahora mismo es dejarme volver aquí y añadir ejemplo punto TXT. Vamos a usar el bloque Try except. Hemos hablado de esto cuando hablamos de loops, pero volvamos a hablar de ello. Lo que quieres hacer es en el bloque de código donde existe la posibilidad de que ocurra el error, como por aquí, una cosa que quieres hacer es querer empezar diciendo try. Intente y ahora asegúrese de que esté sangrada correctamente porque el código después de try debería estar debajo de él. Ahora estamos diciendo, Bien, intente abrir este archivo ejemplo punto THD Si existe y todo eso, puedes imprimir el contenido del archivo. No obstante, ¿y si el archivo no existe? Ahora podemos decir excepto y luego bajo excepto, podemos decir print, y luego podemos decir algo así como archivo no encontrado. Vamos a agregar una columna ahí mismo para excepto. Ahí está. Básicamente, estamos diciendo, Oye, intenta ejecutar este bloque de código si por una razón u otra, el archivo y simplemente no se encuentra el archivo de impresión Si ejecuto el programa ahora mismo, todo funciona correctamente porque el archivo sí existe. No obstante, si cambio el nombre del archivo y ejecuto el programa, se puede ver muy profesionalmente simplemente dice archivo no encontrado. Eso es porque estamos usando el try except block. Si bien esto funciona bien, para profundizar, quiero que empieces a usar lo que llamamos las excepciones comunes relacionadas con el archivo. Hay una gran variedad de ellos. Python tiene excepciones específicas para muchos de los errores comunes relacionados con archivos. El primero y el más común es el error del archivo no encontrado, igual que tenemos por aquí. Todo lo que necesitas hacer es en lugar de simplemente decir try excepto donde tienes el except, ahora puedes escribir archivo no encontrado error. Esto aquí mismo, le estamos diciendo a Python que verifique específicamente para ver si el error es causado por el hecho de que no se encontró el archivo. Si vuelvo a ejecutar mi programa ahora mismo puedes ver que sigue funcionando perfectamente bien. Sin embargo, esta es una forma mucho más limpia y eficiente de manejar el error porque aquí, estamos verificando específicamente si el error ocurrió porque el archivo no existe. El try except block por sí solo maneja todos los errores. Si no se encontró el archivo ya sea una flecha de permiso o tal vez sea una flecha de directorio o tal vez sea un error de sistema abierto, se encargará de todo. Entonces sí, va a funcionar bastante bien. Yo me encargaré de la flecha. Pero nuevamente, una forma más limpia será especificar el tipo de error que realmente estás esperando. Así que tenemos el archivo no encontrado error. También tenemos el error de permiso. Tal vez, por ejemplo, el archivo en cuestión es, sólo puede ser accedido por un administrador. Ahora está tratando de ser accedido por un usuario habitual. Obviamente, vas a tener el error diciendo: Oye, perdón, no tienes permiso. En este escenario, lo único que hacemos simplemente es decir, ya sabes, lo siento, no tienes permiso para ver este archivo, y eso es todo lo que necesitaríamos hacer. Entonces, si estás esperando un error de permiso, quieres ir con el bloque de flecha de aceptar permiso de código. También tenemos una flecha de directorio. A lo mejor el usuario estaba intentando abrir un directorio que no vuelve a existir. Simplemente entra aquí y luego escribes es un error de directorio, y ahí está. Y ahora a partir de aquí, podemos especificar el mensaje exacto de impresión. Entonces en este caso, será algo así como Lo siento. No tienes permiso para acceder a este directorio o a SOI Este directorio no existe, algo así. Entonces el último va a ser el error del sistema operativo. Esta suele ser la excepción general para otros errores relacionados con archivos. A lo mejor el disco está lleno, a lo mejor es un problema de entrada y salida, algo así. Entonces todo lo que tienes que hacer ahora mismo es decir excepto, y luego O error. Entonces puedes simplemente escribir algo así como, perdón, se ha producido un error o se ha producido un error de sistema abierto , algo así. Así es exactamente como funcionaría eso. Una vez más, quieres adoptar este enfoque profesional para este enfoque profesional asegurarte constantemente de que tus bloques de código siempre exista la posibilidad de que ocurra un error, han sido diseñados de tal manera que sean capaces de manejar cualquier error potencial haciendo uso del try except block y luego para la declaración accept en sí, puede especificar el error exacto que espera que pueda ocurrir. Gracias por ver. Te veré en la siguiente clase. 49. Múltiples excepto bloques: Bienvenida de nuevo. En el video anterior, hablamos del manejo flechas y también de los diferentes tipos de errores específicos excepto relacionados con archivos con los que deberíamos estar trabajando. Sin embargo, ¿y si quisiéramos verificar varios tipos de errores? Tal vez además de que no se encuentre el archivo, es posible que el archivo fue encontrado entonces tal vez los permisos para el archivo no sean correctos o tal vez el directorio no era correcto, algo así. Queremos crear un programa, un bloque de código que pueda manejar múltiples tipos de errores y también imprimir diferentes mensajes de error para cada error. Como es ahora mismo, tengo un error que es el archivo no encontrado error y va a imprimir archivo no encontrado. Pero y si quisiera incluir también el permiso Al. Es muy, muy sencillo. Todo lo que voy a necesitar hacer es simplemente abrir otro bloque y luego solo decir aceptar y luego permiso Al agregar mis dos puntos y ahora puedo imprimir entre paréntesis y luego decir, perdón, no tienes el permiso. Para acceder a este archivo. Eso es todo lo que tengo que hacer. Agreguemos una flecha más, así puedo decir excepto, y luego puedo decir flecha OS. A lo mejor hubo un problema con el sistema de apertura, y luego puedo mis dos puntos y luego puedo decir print y luego entre paréntesis, hay una flecha OS. Ahora bien, ¿y si quisiera agregar un bloque más de código que manejará cualquier otro tipo potencial de flecha por ahí? Todo lo que necesito hacer es volver a decir excepto ahora la clave voy a decir excepción como E. Básicamente, esta línea manejará cualquier otro tipo de error que pueda ocurrir potencialmente. Entonces simplemente diré apagar un mensaje general y decir imprimir, y luego solo diré una flecha inesperada como ocurrió. Ahora queremos recalcar la E aquí. Esta E va a representar la flecha. Lo que voy a hacer ahora mismo es que voy a usar la cadena F como de costumbre. Y luego llaves rizadas, voy a agregar la E ahí mismo La última línea de aquí manejará cualquier otro tipo de error y el sistema diría que se ha producido un error inesperado y luego especificará qué tipo de error debido a la variable E de aquí que creamos aquí y eso es todo. Voy a ejecutar mi programa, y claro, ya ves, va a funcionar perfectamente bien. Así es como puedes crear varios bloques excepto que manejarán múltiples tipos diferentes de errores potenciales que puedan ocurrir. Para ver. Te veré en la siguiente clase. 50. La declaración final: A la hora de abrir archivos con Python, recuerda que no siempre tenemos que usar la sentencia with. La razón por la que usamos con la mayor parte del tiempo es porque con sentencia, automáticamente, el archivo se cerrará una vez que se haya accedido a él. En este escenario ahora mismo donde simplemente estamos trabajando con la función open para abrir el archivo, tenemos que cerrar manualmente el archivo diciendo archivo que cierra. De lo contrario, el archivo permanecerá abierto y eso podría generar posibles errores. La pregunta ahora mismo es, ¿cómo manejaríamos los errores en este escenario en particular? Bueno, vamos a tener que hacer uso del bloque finalmente. Ahora, en la parte superior, voy a empezar con try como de costumbre, y luego recordar, claro, todo tiene que caer bajo prueba. Ahora en la línea cinco, aquí es donde vamos a agregar el aceptar. Ahora busquemos el archivo no encontrado error. Colón. Si no se ha encontrado el archivo, simplemente podemos imprimir el archivo no encontrado. No obstante, y si de hecho se encontró el archivo, no hay ningún error. Lo que vamos a hacer ahora mismo es que vamos a decir finalmente. Ahora si archiva, aguanta. Ahora estamos diciendo, finalmente, si no había ningún mensaje de error, si de hecho se encontró el archivo, ¿qué hacemos ahora? Simplemente podemos imprimir el contenido y ahora también podemos cerrar el archivo. De hecho, por si acaso, no es necesario, pero por si acaso, podemos simplemente imprimir archivo cerrado, solo como ejemplo. Por supuesto, si ejecuto el programa ahora mismo, puedes ver que funciona perfectamente bien e incluso dice archivo cerrado. Este programa en la superficie en este momento se ve bien. No hubo errores, se encontró el archivo, lo imprimió, y por supuesto, el archivo también se ha cerrado. Sin embargo, aún no hemos terminado. Porque de hecho, si tuviera que cambiar deliberadamente el nombre del archivo para que sí obtengamos el archivo no encontrado error, si ejecuto mi programa, Oh, puedes ver ahora mismo, seguimos teniendo la habitual forma desagradable de mostrar o manejar errores. Es como que el try except bloque de código no funcionó en absoluto. ¿Qué está pasando aquí? Otra cosa que debes tener en cuenta es que si no estás trabajando con la sentencia width, no solo tendrías que cerrar manualmente tu archivo, sino que también tienes que inicializar el archivo desde el principio Porque en este momento tal como es, Python ni siquiera sabe realmente qué es el archivo en sí, ¿cuál es el valor predeterminado del archivo? Un archivo no es igual al ejemplo que toma si no se encontró el archivo, ¿cómo lo sabría Python?, en realidad hay una flecha aquí, ¿cuál será el valor predeterminado que necesita tener la variable de archivo? Aquí es donde tendremos que en la parte superior, digamos archivo equivale a ninguno. Ahora mismo al principio, estamos inicializando la variable de archivo, estamos asignando al valor predeterminado de none Esta es una práctica común cuando se trata recursos que pueden o no ser asignados con éxito. Usar non here permitiría un valor predeterminado muy seguro que evitará cualquier operación accidental en una variable no inicializada Esto es otra cosa que hay que tener en cuenta. Ahora mismo, si ejecuto el programa una vez más, funciona bien. Si cambio el nombre del archivo deliberadamente para producir el mensaje de error, se puede ver ahora mismo que manejó el error con gracia Esta es exactamente la razón por la que cuando se trata de manejar archivos, normalmente usamos la sentencia with porque con la sentencia with, no tienes que inicializar tus variables ni tus archivos y tampoco tienes que cerrarlos manualmente La sentencia W es tan poderosa, automáticamente inicializará nuestros archivos y variables y también cerrará el archivo automáticamente una vez que se haya accedido a él Pero sin embargo, debes estar al tanto de esto si te encuentras escenario o algún código de programación donde no se utilizó la sentencia width, ¿cómo manejarías los errores? ¿Cómo cerrarías el archivo manualmente? Por supuesto, ¿cómo iniciarías también el archivo manualmente? Gracias por ver. Te veré en la siguiente clase. 51. Introducción a la sección de bibliotecas y módulos: Bienvenido a la sección de bibliotecas y módulos. Y, claro, aquí dentro, vas a aprender a trabajar con ellos. ¿Qué son exactamente las bibliotecas y los módulos? Piense en ellos básicamente como programas que ya han sido escritos por otros desarrolladores de Python. Ten en cuenta que la comunidad Python es grande. Tienes desarrolladores que han escrito sus propios tipos de código. A lo mejor hay un programador por ahí que ya ha escrito su propio código sobre cómo cifrar una contraseña Entonces, en lugar de tener que escribir un programa de este tipo desde cero, simplemente puede importar ese programa a su propio programa. Y luego modificar para hacer otra cosa. Entonces ese es el punto de trabajar con bibliotecas y módulos. Entonces en esta sección, vas a aprender los diferentes tipos de bibliotecas y módulos que hay, las diferencias entre bibliotecas y módulos. Y por supuesto, también vamos a tener diferentes retos y ejercicios de codificación también. Entonces, sin perder más tiempo, saltemos de inmediato. 52. Introducción a bibliotecas y módulos: Bienvenido a una nueva sección, y aquí vamos a estar hablando de bibliotecas y módulos. Entonces, ¿qué son exactamente estos? Pintemos un escenario, ¿verdad? Y si quisiéramos escribir un programa que hash texto plano, ¿verdad? Entonces, digamos por ejemplo, queríamos almacenar contraseñas en un archivo. Obviamente, nos gustaría hacerlos hash. No queremos almacenar contraseñas en texto plano. Entonces, ¿cómo escribiríamos un programa que hash estas contraseñas? Hay dos opciones, ¿de acuerdo? Podríamos decidir escribir el programa desde cero, lo que podría llevar mucho tiempo o muy simplemente, podemos usar algo llamado módulo que ya tiene el código que necesitamos para hash nuestro texto. Entonces, un módulo suele ser un archivo Python que ya contiene código. Podrían ser funciones, variables, clases, declaraciones, lo que sea, que sirva a un propósito específico mientras que una biblioteca, como podría haber imaginado ahora, suele ser un grupo empaquetado de estos módulos organizados en torno a un objetivo más amplio. Entonces se puede pensar en los módulos como funciones muy específicas que sirven a un propósito muy específico, mientras que una biblioteca sería una colección de dichos módulos. Como ejemplo, sí tenemos la fecha y hora punto pi. Se trata de un módulo que tiene funciones específicamente para caminar con fechas y horarios. También tenemos una biblioteca llamada HH Lib, la Biblioteca HH, que sería la biblioteca que tendríamos que usar para hash nuestro texto plano. Ahora bien, ¿qué tenemos en la biblioteca hash? Tenemos diferentes tipos de algoritmos. Tenemos el MD cinco, eso va a crear un hash de 128 bits. Tenemos el Shall one, que va a generar un hash de 160 bits, Shaw 256, que generará el 25, seis y, por supuesto, el Shell cinco y dos, que generará un hash de 512 bits. También hay otros tipos de funciones dentro de esta biblioteca como el hash leap dot u, que aceptará dos parámetros, datos de nombre que luego podremos usar para crear un hash con un nombre de algoritmo específico. Entonces, en el futuro, las bibliotecas pueden ser incorporadas. Las llamamos bibliotecas estándar. Esto vendrá por defecto con tu instalación de Python o también podremos usar bibliotecas que sean externas. Nos referimos a ellos como terceros. Estas bibliotecas no vienen con tu instalación de Python, por lo que tendrás que instalarlas manualmente tú mismo, y son desarrolladas por la comunidad Python. Entonces, una vez más, los módulos tienen un código muy específico que sirve función muy específica mientras que las bibliotecas serán una colección de estos módulos. Otra cosa que quiero que te des cuenta es que dentro de la comunidad Python, también puedes escuchar de otro término llamado paquetes. Los paquetes están en algún lugar entre módulos y bibliotecas en el sentido de que también son una colección de módulos, pero los módulos tienden a estar muy estrechamente relacionados en su propósito. No son tan amplias como las bibliotecas. Entonces, por ejemplo, puedes tener tu paquete de correo electrónico y en el paquete de correo, tendrás módulos como email dot message, tu email dot mime, tu email dot Utils y mucho más Otra ventaja de los paquetes es que pueden permitirnos organizar estos módulos en una estructura jerárquica mediante uso de carpetas y subcarpetas Así que cada paquete normalmente contendrá el archivo int PY. Lo que le dice a Python que, Oye, este directorio en particular, no es una biblioteca. En realidad es un paquete. Así es como podemos ayudar a Python a diferenciar entre el paquete y la biblioteca. El paquete tendrá un archivo llamado específicamente el archivo ini dot py. Entonces eso es todo para bibliotecas, módulos y paquetes. German Vinexway no empezaremos a trabajar con ellos. 53. Crear un módulo personalizado: Empezar a trabajar con los módulos estándar y bibliotecas dentro de Python, quiero que creamos nuestro propio módulo personalizado y luego usemos ese módulo en uno de nuestros programas, ¿de acuerdo? Entonces este es nuestro archivo de programa principal aquí, el punto pi principal. Lo que voy a hacer es crear un nuevo archivo, bien, y luego llamar a este matemático en el anuncio de puntaje. Punto PY. ¿Bien? Este va a ser el archivo que contendrá nuestro propio módulo personalizado. Ahora, el módulo que vamos a diseñar será uno que sea muy sencillo, va a tomar dos números y luego sumarlos juntos. ¿Bien? Así que recuerda cómo creamos nuestras funciones personalizadas. Utilizamos la función fine. Y ahora voy a agregar el nombre de la función, que se sumará en los números cuadrados, y luego dos variables. Va a tomar dos números y agregarlos. Podemos usar cualquier letra para representarlos. Voy a ir con F y V, solo como ejemplo y luego agregar mi columna al final. Ahora bien, ¿qué quiero que haga la función? Quiero sumar F y V. Así que voy a decir devolver el valor de lo que de F más V. Y ahí está. Ahora tenemos un módulo personalizado que agregará dos variables, F y V, y luego giramos el resultado. Bien. Si tuviera que volver a mi archivo PI principal ahora, y quiero hacer uso de este módulo que hemos diseñado en el método ad archivo Pi, lo que voy a hacer ahora mismo es que voy a tener que usar la función llamada Importar. Esta es la función que ahora necesitamos usar para importar nuestro módulo personalizado. Entonces va a ser el nombre del archivo, que es matemático en el anuncio de puntaje. ¿Bien? Y ahora, ¿qué tenemos que hacer? Tenemos que proporcionar dos números. ¿Bien? Entonces puedo decir que el número uno equivale a cinco, y luego el número dos es igual a siete. ¿Bien? Sólo como ejemplo. Bien. Ahora, queremos imprimir los resultados de sumar el número uno y el número dos. Entonces, oh, por cierto, perdóname. No debería haber ningún espacio entre el número uno y el número dos. Perdóname. Ya que es una variable, ¿de acuerdo? Entonces no hay espacios en los nombres de las variables, perdóname. Por lo que queremos imprimir este resultado. Entonces puedo asignar una variable llamada resultado para que sea igual a qué? Ahora voy a tirar en el módulo personalizado, que era matemática en el anuncio de puntuación Bien. Y ahora, punto, ¿cuál era la función? La función que teníamos en nuestro método Ad file es agregar números de subrayado. ¿Bien? Así que ahora voy a volver aquí a mi archivo principal y ahora decir añadir números de subrayado Y ahora entre paréntesis, ¿qué estamos agregando? Estamos sumando el número uno y el número dos. Y ahí está. Todo lo que necesito hacer ahora mismo es simplemente imprimir los resultados. Diré impresiones, y luego entre paréntesis, agreguemos un código, y luego puedo decir que la suma es, y puedo agregar coma y luego simplemente decir resultado, y ahí está Y ahora si ejecuto el programa, ahí tienes, dice que la suma es 12. Entonces, para darte un resumen rápido, en primer lugar, creamos un archivo separado, y notamos, por cierto que los archivos están en la misma carpeta Bien, eso es muy, muy importante. Así que creamos un archivo llamado Mth Underscore ad, y este iba a ser nuestro módulo personalizado Definimos el nombre de la función para que sea Añadir números de subrayado Toma dos variables cualesquiera, F y V, y luego devolvemos el valor de sumar esas dos variables. Así que volviendo a nuestro archivo principal ahora, lo primero que teníamos que hacer era importar ese módulo personalizado, que es el anuncio de subrayado matemático aquí Ahora necesitamos aportar los valores de nuestras dos variables. No quiero que te confundas. No pienses eso, Oh, porque en nuestro módulo personalizado, usamos F y V. Por lo tanto, en el archivo principal, F debería ser igual a cinco, y luego V debería ser igual a siete. ¿Por qué estamos usando el número uno número dos? Siempre hay que tener en cuenta que estas variables, estos parámetros de aquí, no representan básicamente nada. Es solo una manera de decirle a la función de ATLPyn que, Oye, dentro de esta función, vamos a aceptar dos variables, y luego las vamos a sumar juntas. Podríamos haber usado cualquier letra aquí. Podríamos haber usado B, C, Z. Podríamos haber usado X. Podríamos haber usado cualquier cosa. Podríamos haber usado el número uno. Número dos, usamos cualquier nombre, cualquier cosa para representar esos parámetros, ¿de acuerdo? Entonces no pienses eso, Oh, cualquiera que sea los parámetros que especifiques aquí debe ser el mismo aquí, no, ¿de acuerdo? Todo lo que debería saber Python es que, bien, esta función va a tomar en dos variables. Va a tomar dos números y luego agregarlos, ¿de acuerdo? Entonces aquí, dijimos que el número uno equivale a cinco, el número dos es igual a siete. Y ahora esta es la parte complicada, ¿de acuerdo? Línea seis. Queremos imprimir los resultados, así que creé un v llamado result, que ahora sería igual a primero que nada, el nombre del módulo que es math dot add y luego dot porque queremos anexar la función que creamos La función aquí es Ad underscd números. Entonces lo agregamos a matemáticas en el anuncio de puntaje, y ahora entre paréntesis, simplemente el número uno, el número dos, y luego lo último es simplemente imprimir los resultados. Entonces dijimos que la suma es y luego resultado y así es como llegamos. Entonces enhorabuena. Has escrito tu primer módulo personalizado, y también has podido importarlo y utilizarlo con éxito . Gracias por ver el video. Te veré en la siguiente clase. 54. Cómo hacer waking con un módulo estándar: Bienvenida de nuevo. Así que la lección anterior, creamos con éxito nuestro propio módulo personalizado, y pudimos importarlo y hacer uso de él en nuestro archivo principal. Pero ahora quiero mostrarles cómo podemos importar algunas de las bibliotecas y módulos estándar que viene con Python. Así que déjame seguir adelante y eliminar todo este código, y voy a dejar la palabra clave Import, la función principal, y el nombre del módulo que vamos a importar se llama random. Este es un módulo incorporado dentro de Python que nos permitiría hacer o generar números aleatorios a partir de una secuencia De hecho, déjame mostrarte un poco de la documentación aquí dentro. Puedes ver que Python tiene un módulo incorporado llamado random. Y lo que pasa con el azar es que es tan poderoso, tiene tantos métodos que viene con él. Echa un vistazo al método de elección. Esto devolverá un elemento aleatorio de la secuencia dada. Voy a hacer uso de este método en particular para generar una letra aleatoria. Así que mira esto, ¿de acuerdo? Voy a primero de todo, crear una variable llamada letras y luego es igual a dos, y voy a escribir todas las letras aquí, de la A a la Z, ¿bien? Entonces queremos que nuestro programa genere una letra aleatoria de esta lista, bien, a partir de esta secuencia. Entonces, ¿cómo vamos a hacer esto? Bueno, voy a crear una nueva variable llamada dos aleatorios llamada Letter, ¿de acuerdo? Y ahora aquí dentro, voy a decir aleatorio Recuerda, la secuencia, antes que nada, tendremos que agregar el nombre del módulo o biblioteca, así que es aleatorio aquí dentro. Y ahora el método, que es elección, va a ser punto y ahora elección. Y ahora entre paréntesis, letras. Eso es todo lo que tengo que hacer. Y ahora, qué hacemos imprimimos y puedo decir que la letra aleatoria elegida es. Y luego puedo agregar mi coma y luego simplemente agregar letra de subrayado aleatorio Y ahí está. Eso es todo lo que tenemos que hacer. Entonces ahora si ejecuto el programa, ahí está. La letra aleatoria elegida es M. Bien. Intentemos volver a ejecutar el programa. A lo mejor elegiremos otra letra que debería. Y ahí tienes. Ahora es C. Otra vez, ahora es A. Una vez más ahora es V. Se puede ver ahora mismo que realmente funciona. Entonces un rápido recapitulación, ¿qué hicimos? En primer lugar, importamos el módulo estándar llamado random que tiene una lista de diferentes tipos de métodos que generarán una letra aleatoria. Entonces lo primero que hicimos fue que creamos una variable de letras que contendrá todas las letras de la A a la Z, y luego asignamos otra variable llamada letra aleatoria que ahora contendrá la letra a real que se generará. En realidad es una letra aleatoria que se generó. Y luego dijimos bin al azar el nombre del módulo y luego agregamos el método que es punto Choice, y luego entre paréntesis, letras. Y ahora simplemente imprimimos la letra aleatoria que se eligió en la línea cuatro. Entonces eso es todo, gracias por ver el video. Te veré en la siguiente clase. 55. Generación de contraseñas con módulos aleatorios y de cadena: Bueno, vuelve. En la lección anterior, aprendimos con éxito cómo generar una letra aleatoria haciendo uso del módulo aleatorio y también el método de elección de puntos aleatorios. Una pregunta que podrías tener aquí es, bueno, ¿y si quisiéramos generar múltiples letras y no solo una? Lo que tenemos que hacer es antes que nada, cambiar el método de elección aleatoria de punto a elecciones de puntos aleatorios porque ahora es plural. Estamos tratando con más de una letra. Otra cosa acerca de las elecciones aleatorias como método de función es que va a aceptar dos parámetros en lugar de uno. El primero será lo que llamamos la población, que es básicamente de donde sacamos las letras. Y entonces el segundo va a ser el número real de letras que queremos generar. Entonces en este caso, ahora mismo, voy a decir K es igual a tres. Todo bien. Y ahora puedo cambiar el texto impresor de letra a letras y luego cambiar E a R. Ahora si ejecuto el programa, tenemos KJ, puedo ejecutarlo Tenemos QMW, ¿verdad? Para que puedas tenerlo en mente. Sin embargo, queremos ir un paso más allá para generar una contraseña aleatoria. Así que ya no sólo estamos tratando con las letras. Ahora vamos a combinar letras con mayúsculas y números y así sucesivamente Y estoy bastante seguro de que ya has visto generadores de contraseñas aleatorias antes. A lo mejor es en el sitio web donde se te pide que crees una cuenta. Quieres crear una cuenta, y luego te ofrecen generar una contraseña para ti, que luego podrás cambiar más tarde. Te voy a mostrar cómo podemos crear nuestro generador de contraseñas aleatorias, y solo vamos a usar cinco líneas para hacer esto. De hecho, cuatro líneas, sólo cuatro líneas, ¿de acuerdo? No me crees. Échale un vistazo a esto. Entonces, antes que nada, vamos a mantener el Import aleatorio porque obviamente queremos aleatorizar las letras y números, pero vamos a importar una biblioteca aquí llamada string porque vamos a estar manipulando nuestras cadenas, que incluirán letras, números, y así Así que tenemos Importar cadena, y ahora voy a crear una variable que va a representar la contraseña. Voy a llamarlo contraseña igual. Y recuerdo de la lección anterior, voy a decir al azar, ok punto Choices, porque ahora vamos a estar lidiando con varias letras. Y ahora en paréntesis, recuerden que el primer parámetro para esta función o método va a ser la población. Tenemos que decirle a la función de dónde sacar la cadena de las letras. Lo que pasa con la biblioteca de cadenas es que déjame mostrarte por aquí, el módulo string más bien, tenemos una variedad de métodos, o en este caso, los llamamos constantes, ¿de acuerdo? Entonces podemos decir cadena punto Pregunta a las letras de partitura. Esto tirará en letras que son a la vez mayúsculas, minúsculas Y luego podemos precisar. Podemos decir cadena punto Preguntar en minúscula Esto extraerá solo letras minúsculas, y luego tenemos para mayúsculas, tenemos para dígitos, dígitos hexagonales, puntuación, Entonces tenemos todos estos métodos, todas estas constantes con las que podemos trabajar al importar el módulo string Así que déjame arrastrar esta. Lo que vamos a hacer ahora mismo es por las elecciones aleatorias, queremos tirar de cadena punto ask y ahora subrayar letras. ¿Bien? Vamos a sacar letras aleatorias. Y luego además, además, también queremos sacar qué dígitos, queremos tener números en nuestra contraseña también. Entonces básicamente, le estamos diciendo a la función, le estamos diciendo a Python que, Oye, para las opciones de letras, para la contraseña, vamos a tirar en letras que son tanto mayúsculas como minúsculas y luego también dígitos. Y luego, por supuesto, el segundo parámetro, necesitamos especificar cuántas letras dígitos van a estar en nuestra contraseña. Voy a decir K es igual, y vamos con diez. ¿Bien? Entonces una contraseña bastante segura. Y ahora, todo lo que tenemos que hacer es ¿qué? Simplemente imprima. Vamos a imprimir. Y voy a decir generado. Así se generó la contraseña. Bien. Y luego déjame agregar mi coma y luego contraseña Eso es. Vamos a generar la contraseña. Y ahora vamos a probarlo, ¿de acuerdo? Entonces voy a seguir adelante ahora mismo ejecutar el programa, y ahí tienes. Tenemos K, tenemos seis, tenemos F mayúscula, tenemos seis, cero Smoleta, H, J, cero, W mayúscula, y luego capital Para que puedas ver ahora mismo, creó con éxito una contraseña con diez caracteres. Teníamos letras mayúsculas, minúsculas y algunos números también. Pero y si en lugar de tener los caracteres separados por una coma y códigos, queremos unir todo juntos, así tenemos una sola cadena ¿Cómo vamos a hacer esto? Tendremos que hacer uso de una función especial llamada función join, ¿de acuerdo? En realidad es un método. Entonces lo que quieres hacer ahora mismo es por aquí donde dice al azar las opciones, vamos a agregar esta función muy especial llamada punto join, y va así, ¿de acuerdo? Vamos a tener un solo código, y luego punto join, y ahora tendremos que abrir un soporte para cubrir todo aquí, y ahí está. Entonces lo que esto va a hacer es que va a generar la contraseña, pero luego se unirán todos los caracteres para llegar ahí. Ahora bien, si ejecuto el programa una vez más, ahí tienes. Ahora lo tenemos luciendo mucho mejor. Puedo ejecutarlo de nuevo, y ahí tienes. Ejecutarlo una vez más, y ahí lo tienes. Así que es increíble cómo con solo cuatro líneas de código, hemos podido crear nuestro propio generador de contraseñas aleatorias. Nosotros, por supuesto, tuvimos que hacer uso de dos módulos estándar, el módulo aleatorio y luego el módulo string, y por supuesto, dos líneas adicionales de código, y ahí está. Entonces, eso es todo. Gracias por ver el video. Te veré en la siguiente clase. 56. El módulo fecha y hora: Sigamos trabajando con los módulos estándar. Y el siguiente va a ser muy, muy importante porque no sólo es un módulo muy útil, sino que también es relevante para el mundo de la ciberseguridad Y estoy hablando del módulo de fecha y hora. Este es un módulo que puedes usar para mostrar cosas como tu hora, la fecha actual. Se puede manipular la fecha y así sucesivamente. Entonces déjame mostrarte cómo trabajar con ello. Voy a quitar todo esto y simplemente decir importación y luego fecha hora, ¿de acuerdo? Ahora, supongamos que queríamos registrar la fecha y hora actuales. Voy a bajar aquí y voy a decir tiempo de subrayado actual es igual, ¿de acuerdo? Y ahora tendremos que llamar al módulo que es fecha, hora, punto, y ahora el método, que se utilizará para mostrar realmente la fecha y hora actuales. Y también se llama fecha hora punto ahora. Es un poco interesante que en el módulo diurno, tienes una función llamada day time ahora que realmente se usa. Entonces todo lo que tengo que hacer a partir de este punto momento es simplemente decir imprimir. Y luego entre paréntesis, puedo decir que la fecha y hora actuales es espacio, y luego puedes agregar mi coma aquí mismo y luego solo decir actual en la partitura, tiempo y veamos Yo voy a ejecutar el programa, y ahí tienes. La fecha y hora actuales es el 27 de octubre de 2024, y ese es el momento justo ahí, como pueden ver. No obstante, quiero presentarles otra cosa. Verás, dado el hecho de que por aquí tenemos día y luego el día otra vez, es algo redundante, ¿verdad? Es decir, el código sigue funcionando perfectamente bien. No me malinterpretes. El código sí funciona. Pero si quieres ser muy profesional sobre esto, una cosa que podríamos hacer es podríamos decir eso, ¿ sabes qué? Desde el módulo diurno, importemos específicamente el método de fecha y hora. Entonces lo que voy a hacer ahora mismo es por aquí, voy a decir de datetime, importar día Y ahora la belleza es que por aquí, ya no tenemos que decir punto diurno sino que solo puedes quitar todo esto. Y simplemente di punto diurno ahora. Porque ahora mismo le hemos dicho a Python que, oye, desde el módulo llamado día, quiero que importes específicamente la clase o el método llamado datetime ahora si vuelvo a ejecutar el programa, puedes ver que sigue funcionando perfectamente bien Es solo que esto es un poco más profesional y una forma mucho mejor de escribir tu código. Ahora, quiero que llevemos este programa un paso más allá y realmente combinemos el módulo diurno con el módulo aleatorio. Entonces básicamente vamos a generar actividades aleatorias como inicio de sesión, cierre de sesión, subida de archivos, cambio de contraseña, ya sabes, cosas que un usuario podría hacer en un sistema informático, vamos a generarlas aleatoriamente y también las generaremos con algunas marcas de tiempo, ¿de acuerdo? Así que voy a volver aquí. Y justo después del módulo diurno, ahora vamos a importar al azar. ¿Bien? Ahora, indiquemos los diferentes tipos de acciones que vamos a aleatorizar Entonces voy a decir acciones iguales, y ahora podemos crear nuestra lista. Y agreguemos una variedad de ellos, ¿de acuerdo? Primero que nada, vamos con, Iniciar sesión coma. Vayamos con Logout también. Bien, tenemos algunas sugerencias aquí como registrarse, restablecer contraseña, y, bien, creo que me gustan estos cuatro. Creo que cuatro es suficiente, ¿de acuerdo? Entonces diferentes acciones como iniciar sesión, cerrar sesión, registrarse, restablecer contraseña Entonces vamos a aleatorizar estas acciones. Permítanme agregar un guión bajo entre el restablecimiento y la contraseña. Siempre que tus cadenas tengan más de una palabra, si son como dos palabras, siempre usa un underscoe para unirlas, es una forma mucho mejor de escribir tus Entonces uno que voy a hacer ahora mismo está por aquí, voy a mantener el tiempo actual igual al punto diurno ahora. Sin embargo, también necesitamos crear una variable que mantenga la acción aleatoria Así que voy a venir aquí ahora mismo y decir que acción de subrayado del usuario equivale ahora a la elección aleatoria de punto Y luego en parénster, las acciones. Y ahí tienes. Y todo lo que tenemos que hacer ahora mismo es simplemente imprimir que el usuario realiza acción de sierra en un momento determinado. Entonces podemos hacer esto. Voy a decir print y ahora la cadena F, y voy a decir que el usuario realizó y ahora nuestros rizo brackets para representar la acción Así que eso va a ser usuario en la acción de puntuación. Y ahora puedo decir en y luego las llaves rizadas, tiempo de subrayado actual Agrega los códigos de cierre, cierra el corchete, y eso debería ser todo. Así que sigamos adelante ahora mismo y ejecutemos el programa, y ahí tienes. El usuario realizó registro en S y así. Volvamos a ejecutarlo. Se realizó inicio de sesión esta vez, bien, realizó una contraseña establecida. Como puedes ver, así está funcionando. Ahora bien, ¿y si al igual que en la lección anterior, quisiéramos el usuario realizara más de una acción? ¿Qué vas a hacer de manera muy sencilla? Vamos a venir aquí abajo, cambiar la elección por las opciones. Y luego recuerda, tendremos que indicar cuántas acciones queremos aleatorizar Voy a decir K es igual a dos, y ahora por aquí, puedo decir que el usuario realizó vamos a mantener el texto impreso tal como está. Volvamos a ejecutar el programa. Y ahora puedes ver que dice usuario realizado, dijiste contraseña iniciar sesión en este, ejecutarlo de nuevo, y ahora es login y ahora Logo. Entonces así es como puedes trabajar con el módulo diurno de acuerdo con el módulo aleatorio para simplemente generar acciones aleatorias en diferentes momentos. Gracias por ver el video. Te veré en la siguiente clase. 57. Trabajar con una biblioteca externa: Redondear esta sección sobre bibliotecas y módulos, necesito mostrarte cómo puedes trabajar con una biblioteca externa. Y la que vamos a estar trabajando va a ser una biblioteca muy, muy poderosa, y va a ser la biblioteca de criptografía Y de hecho, permítanme arrastrar por encima de la documentación. Entonces esta biblioteca en particular, es desarrollada y mantenida por la comunidad Python. Puedes ir a criptografía punto IO si quieres aprender más Pero aquí mismo, nos proporcionan ideas sobre cómo importar realmente la biblioteca y específicamente una función particular, que es la función Fernet ¿Bien? Esto es lo que se utiliza principalmente para cifrar y también cifrar mensajes. Entonces déjame mostrarte cómo vamos a trabajar con ello. Y he agregado algunas notas aquí porque es muy importante que entiendas paso a paso cómo va a funcionar nuestro programa porque para ser honestos, puede llegar a ser bastante confuso, ¿de acuerdo? No voy a mentir. Recuerda que en el cifrado, podemos cifrar una clave, bien, vamos a usar un cifrado, luego podemos usar para cifrar Pero entonces también podemos descifrar el mensaje que ha sido encriptado, ¿de acuerdo? Entonces la forma en que funciona es que, primer lugar, al usar la función frente, tendremos que generar la clave que vamos a usar tanto para encriptar como para encriptar y luego podemos pasar esa clave a nuestro Recuerda que en el mundo del cifrado, vamos a usar cifrados que combinan un algoritmo y la clave para el cifrado y cifrado reales Entonces son básicamente cuatro pasos. En primer lugar, generamos nuestra clave. Entonces decimos frente no generes clave. Esto generará la clave, y luego podremos pasar la clave a nuestro cifrado Y ahora para cifrar el mensaje real, diremos cifrado porque ahora está sosteniendo la clave y Y luego entre paréntesis, nuestra función message dot code. Y luego lo contrario a descifrar, podemos decir que el mensaje descifrado será igual a Cipher Y ahora entre paréntesis porque estamos descifrando lo que es el mensaje cifrado Así que vamos a pasar eso y luego agregar el último método dot decode para descifrar nuestro mensaje Así que comencemos desde el principio, ¿de acuerdo? Lo primero que voy a hacer es importar. Entonces voy a decir desde criptógrafo P punto Fernet, vamos a importar la clase de ¿Bien? Ese es el primer paso. Ahora, el paso uno, recuerden, es generar la clave. Entonces voy a decir clave es igual, y ahora helecho generar la clave de puntaje. Esto creará una clave. Y ahora podemos decir cifra será igual a Fernet y En este momento, me gustaría que, en primer lugar, imprimiéramos la clave generada que hemos creado. Entonces puedo entrar aquí ahora mismo y decir print, y luego entre paréntesis, digamos clave generada. ¿Bien? Así narrado, y luego key, puedo agregar mis dos puntos y luego agregar una coma y luego punto clave el código Todo bien. Así que esto de aquí, esta función en particular aquí es lo que vamos a usar para mostrar la clave como una cadena. Ahora, el siguiente paso será cifrar realmente el mensaje. Entonces, ¿qué hacemos? Podemos decir mensaje es igual. Agreguemos el mensaje. El predeterminado aquí dice hola mundo. Hagámoslo un poco más complejo. Voy a decir hola mundo. Este es un mensaje de circuito. Bien, creo que esto está bien. Este es un mensaje de circuito. ¿Bien? Entonces este es el mensaje que vamos a, primer lugar, cifrar y luego descifrar Así que ahora voy a entrar aquí ahora mismo y decir cifrado en el mensaje de alcance. Ahora vamos a cifrar el mensaje, y como vamos a hacer eso, vamos a decir cipher dot encriptar, y luego entre paréntesis, y luego entre paréntesis, vamos a pasar el mensaje y el método dot code para Hasta el momento tan bueno. El siguiente paso ahora será imprimir. Podemos imprimir el mensaje cifrado ahora mismo, así que voy a imprimirlo entre paréntesis. Agreguemos nuestros códigos, y luego puedo decir que el mensaje cifrado es dos puntos y ahora agregue mi coma y luego simplemente diga cifrado en el mensaje de puntuación ¿Bien? Hasta el momento tan bueno. El último paso, por supuesto, después del cifrado será desencriptar Entonces voy a decir mensaje de subrayado descifrado igual a Cipher dot la cripta. Luego entre paréntesis, vamos a pasar en lo que el mensaje cifrado de subrayado cifrado, y luego puntear el código Soportes, cierre el último soporte, y ahí está. Así que el último paso en este momento solo será imprimir mensaje descifrado es y luego el mensaje descifrado. Ahora puedo ver aquí sí que tenemos Oh, no hay soporte de cierre, para perdonarme. Yo cometí un error ahí mismo. Y ojalá, esto debería funcionar. Déjame seguir adelante ahora mismo y correr. Y ahí tienes. Así que ahora mismo se puede ver en mi pantalla. Dice, Cargando el entorno Nix. Entonces, la belleza de Python al trabajar en plet es que pesar de que en realidad se trata de una biblioteca externa, va a importar automáticamente la biblioteca porque básicamente está instalada la biblioteca Y ahora tenemos el programa funcionando, y dice que la clave generada fue esta, ¿de acuerdo? Esa es una llave larga. Entonces el mensaje encriptado es ahora esto justo aquí, muy, muy largo como se puede ver. Y claro, el mensaje encriptado es hola mundo. Este es un mensaje secreto. Intentemos cambiar el mensaje a otra cosa. Y voy a decir que Python es increíble. Volvamos a ejecutarlo, y ahí tienes. Entonces ahora tenemos una clave generada diferente y, por supuesto, un mensaje encriptado diferente. Entonces así es como trabajar con la biblioteca de criptografía. Y sólo para darle una recapitulación rápida de nuevo, en primer lugar, importamos el módulo furnit de la criptografía de la biblioteca Entonces, por supuesto, en el mundo de la criptografía, vamos a tener una clave que usemos para el cifrado y descifrado Generamos la clave aquí mismo con el uso del método Fn Dogenerate key, y luego asignamos esa clave a nuestro Imprimimos la clave generada haciendo uso de la función de decodificación de teclas Y luego para cifrar el mensaje, tenemos que, antes que nada, agregar lo que realmente es el mensaje El mensaje aquí es Python es increíble. Y entonces decimos, Bien, mensaje encriptado será igual a ahora la función de cifrado punto cifrar, y luego entre paréntesis mensaje Entonces, el método de codificación de puntos de aquí mismo convertirá el texto plano o cadena en bytes, ¿de acuerdo? Y ahora el cifrado de puntos tomará el mensaje codificado. Luego lo cifraré produciendo una versión cifrada. Y por supuesto, la salida será igual a la encriptada en el mensaje de puntuación. Y entonces el último paso en este momento es realmente descifrar el mensaje Así que cifra el punto descifrar aquí mismo. Tomaremos el mensaje encriptado y luego lo descifraremos, devolviéndolo al formato original, y luego el doot decodificaremos, Este método convertirá los bytes descifrados de nuevo en un formato de cadena legible Y, por supuesto, finalmente, imprimimos el mensaje descifrado real Entonces eso es todo, gracias por ver el video. Te veo en la siguiente clase. 58. Introducción al proyecto de la herramienta de cifrado y descifrado: Bienvenido al próximo Mini Proyecto. Y por aquí, vamos a construir nosotros mismos una herramienta para cifrar y descifrar Ahora, la forma en que funciona es que una vez que el usuario haya corrido el programa, se le proporcionarán cuatro opciones diferentes. puede ver en su pantalla, pueden o bien generar una clave de cifrado, cifrar el archivo, descifrar el archivo o simplemente salir del programa Entonces si voy con la opción número uno aquí mismo para generar una clave de cifrado, ahora se puede ver que nos van a preguntar con la pregunta ingrese la ruta del archivo para guardar la clave. Ahora bien, el punto de esto es que en realidad vamos a proporcionar al usuario la que en realidad vamos a proporcionar al usuario la capacidad de usar la clave predeterminada que nosotros mismos vamos a crear o podrían usar su propia clave personalizada. Ese es el punto de esta pregunta o prompt, pidiendo al usuario que proporcione la ruta del archivo. Entonces, si el usuario decide ir con la clave predeterminada, así que voy a presionar Enter ahora mismo, ahora verán que hemos creado un archivo por aquí llamado Encryption underscoolk dot key que ahora tiene una clave particular Entonces ahora si iba a volver al programa y escribí la opción número dos para cifrar un archivo he creado un archivo tx de muestra aquí con algún texto aleatorio Entonces digamos, por ejemplo, queríamos cifrar este archivo Ahora voy a proporcionar el nombre del archivo, sample dot TXT, presione Enter. Y ahora podemos proporcionar un nombre para el archivo de salida. Entonces podemos llamar a este cifrado bajo archivo sco punto TXT, ok. Y ahora presionamos Enter. Y ahora podemos ingresar la ruta de la clave de cifrado que se va a usar. De nuevo, vamos a ir con la clave predeterminada, así que presionaré Enter y ahora nuestro archivo ha sido cifrado y se ha guardado otro archivo llamado archivo de subrayado cifrado DTXT Puedes ver este es el archivo aquí mismo. Entonces si lo abro, ahora mismo, se puede ver que esta es la versión encriptada de nuestro archivo DTXT de muestra Ahora bien, si vuelvo y voy con opción número tres para descifrar un archivo, ¿bien? Y ahora vamos a descifrar el archivo que acabamos de cifrar, ¿de acuerdo? Así que voy a ir cifrado subrayado archivo punto TXT. Este es el archivo que acabamos Este es el archivo recién encriptado. Entonces ahora presiono Enter. Y ahora, ¿cuál es el nombre del archivo de salida? Podemos decir descifrado, subrayado archivo punto TXT. Presionamos Enter, y luego presionamos Enter nuevamente para usar la tecla predeterminada. Y ahora hemos descifrado el archivo y lo enviamos a un nuevo archivo llamado Decryted Underscore file Y si lo abro aquí mismo, ahora pueden ver que hemos vuelto exactamente el mismo texto. Entonces básicamente la forma en que funciona el programa es que vamos a proporcionar un archivo, en este caso, ahora mismo va a ser muestreado en TXT Vamos a cifrarlo usando la clave de cifrado que hemos generado Vamos a almacenarlo en un archivo llamado texto cifrado NSCofldo, y luego vamos a intentar descifrar el archivo y luego guardar el contenido en Osco FL Do texti encriptado Y como puedes ver ahora mismo, funciona perfectamente bien. Entonces les voy a mostrar exactamente cómo podemos construir este tipo de herramienta en particular. Voy a dividir todo el proyecto en tres temas diferentes. Entonces el primero, vamos a crear una clave de cifrado luego el segundo video, vamos a crear tanto las claves de cifrado como de descifrado, las funciones Y luego finalmente en la tarea número tres, agregaremos la interfaz de usuario. Sin perder más tiempo, comencemos. 59. Tarea 1: crear la clave de cifrado: Bien, así que comencemos. Y lo primero que vamos a hacer es que vamos a importar la biblioteca requerida, y eso es, por supuesto, va a ser el punto criptográfico Furnt Así que voy a entrar aquí y decir desde y luego criptografía punto furnt y ahora importar net. Bien. Ahora, queremos escribir una función que podamos usar para generar y guardar nuestra clave de cifrado. Así que sigamos adelante y creamos una función. Voy a llamar a éste definir y digamos generar subrayado clave, y ahora en Bracket Entonces este va a ser el nombre de nuestra función que vamos a utilizar para generar nuestra clave de cifrado. Ahora la cosa es que, siempre que estés generando tus claves, cada vez que estés usando esta función, realmente podemos agregar un tipo particular de parámetro, que será la ruta del archivo. Podemos crear el nombre de nuestro archivo. Entonces lo que voy a hacer ahora mismo es voy a decir archivo, y ahora subrayado ruta Bien, ahora será igual, y ahora podemos agregar el nombre del archivo En este caso ahora mismo en códigos, voy a decir cifrado subrayado clave clave punto clave Así es como quieres guardar el archivo para tu clave de cifrado. Va a ser el nombre y luego la tecla punto. Y voy a agregar mi columna al final. Muy, muy importante. Entonces ahora para generar la propia clave real, se puede ver que ya nos hemos dado la información. Voy a decir clave es igual y ahora helecho ahora punto generar clave de subrayado, y ahora en Entonces esto de aquí es lo que vamos a usar para generar la clave real. Vamos a usar este método, que es el helecho para generar clave, y vamos a guardarlo en una variable llamada key Así que ahora, vamos a crear el archivo en sí mismo. Entonces voy a entrar ahora mismo, y voy a decir con, bien, W y ahora abierto. Entonces vamos a crear nuestro archivo, y ahora entre paréntesis, voy a agregar la ruta del archivo, ¿de acuerdo? Y ahora coma, y ahora el modo correcto. Entonces va a ser WB, y ahora voy a decir S K en el archivo de puntaje. Entonces esto de aquí mismo abrirá un archivo en lo que llamamos un modo binario correcto. Ahora, tal vez se esté preguntando qué es exactamente WB. Es similar al modo de escritura, que solo será W, con el que ya estamos familiarizados sin embargo, en WB, escribirás datos en formato binario en lugar de texto plano. Entonces, básicamente, esto significa que escribirá datos como bytes sin procesar en lugar de caracteres. Ahora tal vez te estés preguntando, bien, entonces, ¿cuál es exactamente el punto? ¿Cuál es la ventaja? Bueno, si escribes datos binarios usando tu modo de texto regular, que será W, el programa intentará interpretar las picaduras como caracteres, lo que muy a menudo puede resultar en errores de codificación, corrupción de datos, o tal vez incluso pérdida de integridad de datos. Por lo tanto, siempre se recomienda usar WB siempre que esté trabajando con cifrado, archivos de imagen o cualquier dato que no sea de texto para garantizar que los datos se almacenen correctamente en su formato de mordida original sin ninguna alteración. Bien, entonces ahora tendremos que escribir la clave del archivo. Entonces voy a venir aquí ahora mismo, y voy a decir clave en el archivo de partitura, y ahora el método escribe, y ahora ¿qué estamos pasando? Estamos pasando en la clave propiamente dicha. Entonces esto de aquí mismo, vamos a escribir la clave del archivo, y luego se hace, pero también podemos simplemente escribir algo para imprimir. Entonces, digamos imprimir. Y ahora entre paréntesis, podemos usar una cadena. Y voy a decir códigos. Digamos que la clave de cifrado de cifrado guardada, también, y ahora podemos agregar la ruta del archivo subrayado ruta, y ahí está Así que hemos creado con éxito la función para generar nuestra clave de cifrado. Pero ahora también escribiremos otra función para cargar la clave de cifrado del archivo. Entonces voy a entrar aquí. Voy a decir definir la clave de subrayado de carga y ahora entre paréntesis, voy a agregar una ruta de archivo Y ahora esto será igual, por supuesto, a la clave de cifrado cifrado subrayado clave clave punto clave Entonces ahora a partir de aquí, voy a decir ancho y ahora abierto voy a agregar el archivo en la ruta de partitura. Y ahora queremos leer. Queremos leer del archivo. Entonces, ¿qué crees que vamos a usar? Vamos a usar RB en contraposición a WB. Entonces ahora van a ser códigos. Va a ser RB. Déjame agregar mi coma ahí mismo, y luego cerrar el corchete y ahora como clave en el archivo de puntaje. Tenía una columna. Y ahora, finalmente, para leer la clave del archivo, simplemente podemos decir clave es igual, y luego clave, archivo de subrayado, punto, el método de lectura, y ahora entre paréntesis, y ahora simplemente podemos devolver nuestra clave Entonces, la función que acabamos de crear aquí, la clave de subrayado de carga simplemente leerá y devolverá la clave de cifrado almacenada en el archivo, y por supuesto, esta va a ser la clave que se necesitará tanto para el cifrado como para el descifrado Jelly siguiente video donde vamos a seguir adelante ahora mismo para escribir funciones para cifrar un archivo y también para descifrar el 60. Tarea 2: creación de las funciones de encriptación y desencriptación: Bienvenida de nuevo. Entonces en el video anterior, creamos con éxito la clave de cifrado, y le dimos la ruta del archivo de cifrado onscorekey dot key Y también escribimos una sencilla función para cargar la clave. Así que ahora, escribamos las funciones que vamos a utilizar para cifrar realmente nuestros archivos, pero también descifrarlos Y por cierto, acabo de notar por aquí en la línea nueve que no agregué mi colon al final. Entonces, por favor, si no lo has hecho, asegúrate de hacerlo también. Y luego también en la línea cinco, me perdí otros dos puntos, así que por favor agregue las columnas a línea cinco y a la Línea nueve también, bien, entonces vamos a escribir una función para cifrar nuestro archivo Entonces voy a bajar aquí y digamos definir. Y llamemos a la función cifrar, cifrar, archivo de subrayado, Ahora, piensa en esto, ¿de acuerdo? Nuestra función porque vamos a cifrar un archivo, vamos a requerir tres parámetros diferentes, ¿de acuerdo? El primer parámetro será el propio archivo real, que vamos a estar cifrando. Entonces llamemos a ese archivo la entrada en el archivo de puntaje. ¿Bien? Ahora, también vamos a necesitar crear un archivo que contendrá la versión cifrada. Entonces llamemos a ese archivo la salida En el archivo sco. Bien. Y luego finalmente, vamos a necesitar la clave real que vamos a usar para cifrar el archivo de entrada, ¿verdad Entonces déjame agregar mi colon al final. Entonces lo primero que vamos a hacer ahora mismo es vamos a crear nuestro objeto frente con la clave proporcionada. Entonces voy a decir Fernet ahora es igual a F, Fernet y ahora entre paréntesis, vamos a agregar la clave R. Bien. Entonces a partir de aquí, queremos leer el archivo de entrada. ¿Bien? Ese será obviamente el siguiente paso será abrir realmente el archivo de entrada que queremos cifrar Entonces voy a decir con abierto y ahora entre paréntesis, voy a decir la entrada en el archivo de partitura, y ahora qué modo vamos a ir con el modo binario de lectura, entonces R B, bien. Y ahora voy a decir un archivo y ahora, lo que vamos a hacer es que vamos a leer el contenido del archivo, y vamos a pasar esos contenidos a otra variable. Entonces llamemos a la variable original. Voy a decir original ahora mismo va a ser igual a qué? El punto del archivo se lee porque queremos leer el contenido del archivo, y agreguemos nuestros corchetes ahí mismo. Bien, lo estamos haciendo genial. Lo estamos haciendo genial. Ahora necesitamos cifrar el archivo. ¿Bien? Y por cierto, olvidé agregar la columna aquí en la línea 16. Entonces, vamos a agregar una columna ahí mismo. Bien, entonces ahora que hemos abierto el archivo, bien, ahora queremos cifrarlo Entonces voy a decir llamemos a éste cifrado. Esta será la variable para almacenar la versión cifrada real. Entonces voy a decir encriptado será igual a ahora Cifrar punto Furnt Ahora entre paréntesis porque hemos pasado, punto de archivo leído en la variable original. Voy a entrar aquí ahora mismo y simplemente decir leer nulo, entonces ¿qué es lo último que vamos a hacer? Tendríamos que escribir el contenido cifrado en un archivo. Así que voy a decir ancho abierto, y ahora entre paréntesis, la salida en nosotros llamar archivo, y ahora el modo va a ser binario correcto así WB. Y ahora voy a decir como archivo en nuestro colon ahí mismo. Y todo lo que tenemos que hacer ahora mismo es decir archivo punto justo porque estamos cifrando nuestro archivo, y ahora entre paréntesis, ¿qué va a ser Se va a encriptar. Entonces voy a decir encriptada. Por lo que esto escribirá el contenido encriptado en el archivo. Y por supuesto, podemos simplemente agregar una declaración impresa se puede decir imprimir. Y sí, podemos ir con este archivo de impresión cifrado y guardado en el archivo de salida. Entonces a partir de aquí, lo que tenemos que hacer ahora mismo será crear el funcional que podamos usar para descifrar el archivo Entonces básicamente va a ser un revés de lo que acabamos de hacer. Así que revisa esto así que voy a venir aquí. Y llamemos a nuestra función desencriptar en el archivo de puntuación. Y luego al igual que con el cifrado, vamos a necesitar tres parámetros, el archivo de entrada, el archivo de salida, así como la clave. Entonces voy a agregar esos, como pueden ver, archivo de entrada, archivo de salida, y luego clave. Y ahora, como siempre, voy a decir Fernet es igual, y luego a Fernet mayúscula, y luego clave Backeds Entonces esta será la clave que vamos a usar para descifrar nuestro archivo Entonces ahora lo que queremos hacer, queremos leer el contenido del archivo cifrado. Entonces voy a entrar aquí en una nueva línea. Voy a decir con abierto, y ahora ¿qué vamos a abrir? Estamos abriendo la entrada en el archivo de partitura, y ahora ¿qué modo R B? Voy a decir archivo S, y dos puntos. Entonces, ¿ahora qué queremos hacer? Queremos desencriptar. Así que voy a decir el cifrado Cifrado aquí es igual a archivo punto leído, estamos pasando el contenido del archivo cifrado a una variable llamada cifrada porque ahora lo que vamos a hacer es vamos a crear otra variable llamada descifrada, y ahora esto va a ser igual a Fernet Ahora voy a pasar descifrar entre paréntesis encriptados. Así que esto de aquí es como vamos a descifrar el contenido de nuestro archivo Y ahora, ¿cuál es el último paso? Queremos guardar la información descifrada en un nuevo archivo. Así que ahora simplemente voy a decir con abierto, y ahora entre paréntesis, el archivo de subrayado de salida, y ahora WB un archivo, dos puntos, y ahora simplemente archivo punto derecho, y ahora descifrado así que vamos a escribir conectar al Y luego, por último, podemos simplemente agregar las declaraciones impresas habituales. Así podemos decir algo como print, brackets F columna, y digamos archivo descifrado y guardar en el archivo de salida Yo pienso, Bien, creo que esto está bien. Y ahí está. Bien. En realidad, permítanme mejorar en éste. Puedo decir archivo. ¿Bien? Y ahora llaves geniales, y luego el archivo de entrada Bien. Y ahora, voy a decir descifrado y guardado en el archivo de salida Creo que esto es mejor, y ahí está. Así que una vez más, creamos funciones tanto para cifrar como para descifrar nuestros archivos Para la función de cifrado, necesitamos tres parámetros. El archivo de entrada que vamos a cifrar, el archivo que vamos a crear, voy a almacenar la información cifrada, que es archivo de salida, y luego la clave para el cifrado real Así que creamos esa clave aquí mismo diciendo find equals finito y luego Bracket key Y ahora abrimos el archivo original y almacenamos el contenido del archivo en nuestra variable llamada original diciendo archivo punto leído es igual a original. Y ahora para hacer el cifrado en sí mismo, dijimos cifrada igual a freno cifrar dijimos cifrada igual a freno cifrar y ahora entre paréntesis original, y ahora con abierto porque queremos almacenar la información cifrada en un nuevo archivo, el archivo de salida, creamos el archivo aquí mismo en las líneas 19, 20 y 21, y luego hicimos más o menos exactamente lo contrario con la función de descifrado Así que Jome el próximo video consciente, vamos a seguir adelante y ahora crear la función principal para la interacción del usuario 61. Tarea 3: añadir la interfaz de usuario: Ven a la parte final del programa donde vamos a crear la interacción principal del usuario. Vamos a proporcionar al usuario cuatro opciones diferentes. A lo mejor les gustaría generar un archivo cifrado clave, un archivo descifrador, tal vez incluso simplemente salir Y luego dependiendo de la opción que elijan, vamos a tener que hacer algo. Entonces comencemos, ¿verdad? Entonces voy a decir definir principal. Este será el nombre de nuestra interfaz, y permítanos imprimir un mensaje de bienvenida general. Esto no es necesario, pero bueno, vamos a hacer eso. Bienvenido a la herramienta de cifrado, Descifrado. Bien. Bien. Ahora vamos a crear el bucle while que va a pasar por las cuatro opciones. Voy a decir mientras y ahora cierto colon. Y ahora vamos a imprimir exponer las opciones. Entonces voy a ir con impresión. Y ahora número uno, generar una clave de cifrado. Bien. Y ahora vamos con la opción número dos, que sería simplemente cifrar cifrar un archivo la opción número tres será lo que las Archivo. Y ahora la opción final, que es la opción más aburrida, salir del programa. Bien, ahí está. Ahora, como ahora tenemos las cuatro opciones, solicitemos al usuario que nos proporcione con qué opción le gustaría ir. Entonces voy a venir aquí ahora mismo, y vamos con la variable u opción. ¿Bien? Entonces voy a decir opción y ahora es igual y ahora entrada. Entonces, vamos a pedirle al usuario que nos diga qué opción le gustaría ir con signo de interrogación, ¿de acuerdo? Entonces preguntémosle al usuario, Oye, ¿qué te gustaría hacer? Ahora, tendremos que crear las declaraciones IL para cada opción en particular. Así que vayamos con el primero de aquí. Entonces voy a decir si la opción es igual a uno, qué queremos hacer de manera muy sencilla, podemos generar nuestra clave. Entonces puedo venir aquí ahora mismo y simplemente decir generar clave de subrayado, y ahora entre paréntesis, ¿cuál es el nombre de la clave Eso es cifrado subrayado clave punto clave. Entonces podemos ejecutar la función inmediatamente, ¿verdad? Y esto funcionará perfectamente bien. Sin embargo, quiero mostrarte algo, ¿de acuerdo? Esto no es necesario. Pero, ¿y si quisiéramos proporcionar al usuario la opción de usar realmente su propia clave personalizada y no solo la clave predeterminada que ya hemos creado Entonces le estamos dando al usuario dos opciones, ¿de acuerdo? Puede usar la clave predeterminada que ya tenemos o puede proporcionarnos la ruta a su propia clave de cifrado. Ahora bien, ¿cómo haríamos esto? Bueno, ya he escrito la línea aquí mismo, ¿de acuerdo? Entonces déjame agarrar esto, corta. Voy a bajar aquí y luego pegar. Y déjame explicarte lo que está pasando aquí. Así que vamos a tener que pasar esto a la ruta de subrayado del archivo variable. Y ahora entrada. Entonces vamos a preguntarle al usuario que oye, ingrese la ruta del archivo para guardar la clave. Ahora, por aquí donde dice el cifrado predeterminado en la clave de punto bajo clave sigue siendo parte de la cadena. Sólo le estoy indicando al usuario que oye, si no nos proporciona su propia clave personalizada, vamos a usar la clave predeterminada que es el cifrado bajo clave de punto clave. Ahora bien, esto es muy importante, donde dice, o encriptación bajo clave de punto clave. Ahora, aquí mismo, le estamos diciendo a Python que, Hey, debería por si acaso, aunque se le haya proporcionado al usuario la opción de usar su propia clave personalizada, si quiere usar nuestra propia clave predeterminada, entonces úsela. Entonces aquí dijimos o y ahora el nombre de nuestra clave predeterminada. Así que todo lo que tenemos que hacer aquí es simplemente eliminar la opción predeterminada y luego simplemente pasar el archivo en la ruta de puntuación. Y ahí tienes. Entonces esa es la opción número uno, toda trazada. Pasemos a la opción número dos. Voy a entrar aquí y decir, L F, elección es igual a dos, dos puntos. Entonces aquí dentro, nos gustaría cifrar el archivo. Ahora recuerda, para cifrar el archivo, necesitamos tres parámetros En primer lugar, tenemos que pedirle al usuario que nos diga el archivo que le gustaría cifrar, que será el archivo de entrada Y luego también donde quisiera almacenar el contenido encriptado. ¿Cuál va a ser el nombre del archivo de salida? Y luego, tercero, qué clave les gustaría usar para hacer el cifrado. Entonces voy a venir aquí ahora mismo. Pasemos la entrada variable en la elección de puntaje. Oh, perdóname. Debería ser la opción LI. Sin elección. Me dejó llevar opción, ninguna opción. Así entrada archivo de entrada. Perdóname, ingrese archivo de guión bajo. Voy a decir iguales. Y ahora pidamos al usuario que nos diga cuál es el nombre de los archivos. Voy a decir entrar la ruta del archivo para cifrar déjame eliminar este mensaje Entonces ingresa la ruta del archivo para cifrar. ¿Bien? Entonces, vamos a pedirle al usuario que haga eso. Y luego la salida en el archivo Sco va a ser igual a la entrada. Y ahora, pidamos al usuario que nos diga el nombre de los fs de Apple. Voy a decir ingrese el nombre del archivo de salida. Columna. Y ahora, finalmente, ¿qué pasa con la llave? Voy a decir clave en el camino del alcance. Bien, va a ser igual a input. Y ahora podemos decir, entrar en la ruta de la clave de cifrado de cifrado. De lo contrario, se utilizará el valor por defecto, ¿de acuerdo? Así que voy a simplificar la sentencia string aquí. No voy a indicar el nombre del niño predeterminado. No creo que sea necesario. Entonces todo lo que tenemos que hacer en este momento en este momento es solo decir también el o cifrado. Subrayar clave punto clave. Y ahí tienes, ¿verdad? Entonces, una cosa que tenemos que hacer aquí es que tenemos que dar cuenta de los errores, ¿de acuerdo? ¿Qué pasa si el usuario y si tal vez proporcionó el archivo de entrada incorrecto o el nombre del archivo de salida es incorrecto, o tal vez incluso la clave no es correcta? ¿Qué debería pasar? Entonces, brindemos la opción ahora mismo para atender eso. Entonces voy a decir inténtalo. Recuerda eso, y ahora la clave es igual a la clave de subrayado de carga. Y ahora entre paréntesis, el camino clave, ¿de acuerdo? Y ahora las partes más importantes cifran En el archivo de partitura Y ahora entre paréntesis, ¿cuáles son los tres parámetros? Tenemos la entrada en el archivo de puntaje, tenemos la salida, en el archivo de puntaje, y ahora también tenemos la clave. Entonces estos son los tres parámetros. Y si hay algún error, generemos esto. Voy a decir, excepto Excepción. Bien, como E. Y ahora podemos imprimir nuestro mensaje de flecha. Entonces voy a usar la cadena F, y luego voy a decir algo así como flecha durante el cifrado. Bien, dos puntos y ahora podemos usar nuestras llaves de color para indicar cuál es el error particular, y ahí tienes Así que hemos creado con éxito la opción número dos con x user para proporcionar la ruta del archivo que quieren cifrar, el nombre del archivo de salida, y luego también la clave también Y también hemos agregado algún manejo de errores. Fantástico. Ahora, todo lo que voy a hacer es que voy a agarrar este bloque de código, ¿de acuerdo? Y simplemente voy a pegarlo porque piénsalo, ¿de acuerdo? El proceso de cifrado y cifrado es casi exactamente lo mismo. Es justo enfrente, ¿verdad? Así que voy a copiar todo ese bloque de código, y voy a venir aquí, y ahora voy a pegarlo. ¿Bien? Ahora note, sin embargo, que la sangría no es correcta. Así que asegúrate de que cuando hagas exactamente lo mismo que yo, asegúrate de que tu sangría sea correcta Asegúrate de que todo esté alineado correctamente, y esto debería estar bien. Bien, todo lo que tenemos que hacer ahora mismo es cambiar las opciones aquí, así que la opción número tres a la número dos. Archivo de entrada, voy a decir ingrese la ruta del archivo a qué descifrar Bien. Archivo de salida. Introduzca el nombre del archivo de salida. Eso está bien. Ingrese la ruta de la clave de cifrado. De lo contrario, bien, ten en cuenta que la clave de cifrado es exactamente lo mismo que la clave de descifrado, por lo que no necesitamos cambiar el texto aquí Puedes cambiarlo si quieres, pero sólo voy a dejarlo como está. Y finalmente, bien, por aquí también, solo necesitamos cambiar esto y ahí vas el manejo de errores está intacto. Y una cosa más que tenemos que cambiar va a estar por aquí donde dice el archivo encriptar Por aquí, debería ser un archivo desencriptado, ¿de acuerdo? Entonces quieres asegurarte de que cada vez que copies y pegues código y necesites alterar algún texto, asegúrate de que lo revises correctamente. De lo contrario, puede terminar teniendo algunos problemas. Bien, todo lo que tenemos que hacer ahora mismo es agregar la cuarta opción. Entonces voy a entrar aquí y decir, yo opción equivale a cuatro. Podemos imprimir Xs en el programa. Y ahora vamos a tener la declaración break, también, porque recuerda que a pesar de que le brindamos cuatro opciones al usuario, podrían volverse bastante tontas y decidir elegir la opción número cinco o seis o siete o cualquier otra opción que ni siquiera exista. Entonces tenemos que dar cuenta de eso también. Entonces voy a decir break y luego voy a proporcionar la declaración final de Ls. Y ahora podemos simplemente decir print y luego decirle al usuario, por favor elija una opción válida. Y ahí tienes. Y ahí está. Y ahora, todo lo que tenemos que hacer es ejecutar la función principal, y ahí está. Entonces ojalá, el programa debería funcionar. Déjame seguir adelante ahora mismo y ejecutar el programa, y ahí tienes. Bien, así que vamos a probar esto. Voy a ir antes que nada, con la opción número uno, presione Enter. Voy a ir con el valor predeterminado, así que voy a presionar Enter otra vez. Y ahí tienes. Impresionante. Entonces puedes ver ahora mismo que tenemos la clave de cifrado que ha sido creada por el programa. Entonces ahora, intentemos cifrar un archivo. Así que voy a venir aquí ahora mismo, y vamos a crear un archivo D TXT de muestra. Agreguemos algo de texto aquí. Se trata de texto de muestra, que vamos a cifrar y también descifrar Bien. Entonces veamos. Voy a seguir adelante ahora mismo e ir al programa. Vamos con la opción número dos ahora mismo. Así que intentemos cifrar nuestro archivo TXT de muestra. Voy a presionar Enter. Y ahora, ¿cuál va a ser el nombre del archivo de salida? Llamemos a esto el archivo de llamada encriptado punto TXT. Vamos. Vamos a usar la clave predeterminada. Voy a presionar Enter. Y ahí tienes. Entonces echemos un vistazo. Tenemos el cifrado bajo texto Scoefled, y ahí está. Esta es la versión cifrada de nuestro archivo de texto de muestra. Así que ahora, intentemos descifrar el archivo cifrado y veamos si vamos a recuperar el mismo texto Voy a ir con la opción número tres. Ingresa la ruta del archivo a descifrar, va a ser encriptado undersCople punto TXT. Y ese será el nombre del archivo de salida. Podemos llamarlo descifrado, Underscofle punto TXT. Vamos a ir con la clave por defecto. Y el Oh, oh, oh, oh, lo siento, tenemos un mensaje de error. Dice, No hay tal archivo, Dictura encriptada underscoflt ¿Qué hice mal? Nosotros sí tenemos Oh, ¿ ves lo que hice? Mi archivo se llama cifrado, no cifrado. Sí me disculpo. conseguirme un par de anteojos nuevos. Sí me disculpo. Intentemos volver a ganar eso. Entonces la opción número tres. Entonces el archivo aquí está encriptado. Ah, vamos a archivar punto TxD. Ahora el nombre del archivo de salida, voy a ir con descifrado. En el archivo les go, punto TXT. Clave predeterminada, y ahí tienes. Bien, entonces ahora echemos un vistazo al archivo descifrado, y podrás verlo funcionar Entonces, antes que nada, ciframos el punto de muestra TXT. Tenemos un archivo cifrado, que puedes ver ahora mismo, y luego desciframos este archivo para recuperar exactamente los mismos textos que puedes ver ahora mismo, funciona perfectamente bien Intentemos la opción número cuatro para salir del programa. Bien, salí del programa. Ejecutemos el programa una vez más, y vayamos con la opción número siete. Y dice, por favor elija una opción válida, y ahí va. Así que, Whoa, hemos creado con éxito nosotros mismos un cifrado y descifrado Ha sido bastante, pero ojalá hayas aprendido algunos conceptos nuevos como usar los modos binario de escritura y lectura binarios. También aprendiste cómo puedes proporcionar la opción para que el usuario use su propia clave personalizada o use la clave predeterminada. Y ojalá aprendiste mucho en este proyecto de dinero. Muchas gracias por ver, y por supuesto, los veré en la próxima clase. 62. Introducción a la sección Oop: Bien, así que bienvenido a lo que podría ser la sección final de este curso Y aquí, estamos hablando de la OOP, la programación orientada a objetos. Suena como un bocados. Suena muy complicado, pero no te preocupes. Voy a cubrir todos los conceptos básicos aquí. Entonces este va a ser un tema grande, grande, grande porque lo creas o no, si puedes dominar POO, puedes escribir algunos programas realmente increíbles, ¿de acuerdo? Entonces en esta sección, vamos a aprender qué son los objetos. También vamos a hablar de clases, ¿de acuerdo? Entonces, ¿cuál es la relación entre un objeto y una clase? Y claro, vas a aprender sobre métodos. Te voy a dar muchos ejemplos. También va a haber algunos ejercicios de codificación. También vas a aprender algunos conceptos muy importantes como la encapsulación, herencia e incluso polimorfismo Oh, ¿qué es exactamente el polimorfismo? Eso suena muy complicado, ¿verdad? No es tan complicado como suena. No te preocupes por ello. Entonces va a ser un tema muy, muy interesante, y estoy muy emocionado de enseñarte sobre OOP Entonces, como siempre, sin perder más tiempo, saltemos de inmediato. 63. Introducción a la POO: Ven a la nueva sección donde vamos a estar echando un vistazo a la programación orientada a objetos, también conocida como OOP Bien, aquí es donde vamos a profundizar en algunos aspectos avanzados de la programación Pero no te preocupes, estaré aquí para explicarte de la manera más sencilla posible. Entonces, ¿qué es exactamente POO? Lo que ves frente a ti es básicamente una biblioteca, ¿verdad? Tienes todo tipo de libros. Tienes libros sobre antropología, arqueología, biología, química, matemáticas, etc. Imagina que eras el bibliotecario. Tú eras la persona a cargo de todos estos libros. Idealmente, por supuesto, necesitarías algún tipo de sistema para administrar estos libros, ¿verdad? Necesitarás saber dónde poner los libros. Necesitas conocer las características de cada libro, como, ya sabes, el título del libro, el autor del libro. Y también si los libros están o no disponibles, tal vez hayan sido quemados, ya sabes, cosas así Entonces, imagina que creamos una clase llamada libro, ¿de acuerdo? Y así como dije, esta clase puede definir varios tipos de características sobre cada libro como el título del libro, el autor, el género, el color de portada. Pero además de los atributos físicos del libro, también podemos hablar de las cosas que podemos hacer con el libro. A lo mejor te puede pedir prestado el libro. Y si podemos, ¿por cuánto tiempo podemos tomar prestado el libro? Tal vez incluso podamos morder el libro y así sucesivamente. Bien, piensa en todos estos atributos bajo el libro de clases. ¿Bien? Ahora, Cosas como el título, el autor, el género, las cosas que describen físicamente el libro, podemos llamarlos atributos, ¿verdad? Ya hemos hablado de atributos en este curso. Pero entonces los métodos, los métodos describirán qué es lo que realmente podemos hacer con cada libro. ¿Puedes chico? ¿Se puede morder? Entonces, básicamente, la clase libro definirá tanto los atributos como los métodos. Entonces, en otras palabras, la clase de libro es como una descripción general de cómo podría ser un libro y lo que realmente podemos hacer con el libro. Pero todavía no nos estamos refiriendo a un libro específico. Bien. Ahora, cada libro individual en la biblioteca es lo que nos referimos como un objeto de la clase de libro. Entonces, una vez más, la clase de libro nos dará una descripción general de los atributos y métodos de cada libro, mientras que los libros mismos, los libros individuales, se llamarán objetos de la clase de libro. Entonces los atributos objeto del libro A, por ejemplo, podrían ser el título es programación Python. El autor podría ser, Jack, y entonces el color podría ser azul, ¿verdad? Y luego echemos un vistazo al libro B. El título podría ser ciber uno oh uno. La autora es Alice y el color es rojo. Estos son atributos individuales de cada libro, y los atributos tienen sus propios valores. El valor del atributo color para libro A es azul como ejemplo, a la derecha, y así sucesivamente. Entonces los métodos, también podemos, por ejemplo, decir libro A tiene un método llamado préstamo, por lo que una vez que el libro ha sido prestado, la biblioteca tendrá que actualizar los registros para indicar que el libro ya no está disponible para ser Y de la misma manera, imagina que el Libro B había sido tomado prestado en el pasado, pero ahora se le ha devuelto Luego podemos marcar el Libro B como disponible nuevamente. Entonces estos son métodos, estos son atributos. Entonces, para darte un resumen rápido, la clase es como la descripción general del libro donde se definen los atributos y métodos El objeto es una instancia. Básicamente un libro específico en una biblioteca, un objeto específico bajo la clase, la clase de libro. Los atributos serán la descripción física de cada libro, mientras que los métodos también conocidos como acciones están bien, esencialmente las acciones que se pueden realizar en cada libro. Entonces Jerman Vernick video donde vamos a empezar a echar un vistazo a algunos ejemplos 64. Cómo crear una clase básica: Lo vamos a hacer ahora mismo es vamos a crear un código centrado alrededor del ejemplo anterior que te di con respecto a la biblioteca, los libros, y los atributos y métodos asociados a cada libro. Entonces lo primero que tenemos que hacer es definir el libro de clases. Entonces voy a decir libro de clase y así es como crearíamos la clase llamada libro muy sencillo. Ahora bien, la cosa es, necesitamos indicar los atributos que se van a asociar a cada objeto del libro. ¿Bien? Entonces para hacer esto, voy a decir la multa. Y ahora, en él, Subrayado, subrayado. Y ahora dentro de los paréntesis, aquí es donde ahora vamos a indicar qué atributos se van a asociar con cada libro. Normalmente comienzas con algo que se llama yo mismo. ¿Bien? Esto es muy, muy común en la programación orientada a objetos, ¿bien? Así que el yo es una manera de referirse a cada objeto individual de la clase con la que estamos tratando. En este caso, ahora mismo, va a ser cada libro individual. Así que siempre vas a empezar por sí mismo, y ahora el atributo real. Entonces voy a ir con título, autor, y agreguemos uno más. Digamos Génova. ¿Bien? ¿Por qué no? Génova, Colón. Hasta el momento tan bueno. Bien. Ahora tendremos que asignar variables a cada uno de nuestros atributos. Entonces voy a empezar diciendo auto punto título. ¿Ves cómo funciona esto ahora mismo? El título del auto punto es igual al título. Ahora, ¿puedes adivinar el siguiente auto punto autor es igual al autor Y luego, de nuevo, auto punto Gena equivale al género. Hasta el momento tan bueno. Voy a añadir un atributo más. Técnicamente no es un atributo que hayamos definido hasta ahora, pero será útil una vez que empecemos a crear los métodos que aplicaremos al libro, ¿de acuerdo? Y es que queremos indicar si un libro está disponible o no para ser prestado o no Entonces voy a decir auto punto disponible. Bien, digamos que el yo está bien, está en el marcador disponible, ¿de acuerdo? Queremos inicializar esto para que sea verdad desde el principio, ¿de acuerdo? Entonces, al principio, todos los libros están disponibles para ser prestados, ¿de acuerdo? Ahora, hemos definido los atributos, título, autor, gena. También hemos agregado uno de los métodos, uno de los parámetros que vamos a usar en nuestros métodos, es decir, si el libro está disponible o no. Entonces ahora, definamos los métodos reales por sí mismos. Y el que vamos a tratar aquí va a ser el préstamo Entonces voy a decir pedir prestado y ahora entre paréntesis, yo, ¿de acuerdo? Estamos creando un método que podemos aplicar al libro de objetos. Entonces digamos que si el libro está efectivamente disponible, ¿qué debería pasar? Entonces voy a decir si auto refiriéndose a lo que el libro es, de hecho, disponible? ¿Qué hacemos? Recuerda que una vez que el libro esté disponible para ser prestado, necesitaremos actualizar los registros en la biblioteca para indicar que el libro ya no está disponible porque ahora solo ha sido prestado, Entonces vamos a decir self dot está disponible, no debería ser igual a qué? Falso, porque ya no está disponible. ¿Bien? Mira de nuevo la línea 11. Esto es porque esto es muy, muy importante, ¿de acuerdo? Aquí mismo, estamos haciendo eso por primera vez, alguien quiere tomar prestado este libro, tal vez no por primera vez, pero el libro está actualmente disponible. Entonces, ¿qué debería pasar? Debemos decir eso, bien, debemos actualizar los registros para indicar que el libro ya no está disponible, y luego dejarnos imprimir algo, ¿bien? Digamos imprimir. Y ahora entre paréntesis, voy a usar la cadena F porque quiero hacer referencia al título real del libro que ha sido prestado Entonces voy a abrir mis frenos universitarios, y voy a decir auto punto Qué punto título. Bien. Y ahora podemos teclear lo que sea, queremos teclear ha sido prestado. ¿Bien? En los códigos de cierre. Y ahí está. Entonces deberían pasar dos cosas si el libro está disponible para ser prestado. En primer lugar, necesitamos actualizar los registros para indicar que el libro ya está disponible porque ahora ha sido prestado Y entonces deberíamos imprimir el mensaje diciendo que el libro ha sido prestado. Ese, ¿para qué sirve la declaración de aquí? ¿Qué por qué estamos indicando se? Tenemos que indicarnos se porque en la línea 11 donde dice, Si self está disponible ahora mismo en esta etapa, el programa está asumiendo que el libro está actualmente disponible. Pero, ¿y si en un escenario en el que el usuario de la biblioteca quisiera pedir prestado un libro que en realidad no estaba disponible en primer lugar Eso es lo que va a representar aquí la declaración de Ls. Entonces se, si el libro no estaba disponible inicialmente, simplemente imprimir Imprimir, imprimir. Y entonces sólo podemos decir, perdón. Este libro no está disponible actualmente. Y se me olvidó poner esto en comillas. Lo sentimos, este libro no está disponible actualmente. Por supuesto, también podemos usar la cadena F y el autotítulo para hacer referencia al nombre real del libro, pero eso no es necesario. Pero solo voy a decir, perdón, este libro no está disponible actualmente. Bien. Impresionante. Ahora, definamos otro método, que sería devolver el libro. Entonces podemos tomar prestado el libro, pero también podemos devolverlo. Entonces voy a decir definir retorno en el auto del libro de partitura. Así que hemos dado la función del método llamado Return On score Book y luego self. Entonces en este caso, ahora mismo, ¿qué debería pasar si el libro ha sido devuelto? Ahora vamos a decir self dot está disponible ahora debería ser igual a lo cierto porque el libro ya está disponible. Y sigamos ahora mismo e imprimamos un mensaje y digamos, también hagamos referencia. Entonces voy a decir cadena F, y luego se ha devuelto el nombre del libro. ¿Bien? Entonces probemos esto. Pongámoslo en acción, ¿de acuerdo? Así que voy a venir hasta aquí abajo. Digamos libro subrayado A, equivale ahora al objeto real llamado libro Y ahora dentro, vamos a proporcionar el nombre, el título del libro, antes que nada, así que digamos Python uno oh uno. ¿Bien? ¿Qué sigue el autor? Entonces llamemos a la autora Alice. ¿Bien? Y entonces, ¿cuál va a ser el género? Digamos programación, ¿verdad? Programación. ¿Bien? Y ahora, vamos a crear otro objeto. Este objeto será representado por libro sobre la partitura, B es igual, y ahora otra vez libro, y ahora entre paréntesis, digamos cyber dos oh uno, ¿bien? Y entonces el autor aquí va a ser Jack y entonces ¿cuál va a ser el género? Digamos tecnología, tecnología, ¿verdad? La tecnología debería ser el género. Y ahí está. Así que voy a venir hasta aquí abajo. Y ahora, llamemos a los métodos, ¿de acuerdo? Tenemos todo en su lugar ahora mismo. Llamemos a nuestros métodos, que, por supuesto, qué pedir prestado y luego regresar Entonces puedo decir libro, en primer lugar, subrayar un punto Pedir prestado ¿Bien? Entonces, antes que nada, vamos a tomar prestado el libro Y luego déjame ejecutar el programa. ¿Ves ahora mismo, dice, Bien, Python uno oh uno ha sido prestado porque por aquí, va a indicar en línea 11 Va a indicar desde el principio que, Bien, el libro está disponible. Ahora se ha tomado prestado, así que tendremos que actualizar los registros para decir que es falso Y ahora vamos a decir que el libro ha sido prestado. Pero ahora en esta etapa actual, el libro no está disponible, ¿verdad? Entonces, apuntemos a la declaración L. Ahora debería imprimir, lo siento, este libro no está disponible actualmente si vuelvo a ejecutar el método. ¿Y si alguien más entra ahora y quiere tomar prestado el libro que ya no está disponible ¿Qué va a pasar? Yo voy a ejecutar el programa. Y ahora lo ves decir, perdón este libro no está disponible actualmente. Bien. Pero, ¿y si y si ahora devuelvo el libro? ¿Qué va a decir? Va a decir Python uno a uno ha sido devuelto. Y ahora, si vuelvo a ejecutar el método return lo siento, el método de préstamo otra vez, una vez más ¿Se iba a decir? Va a decir que Python 11 ha sido prestado. Así que ya puedes ver, funciona perfectamente bien. Así que solo para darte una recapitulación muy rápida, antes que nada, tuvimos que crear una clase llamada libro ahora dentro, tenemos que definir los atributos asociados a cada libro Y lo hicimos diciendo, definir la puntuación en la partitura en ella sobre la partitura, y luego los parámetros o los atributos entre paréntesis. Y luego asignamos cada atributo a un valor por lo que self o title será igual a title, self dot author será igual a author, self dot género será igual a Gena Y entonces también creamos un método aquí que nos indicará si podemos o no tomar prestado el libro Entonces esto es básicamente un atributo booleano. Dijimos, Bien, self dot está disponible al principio debería ser igual a true. Y ahora creamos dos métodos diferentes. El primero aquí sería el préstamo. Entonces, ¿qué pasa cuando se toma prestado un libro? Si inicialmente estaba disponible, actualizaremos los registros para decir que self está disponible ya no está disponible, por lo que es falso. Y entonces deberíamos imprimir el título que dice, perdón este libro ha sido prestado. Sin embargo, de lo contrario, si el libro ya estaba prestado inicialmente, simplemente deberíamos imprimir lo siento, este libro no está disponible actualmente Y luego el segundo método, ¿qué sucede cuando se devuelve el libro? Ahora debemos actualizar nuestros registros una vez más para indicar que self está disponible ahora es cierto, y podemos imprimir el nombre del libro diciendo que ha sido devuelto. Y luego finalmente, aprendemos a crear objetos individuales en libros individuales. Podemos simplemente decir libro subrayado A es igual a libro, y luego entre paréntesis, tendremos que rellenar los valores para los atributos Y luego creamos otro libro, libro B, que es Cyber to one Jack Technology. Y luego llamamos los Métodos, y eso es prácticamente todo. Así que gracias por ver el video. Te veré en la siguiente clase. 65. Crear una clase básica, parte 2: Antes de pasar a una nueva lección de programación orientada a objetos, quería darte un ejemplo más para que realmente puedas entender qué es lo que estamos haciendo. Así que vamos a crear una clase diferente. ¿Bien? Hagamos algo relacionado con la ciberseguridad Digamos, por ejemplo, que queríamos crear una clase llamada user, ¿bien? Y las cuentas de usuario tendrán diferentes atributos como el nombre de usuario, el rol, ¿bien? Y luego creemos también un método. Digamos, por ejemplo, ¿qué puede hacer el usuario? El usuario puede iniciar sesión. ¿Bien? Entonces hagámoslo. Entonces voy a quitar todo este código. Y en la parte superior, sólo voy a decir clase de usuario usuario. ¿Bien? Entonces, ¿cómo creamos nuestro usuario? Decimos clase y luego usuario dos puntos. Y ahora ¿qué hacemos? Tenemos que definir los atributos que se asociarán a cada cuenta de usuario. Entonces voy a decir definir subrayado en ella. En la partitura. Y ahora entre paréntesis, ¿ qué tenemos? Tenemos uno mismo porque tenemos que hacer referencia a cada cuenta de usuario individual. Entonces voy a decir yo mismo, y entonces los atributos serán nombre de usuario, y vamos a ir con el rol? Uno más. Rollo. Frío , y eso es todo. ¿Qué va a ser lo siguiente que hay que hacer? Lo siguiente ahora será asignar variables a cada uno de nuestros atributos. Entonces voy a decir self dot usa un nombre es igual, usa un nombre. Bastante sencillo. Y entonces auto dot roll debería ser igual a qué rollo. Ahí está. Bien, entonces hemos definido los atributos. Ahora bien, ¿qué pasa con los métodos? Vamos a crear solo un método llamado log in, ¿de acuerdo? Así que un usuario realmente puede iniciar sesión. Entonces voy a decir muerte y luego iniciar sesión. Y luego entre paréntesis, ¿qué va a ser? Va a ser auto. Sí mismo. Colón. Y ahora, ¿qué debería pasar una vez que un usuario haya iniciado sesión? Imprimamos un mensaje de bienvenida. Así que voy a usar los códigos de cadena F, y luego podemos decir, bienvenidos y luego dejar que nuestro Python complete el resto de la información ahí mismo. Así que bienvenido. Y luego nombre de usuario propio. Y ahí está, eso es todo lo que tenemos que hacer. Y ahora, por último pero no menos importante, vamos a crear un objeto, básicamente cuenta de usuario, y luego llamemos a nuestro método. Ar? Entonces voy a decir admin sobre el usuario score, esto puede representar nuestra primera cuenta que será para un admin. Va a ser igual a qué usuario. Y ahora entre paréntesis, tenemos que rellenar los valores de los atributos que son username y roll. Entonces el nombre de usuario en este caso, ahora mismo va a ser Alex. ¿Bien? El nombre de usuario es Alex. Lo siento codifica, Alex, y entonces el papel de Alex es obviamente el de administrador. Entonces administrador. Bien. Y luego finalmente, llamemos a nuestro método. Entonces va a ser admin scouser dot log in Brackets. Y si este programa funciona, debería decir algo así como, bienvenido Alex. Vamos a correr. Y ahí tienes. Bienvenido, Alex. Entonces, este ha sido otro ejemplo de cómo crear una clase, cómo definir los atributos para cada objeto en esa clase. Y luego también creamos un método para cada objeto individual. Y luego nosotros, por supuesto, creamos un objeto real, y luego finalmente llamamos al método asociado con el objeto. Entonces, ojalá, ahora tengas una mejor comprensión de la OOP. Gracias por ver el video. Te veré en la siguiente clase. 66. Encapsulación (1080p): Uno de los conceptos fundamentales de programación orientada a objetos OOP es algo conocido como encapsulación, que básicamente se refiere a mantener algún tipo de datos privados para que solo se pueda acceder o modificar de ciertas maneras Ahora bien, esto es muy útil en ciberseguridad porque nos permite proteger datos sensibles como contraseñas, ¿de acuerdo? Entonces, como ejemplo, podríamos escribir o crear una clase y objetos que almacenarán la contraseña de un usuario de forma privada y luego solo proporcionar una forma de verificar si la contraseña de entrada es realmente correcta. Así que déjame mostrarte cómo podemos encapsular datos usando OOP. Voy a mantener exactamente la misma clase, ¿de acuerdo? Entonces usuario de clase sin embargo, voy a cambiar el rol atributivo a contraseña ¿Bien? Y entonces obviamente aquí dentro, voy a cambiar nuestro rol de self dot a password, y entonces esto va a ser igual a nuestra contraseña también. No obstante, la única forma de decirle a Python que, Oye, este atributo en particular, queremos que sea privado. Esto no es información pública. Esto es privado solo para el usuario. Y podemos hacerlo pasando por aquí delante de la P por contraseña y luego agregando un doble subrayado Entonces esto de aquí mismo, los guiones bajos dobles le indicarán a Python que, Oye, este es un atributo privado Queremos encapsular la información aquí. Así que ahora vamos a crear un método que podamos usar para verificar si la entrada proporcionada por el usuario realmente coincide con la contraseña real para ese usuario. Entonces lo que voy a hacer ahora mismo es que voy a definir nuestro método, y llamémoslo autenticar, ¿de acuerdo? Así que define autenticar. Y ahora entre paréntesis, voy a ir con auto y contraseña, ¿de acuerdo? Y estamos haciendo esto porque yo aquí se va a referir al usuario cuya contraseña realmente queremos verificar y luego la contraseña misma que estamos comprobando, ¿de acuerdo? Y ahora esta es la clave. Tendríamos que regresar y ahora self dot Osco, contraseña ahora será igual a contraseña. Entonces queremos verificar si la contraseña que está almacenada para el usuario va a ser la misma la contraseña que se proporcionó como entrada. Eso es lo que esto va a hacer aquí mismo Línea ocho. Entonces, si la contraseña coincide, línea ocho devolverá true, pero si no hay una coincidencia, va a devolver false. ¿Bien? Así que ahora necesitamos crear nuestros objetos de usuario y asegurarnos de que, por supuesto, cada vez que estés creando objetos de usuario, la sangría esté afuera Debería estar en la misma sangría que la propia clase, No lo hagas dentro la clase sino afuera. Tiene que coincidir, ¿de acuerdo? Entonces por aquí, no voy a decir usuario es igual, y ahora usuario así que digamos que necesitamos proporcionar un nombre de usuario. Vayamos con invitado, bien. Vayamos con invitado. Algo muy sencillo invitado. Y ahora por la contraseña, voy a ir con S y luego decir SOD, Fish, uno, dos, tres, ¿bien? Entonces esta es la contraseña que hemos creado para nuestro usuario invitado, ¿de acuerdo? Bien. Ahora, intentemos autenticar al usuario usando diferentes contraseñas, ¿de acuerdo? Entonces intentemos usar la contraseña correcta y luego la contraseña incorrecta, ¿de acuerdo? Entonces, ¿cómo vamos a llamar a nuestro método? Voy a decir imprimir. Y ahora entre paréntesis, el punto de usuario se autentica. Entonces estamos llamando al método ahora mismo para autenticar a nuestro usuario Y entre paréntesis, queremos proporcionar la contraseña que queremos verificar. Entonces la contraseña aquí ahora mismo, déjame ir con la correcta. Va a ser el mismo SOD, pez uno, dos, tres, ¿verdad Y luego Brackets, ¿de acuerdo? Si ejecuto el programa ahora mismo, y oh, la línea 12 es un mensaje de error. Oh, deberíamos tener un soporte extra aquí. Perdón por eso. Déjame intentar ejecutarlo de nuevo. Y ahí tienes. Entonces ahora, dice verdadero porque la contraseña aquí, STFish 123 es la misma la contraseña real que le hemos dado al usuario Ahora, lo que voy a hacer es simplemente copiar esta línea, bien, copiar, pegar. Y ahora intentemos usar una contraseña diferente. Así que sólo voy a ir mayúscula A, BC, uno, dos, tres, y bien, eso es todo. Entonces déjame seguir adelante ahora mismo. Ejecuta de nuevo el programa, y ahora puedes ver que es falso porque nuestro método ha comprobado que ABC 123 no es igual a SotFish Entonces así es como podemos encapsular datos usando la programación orientada a objetos todo lo que realmente tenemos que hacer para indicar que un atributo particular es privado que queremos encapsular es tener los guiones bajos dobles frente al los guiones bajos dobles frente nombre del atributo real Entonces D's, gracias por ver el video. Te veré en la siguiente clase. 67. Herencia: Concepto muy importante de programación orientada a objetos va a ser el concepto de herencia. Y al igual que en el idioma inglés, sabemos que la herencia es cuando, ya sabes, algo se transmite de una persona a otra, ¿verdad? Así que en Python, en realidad podemos crear versiones especializadas de una clase sin siquiera tener que reescribir código Básicamente podemos crear una clase secundaria que pueda heredar atributos y métodos de una clase padre Entonces quiero darte un ejemplo aquí, ¿de acuerdo? Ya que estamos tratando con el usuario de clase, obviamente en sistemas y redes, tenemos diferentes niveles de permisos, ¿verdad? Un usuario normal puede acceder a ciertos tipos de archivos y luego imprimirlos, mientras que un usuario administrador podrá hacer exactamente las mismas cosas que un usuario normal. Pero como son usuarios administradores, tendrán permisos adicionales como poder decir, por ejemplo, editar esos archivos, ¿verdad? Entonces lo que voy a hacer ahora mismo es que voy a crear una clase para el usuario regular pero luego voy a crear otra clase que será el usuario admin que heredará los métodos del usuario regular Entonces por aquí, tenemos un usuario de clase, y ahora estoy definiendo un atributo básico, y ese va a ser el nombre de usuario, ¿de acuerdo? Así que ahora el siguiente paso será simplemente decir nombre de usuario self dot es igual a igual, y luego por supuesto, el nombre de usuario. Ahora, quiero crear un método específicamente para nuestro usuario aquí. Entonces voy a decir definir, y digamos que un usuario normal puede iniciar sesión, ¿verdad? Pueden iniciar sesión. Entonces voy a decir iniciar sesión. Y ahora entre paréntesis, voy a decir yo mismo. ¿Bien? Y luego cuando inicien sesión, vamos a hacer algo. Digamos que imprime y luego el nombre de usuario propio ha iniciado sesión. Déjame decir tiene algo de espacio aquí, ha iniciado sesión. Bien. Hasta el momento, lo que hemos hecho aquí es que hemos creado la clase de usuario con el atributo username. También hemos asignado un método llamado Log in que básicamente imprimirá el nombre del usuario que ha iniciado sesión. Sin embargo, ahora voy a crear otra clase que va a heredar no solo el atributo nombre de usuario de la clase de usuario, sino también el método log in ¿Cómo voy a hacer esto? Voy a venir aquí y luego notar la intención estoy completamente fuera. Ahora voy a decir clase y ahora dar el nombre de esta nueva clase. Entonces voy a decir admin. Y entonces incluso podemos decir usuario admin como ejemplo. En realidad, dejemos que nos quedemos con el administrador, ¿de acuerdo? Entonces admin, y ahora entre paréntesis, voy a decir usuario. Colón. Así que aquí mismo en la línea nueve, hemos creado una nueva clase de un usuario llamado usuario administrador que va a heredar el atributo, nombre de usuario, y luego el método sesión desde la clase de usuario Voy a ir un paso más allá y ahora agregar un método adicional porque este es un usuario admin, pueden hacer cosas extra. Entonces voy a decir define vamos a llamar a este acceso en esos llamados logs porque son admin, pueden acceder a los logs. Entonces voy a decir yo mismo, llama. Y ahora solo vamos a imprimir imprimir entre paréntesis. Puedo usar cadena F y digamos algo así como el self dot. El nombre de usuario está accediendo a los registros. Y ahí está. Y ahí tienes. Ya terminamos. Entonces ahora, lo que voy a hacer es que voy a crear nuestro usuario administrador. Entonces voy a decir admin es igual, y ahora en capital admin usuario. Y luego entre paréntesis, vamos a proporcionar el nombre de usuario admin. ¿Bien? Y ahora, vamos a ejecutar los métodos. Entonces voy a decir admin punto Iniciar sesión corchetes. Y vamos a ejecutar también el segundo método, que va a ser admin dot, Access underscore logs. Y aquí está. Entonces ahora veamos si esto realmente funcionaría. Vamos a correr. Y oh, tengo otra flecha admin Oh, sí me disculpo. Debería ser admin por aquí. Me dejé llevar. Admin es igual a admin y luego usan el nombre admin. Sí me disculpo. Entonces déjame ejecutar el programa una vez más. Y ahí tienes, Muy bien, entonces admin ha iniciado sesión, y ahora Admin está accediendo a los registros, y eso es básicamente todo. Así que no tuvimos que especificar que el usuario admin, la clase admin va a tener el parámetro o el atributo nombre de usuario o el método log in. Todo lo que teníamos que hacer era indicarle a Python que, Hey, esta nueva clase admin en realidad está heredando los atributos y métodos de la clase de usuario original Y eso es herencia para ti. Gracias por ver el video. Te veré en la siguiente clase. 68. Polimorfismo: Otro concepto dentro de la OOP es el concepto de polimorfismo, que básicamente se traduce en misma acción, pero Lo que pasa con el polimorfismo es que va a permitir las clases tengan métodos con exactamente el mismo nombre, pero luego se comporten Entonces como ejemplo, aún tratando con la clase de usuario, podemos tener diferentes tipos de usuarios iniciando sesión en ambos de una manera diferente. Entonces, como ejemplo, tengamos reglas diferentes. Así que voy a crear una clase para el usuario regular y luego una clase para el usuario administrador, y luego van a tener formas únicas de iniciar sesión realmente. Entonces mira esto bien. Voy a entrar aquí ahora mismo y crear clase usuario regular. Bien. Y ahora voy a definir muy simplemente el método, iniciar sesión y auto, ¿bien? Observe que no he pasado en ningún atributo en absoluto. Sólo voy directo al método, ¿de acuerdo? Entonces lo que voy a hacer ahora mismo es simplemente voy a decir imprimir ahora solo diría que el usuario regular ha iniciado sesión. ¿Bien? Ahora, mira esto, voy a crear otra clase, y llamemos a esto el usuario administrador. Bien, llame, y ahora otra vez, defina y ahora el mismo método exacto, inicie sesión yo. Pero ahora va a ser un mensaje impreso diferente porque ahora voy a decir admin ha iniciado sesión. Y déjame cerrar esto, y ahí está. Entonces ahora para el polimorfismo real, voy a hacer uso de él, vamos a asignar usuario para que sea igual a usuarios regulares Vamos a crear nuestros primeros objetos aquí para el usuario habitual. También vamos a crear un objeto para el usuario administrador, y por supuesto, voy a llamar a este administrador es igual a usuario administrador, y lo es. Así que hemos creado objetos para el usuario normal y el usuario administrador. Ahora llamémoslos. Entonces voy a decir usuario punto iniciar sesión. Soportes, y ahora también admin punto Log N. Y ahí vas. Así que ahora, intentemos ejecutar el programa, y ahí está, usuario regular ha iniciado sesión, Admin ha iniciado sesión. Entonces este es el concepto de polimorfismo donde se pueden tener dos clases diferentes Con el mismo método exacto, pero ese método actuará de una manera diferente, dependiendo de qué objeto particular o objeto de clase esté llamando a ese método. El método utilizado aquí obviamente es el método de inicio de sesión. Es aplicable tanto al usuario regular de la clase como al usuario administrador de la clase, pero va a comportarse de manera diferente porque va a imprimir un mensaje diferente dependiendo qué objeto de clase realmente haya iniciado sesión. Entonces eso es polimorfismo para ti. Misma acción, diferente comportamiento. Gracias por ver el video. Te veré en la siguiente clase. 69. Avance del proyecto final: Así que bienvenido al proyecto final, nuestro proyecto final de Python. Y juntos, vamos a construirnos un sistema de registro de usuarios muy potente. Ahora, ya hemos construido algo similar, pero esto va a ser mucho más mejorado. Ahora he ocultado el código. No quiero que veas el código todavía. Entonces lo que voy a hacer es que voy a ejecutar el programa para que veas de qué se trata. Entonces tenemos el sistema de registro de usuarios, tres opciones principales, registrarse, iniciar sesión o salir. Entonces voy a intentar registrarme y voy a introducir un nombre de usuario, vamos con Alex, ¿de acuerdo? Y voy a comprobar esto, ¿de acuerdo? Voy a ir con una contraseña bastante poderosa. Pero ahora échale un vistazo a esto, ¿de acuerdo? Dice que la contraseña no es lo suficientemente fuerte. La contraseña debe tener al menos ocho caracteres. Entonces sí tenemos una herramienta de verificación de contraseñas. Pero mira esto bien. Voy a ir otra vez a registrarme, ¿de acuerdo? Déjame bajar aquí, presiona uno. Ingresa un nombre de usuario diferente esta vez. Déjame ir con Boris, ¿de acuerdo? Y ahora mira esto. Bien, voy a ir con Bis 123. Boris. Entonces esto es bastante largo. Se trata de más de ocho personajes. Presiono Enter. Pero luego dice contraseña, no es lo suficientemente fuerte. La contraseña debe incluir al menos un símbolo especial. Entonces nuestra herramienta de verificación de contraseñas va a verificar cuatro criterios principales. Se va a asegurar que la contraseña al menos ocho caracteres de largo, tenga una letra mayúscula, tenga un número, y también un símbolo especial, ¿bien? Así que voy a intentar registrarme de nuevo, ¿de acuerdo? Esta vez, voy a ir con el nombre de usuario Alice. Y ahora vamos con una contraseña real real. Voy a ir con Alice uno, dos, tres con el símbolo add. Y ahí tienes, dice, Usuario tuvo éxito, y ahora voy a intentar iniciar sesión. ¿Bien? Échale un vistazo a esto. Esto te va a encantar, voy a iniciar sesión como Alice. ¿Bien? Y ahora contraseña, Alice, uno, dos, tres, con el símbolo add. Y ahora, Login fue exitoso, pero échale un vistazo a esto. Tenemos un menú de inicio de sesión posterior. Por lo que nuestros usuarios de inicio de sesión podrán acceder a un menú de inicio de sesión donde podrán ver sus registros o simplemente cerrar sesión. Entonces ahora, yo como Alice, si quería ver mis bitácoras, presiono uno, y ahí tienes. Dice ahora mismo que los registros para el usuario Alice. Alice se registró con éxito en esta fecha, y luego Alice también inició sesión con éxito. Así que vamos a implementar básicamente un sistema de auditoría que hará seguimiento de cada usuario y cada actividad en el sistema. Además, échale un vistazo a esto, o vamos a tener el archivo TXT de los usuarios que almacenará todos los nombres de usuario y sus contraseñas correspondientes, pero échale un vistazo a esto. Las contraseñas van a ser hash. No van a estar en texto plano. Vamos a implementar una función hash para hash de las contraseñas por seguridad Entonces puedes ver ahí mismo, vamos a implementar algunos hashing, también, pero eso no es también vamos a crear un archivo de registro de auditoría que hará un seguimiento de todos los registros en el sistema Así puedes ver ahora mismo el campo de registro para Alex, el campo registro para Boris, Ale se registró con éxito, y luego Ale también se conectó con éxito Entonces este va a ser un sistema de registro avanzado integral con una herramienta de verificador de passwor, y además va a tener hash toda la contraseña será hash así como una Así que aquí está la cosa, ¿de acuerdo? Te voy a proporcionar un documento de texto con algunos consejos y sugerencias útiles si quieres intentar escribir este programa por ti mismo, ¿de acuerdo? Así que adjunto a este video, te voy a proporcionar un archivo de texto con todos los consejos y sugerencias útiles. Te voy a decir el proceso general de pensamiento. Y si eliges no hacer eso, si solo quieres trabajar conmigo, lo que he hecho es que he dividido todo este proyecto en ocho mini proyectos. Entonces voy a desglosarlo paso a paso a paso. Vamos a estar agregando las características una por una, una por una, una por una. Y ojalá, la forma en que me he acercado a descomponer este proyecto va a hacer que sea más fácil para ti entender y también poder seguir. Entonces, como siempre, si tienes alguna duda, tal vez estés tratando de construir el programa por ti mismo y estás atrapado en alguna parte, siempre puedes comunicarte conmigo, e intentaré ayudarte y ayudarte de cualquier manera que pueda. Así que estoy muy emocionada de trabajar contigo en la construcción de este sistema de registro de usuarios. Sin perder más tiempo, comencemos. 70. Parte 1: creación de la interfaz de usuario: Bien, entonces comencemos. Y lo primero que vamos a hacer es crear la interfaz de usuario que permita al usuario elegir entre las opciones de registro, inicio de sesión y salida, ¿bien? Entonces llamemos a esta función la función principal. Entonces voy a decir definir corchetes principales, dos puntos. Y ahora, digamos que si bien es cierto. Bien, así que mientras el programa se esté ejecutando, vamos a mostrar las opciones del menú. Entonces voy a decir, antes que nada, impresiones, y podemos decir, número uno, déjame agregar mis códigos ahí mismo. Entonces voy a decir opción número uno, registro de puntos. Bien. Cerremos la columna. Y luego vamos a imprimir la opción número dos, a punto, Iniciar sesión. Y luego la opción número tres, opción muy, muy, muy aburrida, simplemente salir. ¿Bien? Todo bien. En realidad, ya sabes, vamos a imprimir otra declaración en la parte superior, algo así como un mensaje de bienvenida. Así que vamos a imprimir digamos bienvenido al sistema de registro de usuarios. Bien. Y ahí tienes. Bien, así que tenemos todas las opciones establecidas. Ahora, pidamos al usuario que nos brinde una opción. ¿A qué opción en particular van a querer ir? Voy a llamar a la opción variable para almacenar la opción particular. Entonces voy a decir insumos, y luego digamos, ¿qué le gustaría hacer? Bien. Y ahí está. Todo bien. Entonces, una vez que el usuario ha brindado su opción, necesitamos crear escenarios asignados a cada uno de ellos. Entonces voy a comenzar por el primero de aquí y decir, yo nuestra elección es igual a la opción número uno, vamos a imprimir, digamos, registro de registro. Seleccionado. Bien. Ahora, obviamente, nada más va a pasar por ahora. Añadiremos la funcionalidad real más adelante. Pero pasemos a la siguiente opción. Entonces voy a decir LIF, elección es igual, y luego la opción número dos Agreguemos dos puntos. Entonces, ¿qué va a pasar aquí? Podemos decir imprimir, y luego podemos decir iniciar sesión seleccionado Bien. Y ahora agreguemos la opción número tres, elección AF equivale a la opción número tres y dos puntos. Podemos decir simplemente imprimir, y salir del sistema ¿Bien? Y creo que esto debería estar bien. Así que recuerda, también habrá necesidad de agregar la sentencia break should en caso el usuario decida elegir una opción que no existe. Entonces voy a entrar y decir break y ahora break, entrar else en nuestra columna, y ahora ya podemos imprimir. Digamos elección inválida, por favor inténtelo de nuevo. Bien, esto me gusta. Elección no válida, inténtelo de nuevo. Y ahí está. Bien, así que sigamos ahora mismo para ejecutar el programa. Entonces soy alguien que va a decir principal y ahora corchetes, y veamos qué va a pasar. Sigamos adelante y ejecutemos el programa. Y luego te vas, Bien, probemos la opción número uno. ¿Bien? Registro seleccionado. Opción número dos, Login seleccionado, opción número tres. Saliendo del sistema. Bien, hasta ahora tan bien hemos agregado el primer componente de nuestro programa. Hemos agregado la interfaz de usuario. Entonces Jamin siguiente Video comenzaremos ahora a abordar cada opción a la vez, comenzando con la función de registro. 71. Parte 2: añadir la función de registro de usuario: Regresa. Entonces ahora pasemos a la primera función principal para el programa que permitiría al usuario registrarse. ¿Todo bien? Así que vamos hasta la cima aquí y vamos a empujar la función de la interfaz de usuario hasta el final, y vamos a subir aquí. En realidad, sólo voy a agregar una nota y decir función de registro. Bien. Bien, entonces ¿cómo llamamos a la función? Digamos registrar usuario de subrayado, ¿verdad? Registrar usuario, soportes. Agreguemos dos puntos Bien, entonces queremos aceptar el nombre de usuario y una contraseña del usuario. Entonces, vamos a pedirles que hagan eso. Todo bien. Entonces voy a decir nombre de usuario es igual y ahora entrada y corchetes, digamos, un nombre de usuario. Colón. Bien. Y luego vamos a pedirles la contraseña también. Entonces contraseña es igual, entrada, y luego entre paréntesis, Ingrese una contraseña, dos puntos, y ahí va. Bien, así que ahora mismo, una vez que el usuario haya proporcionado el nombre de usuario y la contraseña, nos gustaría almacenarlos en un archivo. Podemos llamar al archivo usuarios punto TXT como ejemplo, ¿bien? Entonces lo que vamos a hacer es que vamos a decir con y ahora abrir. ¿Bien? Recuerda, necesitamos esta función para crear nuestro archivo. Entonces ahora agreguemos el nombre del archivo. Voy a llamarlo usuarios punto TXT. Y ahora, habilitemos el modo append. Entonces voy a decir A. Bien. Y entonces como ¿qué como archivo? Colón. Todo bien. Y ahora podemos usar las funciones adecuadas. Diré archivo punto a la derecha. Y ahora entre paréntesis, podemos usar nuestra cadena F, y luego agreguemos llaves geniales, nombre de usuario Vamos a cerrar eso, y luego también podemos agregar dos puntos para separar la contraseña del nombre de usuario. Entonces Cole se pone de nuevo, y luego podemos agregar nuestra contraseña Y luego por si acaso, podemos hacer el slash hacia atrás y luego N para que cada usuario Información se almacene en una línea separada Cada credencial de usuario se almacenará en una línea separada, y ahí está Bien, todo lo que tenemos que hacer en este momento es que podemos imprimir un mensaje sencillo que diga algo así como imprimir, y luego podemos decir, el registro de usuarios fue exitoso. Bien. Y ahí está. Bien, entonces, ¿cómo integramos ahora nuestra función de registro con la propia función principal? Lo que vamos a hacer ahora mismo es que vamos a llegar hasta aquí y decir, yo elijo es igual a uno, entonces podemos quitar esto. Bien, ya no necesitamos esta declaración impresa. Y sólo vamos a llamar a la función. Y la función que creamos aquí fue lo que registramos subrayado usuario Aquí mismo, solo diré registrar usuario de subrayado, y luego corchetes Y luego ahí está. Entonces ojalá, esto debería funcionar. Sigamos ahora mismo y probémoslo. Entonces voy a ejecutar el programa. ¿Bien? Número uno, queremos registrarnos, pulse Intro. Entrar, nombre de usuario. Voy a ir con Alex. Contraseña. Voy a ir con Alex otra vez, ¿de acuerdo? Sólo para una prueba. Entra y bien. El registro de usuarios fue exitoso, y tenemos usuarios dot textfile aquí Y si lo abro, increíble, puedes ver que dice Alex Alex. Tan fantástico. Se puede ver ahora mismo que en realidad está funcionando hasta ahora tan bien. Únete a mí en la siguiente lección donde ahora creamos la función que permitirá a nuestros usuarios iniciar sesión. 72. Parte 3 añadir la función de inicio de sesión: Bueno, vuelve. Así que ahora, agreguemos la función para permitir que nuestros usuarios inicien sesión. Entonces voy a decir definir, y vamos con el inicio de sesión en la partitura será el nombre de usuario. Agreguemos una columna. En realidad, agreguemos una nota, ¿de acuerdo? Y solo podemos decir función de inicio de sesión. Y ahí tienes. Bien. para que el usuario inicie sesión, van a requerir el nombre de usuario y la contraseña. Así que comencemos diciendo que el nombre de usuario es igual, y luego los corchetes de entrada, los códigos ingresan su nombre de usuario. Colon. Bien. Y luego también podemos agregar la contraseña igual a entrada, corchetes, ingresa tu contraseña, y ahí vas. Bien. Ahora, para verificar que el nombre de usuario y contraseña sí existen, vamos a tener que abrir a nuestros usuarios el archivo dot TXT. Entonces voy a decir con abierto, y ahora entre paréntesis, ¿cuál es el nombre del archivo? Se trata de usuarios punto TXT. Y entonces, ¿cuál es la modalidad con la que vamos? Vamos con el modo de lectura. Porque queremos leer del archivo, y voy a decir como archivo, dos puntos. Y ahora, vamos a crear una variable llamada usuarios que aceptaría la función de líneas rojas punto archivo. Porque recuerden, vamos a tener que leer línea por línea de cada usuario en los usuarios puntean el texto del archivo. Entonces voy a decir usuarios es igual a archivo punto leer líneas, y ahora corchetes, y ahí está. Entonces ahora necesitamos verificar si credenciales de la entidad coinciden con algún registro almacenado. Entonces, ¿qué vamos a hacer? Vamos a crear un bucle de cuatro. Entonces voy a decir cuatro. Usemos la variable usuario en usuarios. ¿Bien? Entonces ahora, ¿qué queremos verificar? Queremos verificar el nombre de usuario y luego la contraseña. Así podemos crear dos variables aquí. Podemos ir con el bien almacenado, almacenado en la partitura, nombre de usuario, y luego coma, también podemos ir con almacenado en la contraseña de puntuación Let crea dos variables para representar el nombre de usuario almacenado y luego la contraseña almacenada. Y ahora, cómo comprobaríamos necesitamos primero que nada, verificar para ver si el nombre de usuario es correcto y luego también la contraseña. Pero ahora échale un vistazo a esto, ¿de acuerdo? Los usuarios puntean textifle tal como es. Tenemos a Alex y luego punto de colon ALC. Entonces tenemos que averiguar una manera de cómo podemos separar el nombre de usuario de la contraseña, y sabemos que es el símbolo de dos puntos lo que los separa, ¿de acuerdo? Entonces podemos usar la función split para separar el nombre de uso y la contraseña. Pero también podemos usar la función strip. Recuerda la función de tira. Lo usamos para eliminar cualquier carácter blanco o espacios vacíos, cosas así. ¿Bien? Así que volvamos a entrar aquí. Entonces lo que vamos a hacer ahora mismo es voy a decir usuario, y ahora vamos a agregar la función strip para eliminar todo el espacio necesario del nombre de usuario, bien, nuestros corchetes, y ahora voy a agregar la función split. ¿Y por qué estamos dividiendo el nombre de usuario y la contraseña? Va a ser el colon, y ahí tienes. Entonces vamos a dividir el nombre de usuario y la contraseña por dos puntos. Entonces a partir de aquí ahora mismo, podemos checar. Podemos decir si el nombre de usuario es el mismo que lo que el nombre de usuario de subrayado almacenado, y qué contraseña es igual a lo que la contraseña de subrayado. ¿Qué queremos hacer? Queremos imprimir y decir Iniciar sesión. Exitoso y ahí vas. Impresionante, impresionante, también. Y luego a partir de aquí, simplemente podemos regresar por ahora, bien. Más adelante, agregaremos funcionalidad adicional. Pero por ahora, volvamos y volvamos al inicio del programa. Así que vamos a salir de la función después de un inicio de sesión exitoso. Y claro, también podemos imprimir si acaso algo no salió correctamente. Podemos imprimir nueve corchetes. Simplemente podemos decir inválido usando n o contraseña. Y ahí tienes. Déjame agregar algo de espacio aquí, y ahí vamos. Bien, entonces ojalá esto funcione. Permítanme integrarlo en la función principal. Entonces lo que queremos hacer ahora mismo es donde dice la elección AF número dos, podemos eliminar la sentencia print y ahora simplemente agregar el nombre de la función, que es login en el usuario score y ahora corchetes, y ahí está. Bien. Dedos cruzados. Vamos a ejecutar el programa. Y vamos a ver. Voy a ir directo a iniciar sesión, porque ya hemos creado el usuario y contraseña de Alex. Entonces el nombre de usuario es Alex. La contraseña es Alex, y ahí tienes. Impresionante, inicia sesión con éxito. Intentemos ver si aceptaremos un nombre de usuario diferente que no existe. Entonces voy a ir con Log In, y vamos con Philip. Ingresa contraseña, ordena, pez, y ahí vamos. Dice nombre de usuario o contraseña inválidos, así que está funcionando, increíble, increíble. Así que hemos agregado con éxito la función de registro. También hemos agregado con éxito la función de inicio de sesión. Así que ahora únete a mí en el siguiente video donde vamos a avanzar el programa introduciendo el verificador de contraseñas que asegurará que la contraseña creada cumpla con ciertos criterios de fortaleza. Te veré entonces. 73. Parte 4: añadir la herramienta de comprobador de fortaleza de la contraseña: Bueno, vuelve. Entonces ahora necesitamos implementar la herramienta de verificación de contraseñas. Hasta ahora tan bien, nuestros usuarios, pueden registrar cuentas, pueden iniciar sesión. Pero queremos asegurarnos que las contraseñas que usaron para crear sus cuentas en primer lugar realmente lo suficientemente fuertes. Y tenemos una lista de criterios. Queremos asegurarnos de que la contraseña tenga al menos ocho caracteres. Contiene una letra mayúscula. Contiene un número, y también contiene al menos un símbolo especial. Ahora bien, los símbolos son lo que he escrito aquí, ya pueden ver. Tengo todos ellos listados. Entonces lo que voy a hacer es en lo más alto, bien, sigamos adelante. Déjame cortar esto primero que nada, voy a cortar eso. Entonces vamos a tener que importar una biblioteca, que va a ser la biblioteca de expresiones regulares. Entonces en la parte superior, digamos importar y luego R E. ¿Bien? Así que permítanme agregar una nota que diga Importar para expresiones regulares. ¿Bien? Todo bien. Así que ahora, vamos a añadir una nota, y voy a decir contraseña función de comprobación de contraseña. Bien. Creo que está bien. Función de comprobador de contraseñas. Bien, así que vamos a crear el nombre de la función. Entonces voy a llamarlo definir, y luego podemos decir que está en la puntuación fuerte en la contraseña de puntuación. ¿Bien? ¿Qué tal eso? Y ahora, por supuesto, dentro, vamos a aceptar una variable, que será la propia contraseña real. ¿Bien? Y agreguemos dos puntos. Ahí vas. Todo bien. Empecemos a sumar los criterios. El primer criterio aquí será la longitud de la contraseña. Entonces podemos decir si y ahora la función len, que representará la longitud de lo que fuera de la contraseña. ¿Bien? Entonces, si es menor a ocho, agreguemos nuestro colon. ¿Qué vamos a decir? Vamos a devolver falso. Bien, vamos a devolver falso. En realidad falso F, coma falsa. Y luego podemos proporcionar algo así como una retroalimentación. Decirle al usuario que, Oye, tu contraseña debe tener al menos ocho caracteres de longitud. Entonces hagámoslo. Bien. Entonces fíjate ahora mismo dos cosas que sucedieron. En primer lugar, estamos regresando fals, lo que significa que la contraseña no es lo suficientemente fuerte, y luego también estamos proporcionando una retroalimentación también Tengan eso en mente, va a ser muy, muy importante. Pasemos al siguiente criterio. Entonces voy a bajar aquí y luego decir si y ahora nada de búsqueda RE, queremos buscar usando el módulo RE Déjame asegurarme de que lo escribí correctamente, Investigación. Y ahora entre paréntesis, queremos buscar para ver si hay alguna letra mayúscula dentro de la cadena. ¿Bien? Entonces estamos diciendo buscar y ahora Roy ahora códigos, códigos únicos, agreguemos nuestros corchetes. ¿Qué estamos buscando? Estamos buscando de la A a la Z. Entonces esto de aquí es un método que usa la biblioteca de expresiones regulares, queremos buscar a través de nuestra contraseña para verificar si hay alguna letra mayúscula entre la A y la Z. Entonces de la A a la Z, y luego la coma y luego ¿Bien? Para que podamos devolver el pelaje falso y ¿por qué falso? Porque dijimos, Si no. Entonces, si el programa busca a través de la contraseña y no encuentra una letra mayúscula de la A a la Z, no va a ser. Así que vamos a devolver false, y luego podemos proporcionar lo que es una retroalimentación. Por lo que puedo decir que la contraseña debe incluir al menos una letra mayúscula ¿Bien? Y déjame agregar el punto ahí mismo, y ahí tienes. Bien, ahora, ¿puedes intentar escribir el código para buscar para ver si hay un número 0-9 en la contraseña? ¿Bien? Podemos decir, si no, punteamos la búsqueda. Bien. Y luego entre paréntesis R y ahora en códigos simples, voy a abrir un nuevo soporte ahora 0-1 a nueve Y ahora estamos buscando la contraseña. Queremos saber si la contraseña tiene un número 0-9. Y claro, si no es así, vamos a devolver falso. Y entonces podemos decir que la contraseña debe incluir al menos un dígito. Permítanme cambiar los dígitos por número, en realidad. Bien. Y ahí tienes. Así que hemos comprobado la longitud de la contraseña. Hemos comprobado para asegurarnos de que tenga una letra mayúscula. Hemos comprobado para asegurarnos de que tenga al menos un número. Por último, pero no menos importante, verifiquemos para ver si tiene un símbolo especial. Entonces el último, vamos a decir, si no, re búsqueda de puntos. Y ahora entre paréntesis están los códigos singulares. Y ahora vamos a abrir los soportes principales. Y ahora voy a pegar todos los símbolos especiales. Oh, hay un buen número de ellos, en realidad, ¿de acuerdo? Entonces voy a añadir eso. Ahora coma y ahora contraseña. Bien, agrega dos puntos. Y ahora, si no tenemos eso voy a regresar cae. Bien. Y luego códigos, diré contraseña debe incluir al menos un símbolo especial. Permítanme cambiar de carácter a símbolo. Simba codifica, y ahí está. Bien, entonces hemos comprobado los cuatro criterios principales. Sin embargo, ¿y si la contraseña que se creó es realmente buena? Es una contraseña segura. Entonces para eso, voy a venir aquí y voy a devolver la verdad. ¿Bien? Voy a devolver verdad, e incluso podemos imprimir algo que diga que la contraseña es fuerte. Y ahí tienes. Bien. Así que solo para darte una recapitulación muy rápida de lo que hemos hecho aquí, importamos la biblioteca de expresiones regulares porque queremos usar un método particular de función, que es la función de búsqueda para ir a través de la contraseña y verificar tipos específicos de criterios Entonces, antes que nada, verificamos la longitud de la contraseña. ¿Es menos de ocho? Si es menor a ocho, devuelva false y luego proporcione retroalimentación que diga, contraseña debe tener al menos ocho caracteres de longitud. Y ahora queremos buscar para ver si hay una letra mayúscula entre la A y la Z. Entonces usamos el método e búsqueda de puntos, y luego entre paréntesis R, códigos, y luego los corchetes A a Z, y luego contraseña Y luego proporcionamos la retroalimentación, y luego hicimos lo mismo para buscar al menos un número, y luego hicimos lo mismo para buscar al menos un símbolo especial. Y luego finalmente, si se aprobaron los cuatro criterios, volveremos true, y entonces diríamos que la contraseña es fuerte. Entonces, ahora que tenemos los criterios enumerados para la fortaleza de la contraseña, ahora necesitamos integrarla dentro la función de registro y asegurarnos de que antes de que se registre la cuenta del usuario, la contraseña realmente pase la prueba. Entonces aquí mismo, una vez que le hayamos pedido al usuario que nos proporcione, el nombre de usuario y la contraseña, el nombre de usuario y la contraseña, antes de comenzar a abrir el archivo dotexti del usuario para almacenar las credenciales, introduzcamos el verificador de contraseñas Así puedo crear una variable llamada es válida. Vamos a verificar si la contraseña es realmente válida. Entonces también, hemos estado trabajando con el feedback feedback o mensaje, puedes cambiar la variable si quieres, pero voy a ir con feedback. Voy a decir que es válido, subraye los comentarios, y los voy a pasar a la función que solíamos crear El alcance de la contraseña es lo que es fuerte, subraye la contraseña y luego entre paréntesis, la contraseña. Bien. Entonces ahora podemos decir si no es válido, así que si no es válido. Entonces, si la contraseña que nos proporcionaron no es lo suficientemente fuerte simplemente podemos imprimir, y luego podemos decir que la contraseña no es demasiado espacio. La contraseña no es lo suficientemente fuerte. Bien. Y entonces, ¿qué más podemos hacer? Podemos imprimir los comentarios diciendo: Oye, tu contraseña necesita al menos un número, o tu contraseña debe incluir al menos una letra de gas superior. Para que pueda bajar aquí, agregar otra declaración impresa y simplemente pasar el feed back. Y ahí tienes. Por último pero no menos importante, simplemente vamos a regresar y ahí van ustedes. Entonces esa es la forma en que podemos implementar la herramienta de verificación de contraseñas. Hemos enumerado los criterios, longitud, número, letra de acase, símbolo, y ahora donde tienes la función de registro, hemos agregado, Bien, si la contraseña no es válida, di que no es lo suficientemente fuerte y luego también proporciona la retroalimentación también De lo contrario, simplemente regresa. Entonces ahora vamos a revisar para ver si está funcionando. Ojalá, debería. Así que vamos a correr. Bien, me voy a registrar. Usa un nombre, digamos, Bob. Contraseña, voy a ir con mayúscula LISA N seis, uno, dos, tres, B V. Es Enta y Impresionante. Dice que la contraseña no es lo suficientemente fuerte. La contraseña debe incluir al menos un símbolo especial. Bien, voy a abrir el textifle punto del usuario y asegurarme de que, Bien, asegurarme de que Bob no fue Impresionante. Volvamos. Y ahora, intentemos crear una cuenta real real. Entonces llamemos a Alice. Contraseña, P O P tres, cuatro, SDR, y luego el símbolo add Creo que esto debería ser lo suficientemente fuerte. Ahí vas. Bien, increíble usuario. Tiene éxito. Y ahora, si vuelvo a mis usuarios TXT, ahí tienes. Ahora tenemos a Alice y su contraseña. Entonces enhorabuena. Hemos mejorado nuestro programa, nuestro software para incluir ahora un verificador de contraseñas, también. Únete a mí en el siguiente video donde vamos a seguir adelante y también aprender cómo podemos cifrar nuestras contraseñas. Te veré entonces. 74. Parte 5: hashing de las contraseñas de usuario: Bueno, vuelve. Así que ahora agreguemos una característica de seguridad más a nuestro programa. Y aquí dentro, vamos a incluir hashing. Vamos a hash up pwords haciendo uso del SHA dos, cinco, seis, el algoritmo hash seguro con, por supuesto, un tamaño de datos de 256 bits Entonces para ello, vamos a tener que importar otra biblioteca. Y éste va a ser el hash lib. Déjame solo agregar un nodo aquí y también lo importo para hashing. Y ahí tienes. Todo bien. Ahora, agreguémoslo en la parte superior aquí la función para realmente hash la contraseña. Permítanme agregar una función de nodo a las contraseñas hash. El nombre de la función, puedo decir definir y podemos ir con contraseña hash. Ahora, por supuesto, dentro de los paréntesis, vamos a estar trabajando con el parámetro de contraseña y luego alimenté en mi columna. Voy a echar un vistazo a esto para hash la contraseña, simplemente puedes decir return Now, el nombre de la función en sí en el módulo hashlib, su hashlib Ahora punto sha dos, cinco, seis. Ahora entre paréntesis, ¿qué estamos hash? Es la contraseña. Ahora voy a usar el método llamado código, abrir nuevo par de corchetes, cerrar los paréntesis anteriores y ahora punto ahora finalmente podemos tener hex diigest agregar corchetes de cierre de nuevo, y ahí está Esta es una línea particular que puedes memorizar. Esta es la función que realmente hará hash up contraseñas haciendo uso del módulo hashlib Todo lo que tenemos que hacer ahora mismo de manera muy sencilla será integrarlo en la función de registro real. Vengamos todo el camino hasta aquí al final, donde la contraseña fue exitosa, aquí donde dice imprimir retroalimentación, regresar justo antes de comenzar a escribir la contraseña a los usuarios o enviar un mensaje de texto al archivo, ahora vamos a hash. Después de la declaración escrita, voy a añadir una pequeña nota y podemos decir hash la contraseña Todo bien. Entonces lo que queremos hacer en este momento es muy, muy simple, podemos crear una variable llamada hash underscore password, y luego podemos pasar la contraseña real que acabamos de hash Voy a decir hash en la contraseña de puntuación y ahora entre paréntesis, muy simplemente pasar palabra y ahí está. Todo lo que tenemos que hacer de manera muy simple es donde estamos escribiendo la contraseña. En lugar de la contraseña original, ahora tendremos que escribir la contraseña hash Aquí dice archivo o escribe F, nombre de usuario. Ahora aquí en lugar de contraseña, vamos a cambiar eso a la variable hash en la palabra de pase de puntaje, y ahí está hemos agregado hash con éxito Veamos si esto realmente funcionaría. Voy a seguir adelante ahora mismo y ejecutar el programa. Vamos a registrarnos. Voy a añadir un nuevo nombre aquí. Voy a llamar a éste, digamos, David. Bien, contraseña. Voy a ir con una contraseña muy segura aquí, SOD, peces, SOD, peces , y luego 234 a, y luego símbolo de esterics, ahí Ahora vamos a abrir los usuarios de textifle y C y maravilloso. Ahí vas. Esta de aquí es la versión hash de la contraseña de David, que es SOT fish, 234 at y el símbolo Asterics Tan maravilloso, hemos agregado hashing a nuestro programa. Se está volviendo cada vez más avanzado, y ahora salta en la siguiente lección donde vamos a agregar nuestra auditoría para incluir CU entonces. Entonces solo quería darte una actualización rápida. Sí, acabamos de agregar la función hash. Sin embargo, cuando lo probamos, podrías notar que no funciona. Entonces, si iba a ir por aquí ahora mismo y quería registrar un nuevo usuario y le dije, llamemos al nuevo usuario Victor, ¿verdad? Víctor. Y luego agregué una contraseña, Victor 123, y luego VC y luego el símbolo del anuncio, y presiono Enter. Dice que el registro de usuarios fue exitoso. No obstante, si intento volver a iniciar sesión como Victor, entonces tengo el nombre de usuario. Y ahora si escribo la contraseña, Victor 123, Vc en verá ahora mismo que dice nombre de usuario o contraseña inválidos. Entonces, por alguna razón, la función de inicio de sesión no es capaz de detectar que el nombre de usuario coincide con la contraseña. Y esta es una de las razones por las que realmente quieres probar tu código cada vez que hayas agregado nuevas funcionalidades. Entonces me di cuenta que por aquí en la línea 60, donde dice, donde tenemos la función de inicio de sesión, dice que si nombre de usuario es igual a nombre de usuario almacenado y contraseña igual a contraseña almacenada, entonces podemos permitir que el usuario inicie sesión con éxito. Se puede ver ahora mismo que esto no va a funcionar porque como el código está escrito ahora mismo, es comparar la contraseña con el formato de texto plano y no la versión cifrada o la versión hash más bien Por eso estamos teniendo el tema. Así que se supone que debemos entrar ahora mismo y decir, tachar un nombre y ahora enfatizamos la contraseña de subrayado hash Y ahora entre paréntesis, contraseña. Entonces esto de aquí mismo, ahora le estamos diciendo al programa y diciéndole a Python que, Oye, compara la contraseña hash del usuario y no la versión simple Entonces debería funcionar ahora mismo. Si tuviera que regresar y vamos crear una nueva cuenta para el usuario. En realidad, paremos el programa, ¿de acuerdo? Y voy a volver a ejecutarlo todo de nuevo. Entonces ahora déjame registrar un nuevo usuario, llamar al usuario Mac y luego Mac uno, dos, tres en Mac para obtener la contraseña. Y ahora intentemos volver a iniciar sesión como Mac. Entonces voy a decir Mac. Y ahora Mac uno, dos, tres en Mac. Y ahora se puede ver que el inicio de sesión fue, de hecho, exitoso. Entonces esto es, nuevamente, un recordatorio que cada vez que añades nuevas funciones y nuevas líneas de código, quieres probar antes de comenzar a agregar más y más líneas de código a tu programa. Así que por favor sigue adelante y actualiza la línea donde dice, Si usas nombre de usuario y contraseña de inicio de Nemicol, quieres asegurarte de que es la versión hash de la contraseña que estamos Gracias por mirar, y por supuesto, veré en la próxima clase. 75. Parte 6: añadir la herramienta de auditoría: Bienvenido de nuevo. Así que ahora vamos a agregar una característica realmente genial, que será la función de la herramienta de auditoría donde podemos realizar un seguimiento de todas las actividades en nuestro sistema desde los usuarios, iniciar sesión y crear cuentas y cosas así Entonces sigamos adelante y hagamos eso. Y para que esto suceda, necesitamos importar una biblioteca y un módulo especiales, que va a ser la fecha y hora. Así que voy a entrar aquí y voy a decir desde la biblioteca diurna. Importemos el módulo diurno. ¿Bien? Y puedo agregar aquí una nota que diga entrada para fecha y hora. Bien. Ahora, vamos a crear nuestra función, y ¿dónde podemos colocarla? ¿Sabes qué? Coloquemos la función justo antes de la función de registro, ¿de acuerdo? Así que voy a venir hasta aquí, agregar la nota, y podemos llamar a esta la función para registrar las actividades de los usuarios. Ley de Actividades. No lo deletreó correctamente, Activts. Bien. Bien, voy a llamar a esta función definida, y luego registrar el evento de subrayado Ese va a ser el nombre de la función. Y entonces el parámetro por supuesto será evento. Bien. Agrega un colon, y bien. Entonces aquí es donde va a suceder la magia. Pasemos la fecha y hora reales a una variable llamada sello de tiempo. ¿Bien? Voy a decir que la marca de tiempo es igual. Y ahora vamos a hacer uso de una función del módulo diurno. Esta función se llama punto datetime ahora. ¿Bien? Entonces esta es la función que recuperará la fecha y hora reales, ¿de acuerdo? Pero ahora voy a agregar un método aquí punto STR FT. Este método de aquí es lo que vamos a utilizar para formatear realmente la fecha y la hora. Entonces si queremos mostrar el año, el mes, el día o tal vez solo el día del mes. Y luego la hora, a lo mejor queremos mostrar la hora, el minuto, el segundo, cosas así. Entonces vamos a usar este método, el método STR FT. Y ahora entre paréntesis, necesitamos indicar cómo queremos que se formatee la fecha y la hora. Entonces por dentro, voy a agregar mis abrigos. Entonces hagámoslo así, bien. Vamos a exhibir el año, el mes, el día. Eso será para la fecha. Y luego para la hora, simplemente mostraremos la hora minuto y luego la segunda. ¿Qué tal eso? ¿Bien? Suena bien. Entonces para hacer esto, voy a usar el símbolo de porcentaje, y ahora Y. Esto representará el año y luego podremos agregar menos y luego porcentaje, y luego M para el mes, y luego menos otra vez, porcentaje para qué para el día que será D. ¿Bien? Y ahora un espacio, y ahora para el tiempo real mismo, voy a ir de nuevo, porcentaje, H por la hora, ¿de acuerdo? Y ahora en vez de los menos, podemos usar el colon porque creo que es mejor usar dos puntos siempre que estés lidiando con el tiempo real, en mi opinión Podemos usar colon y luego para el minuto y luego dos puntos otra vez, y luego porcentaje o S, y ahí vas. Este es el formato, tu día del mes, y luego la hora minuto y el segundo, y creo que debería estar bien. Ahora tenemos que hacer ahora mismo es que ahora necesitamos comenzar a iniciar sesión en todas estas actividades. Bien, entonces lo que vamos a hacer es para la función de registro, cuando el usuario se haya registrado, necesitamos registrar el evento, ¿de acuerdo? Ahora, tenemos que venir aquí y decir con open porque queremos crear un archivo de texto real que represente el registro de auditoría. Entonces voy a decir con abierto. Y luego entre paréntesis, llamemos a la auditoría de archivos. En el registro de puntuación. Subraya log dot TXT. Entonces este será el nombre del archivo de registro. Y entonces ¿qué queremos hacer? Queremos añadirlo, ¿de acuerdo? Entonces voy a poner el modo A, ¿y luego como qué? Como Iniciar sesión en el archivo de puntuación, y luego agregar dos puntos. Y entonces ¿qué queremos hacer? Queremos escribir en el archivo Log. Diré Iniciar sesión en el archivo Score. Punto a la derecha. Y ahora entre paréntesis, podemos usar nuestra cadena F, y luego simplemente podemos agregar dos puntos, y luego agregaré mi corchete, llaves colli, timestamp, y luego el evento, y esto Ahí vas. Así que vamos a crear un archivo llamado Registro de Auditoría punto TXT. Y cuando escribamos en el archivo, vamos a escribir una marca de tiempo Y luego también el evento. Entonces tal vez el usuario creó una cuenta el 6 de enero 2024 a las 5:30 P.M. Y 14 segundos, algo así, ya sabes, así que eso es exactamente lo hemos hecho aquí Impresionante, increíble, increíble. Entonces ahora necesitamos asegurarnos de que cada actividad esté, de hecho, registrada. Entonces aquí abajo, la primera actividad va a ser el registro, ¿no? Así que vamos a comprobar. En realidad, ¿sabes qué? Incluso podemos iniciar sesión cuando la contraseña no era lo suficientemente fuerte. ¿Qué tal eso? ¿Bien? También podemos registrar eso. Así que justo por aquí donde dice la retroalimentación de impresión, puedo simplemente venir aquí ahora mismo, agregar una nueva línea y decir log underscore event Y ahora entre paréntesis, podemos simplemente decir campo de registro para el nombre de usuario de usuario. Bien. A mí me gusta esto. ¿Qué opinas? Creo que esto está bien. Campo de registro para el nombre de usuario. Entonces el registro no fue exitoso porque la contraseña no era lo suficientemente fuerte. Eso me gusta. Así que hemos encerrado ahí abajo. Así que ahora, vamos a registrar el evento en un escenario el que el registro fue realmente exitoso. ¿Y dónde está eso? Lo tenemos en la línea 56 aquí que dice imprimir el registro de usuario fue exitoso. Así que justo debajo de él, ahora podemos agregar nuestro evento de subrayado de registro Y ahora entre paréntesis, podemos simplemente decir F y luego vamos a tener abrigos y luego en nuestras llaves collie, podemos decir usar un nombre Bien. Y luego usar un nombre registrado correctamente. ¿Qué tal eso? Y ahí tienes. Bien. Ahora bien, ¿qué más necesitamos para iniciar sesión? Necesitamos iniciar sesión cuando los usuarios también hayan iniciado sesión. Y tenemos eso por aquí bajo la función de inicio de sesión donde dice login exitoso. Así que aquí, voy a crear una nueva línea, y ahora podemos registrar el evento, así que registra el evento de subrayado Y luego entre paréntesis, podemos decir F, cuerda, y luego agregar nuestros abrigos, tirantes colli Así que usa un nombre, ¿de acuerdo? Bueno, déjame poner algo de espacio aquí. Utilice un nombre que haya iniciado sesión correctamente. Y ahí tienes. ¿Hay algo más que necesitemos registrar? Bien, donde diga el nombre de usuario o contraseña no válidos, también podemos registrar este evento aquí también. Así que estamos registrando todo, todo, ¿de acuerdo? Así que log evento F, y luego podemos agregar nuestros códigos, y luego podemos decir intento fallido de inicio de sesión para el usuario, y luego con el nombre de usuario y ahí va. Bien. Esto me está gustando hasta ahora. ¿Hay algo más que necesitemos registrar? También podemos iniciar sesión en la tercera opción. Donde el usuario realmente sale del sistema, no es necesario, pero, ya sabes, nosotros también podríamos. Entonces donde dice imprimir, saliendo del sistema, simplemente también podemos registrar esto En realidad, permítanme hacer esto antes de la declaración impresa. Opción número tres, vamos a registrar el evento de subrayado. Y entonces podemos simplemente decir algo así como salida del sistema. Bien. Y ahí tienes. Bien, creo que esto debería funcionar. Esto debería funcionar. Y voy a seguir adelante ahora mismo y ejecutar el programa, ok y déjanos ver. Voy a registrar una nueva cuenta, así que voy a ir con el número uno, presiona Enter. Vamos a agregar un nombre de usuario. Entonces voy a ir con Tracy. ¿Bien? Y la contraseña, Tracy 21, OP, hashtag Y ahí tienes. Bien, increíble. Por lo que fue exitoso. Primero que nada, asegurémonos de que bajo el D TXT del usuario, tengamos a Tracy Esa es la contraseña hash. Y ahora el otro Dc TXT, ahí tienes. Impresionante, increíble. Impresionante. Tracy, registrado con éxito. Y, por supuesto, se puede ver el formato aquí mismo, 2024, el décimo día de noviembre a las 9:01 08 Así que también agregamos con éxito la función de registro. Muchas gracias por ver el video. Te veré en la siguiente clase. 76. Parte 7: agregar la función de registros de vista: Regresa. Así que agreguemos una característica más. Y esta vez, va a ser una característica para nuestros usuarios de inicio de sesión. Queremos que puedan ver sus propios registros personales. Entonces esto va a ser en dos pasos. Primero, tendremos que crear una función que les permita ver sus registros. Y luego, segundo, tendremos que crear un menú post login. Entonces nuestros usuarios de inicio de sesión, tendrán un menú separado donde tendrán la opción de ver el registro. Entonces esto va a ser en dos partes. En primer lugar, vamos a crear la función permitirles ver el registro. Así que voy a hacer eso justo debajo de la función de inicio de sesión principal. Así que permítanme añadir aquí una nota que diga función, perdón, función para ver los registros. ¿Bien? Voy a llamar a esta función view unders call logs. Y claro, vamos a pasar en el parámetro nombre de usuario. Bien, agrega mi colon. Muy bien, así que primero que nada, imprima como un mensaje general diciendo algo como, ya sabes, registros para el usuario y luego, ya sabes, el usuario en particular Entonces voy a decir imprenta. ¿Bien? Y luego vamos a tener una cadena F, y luego vamos a tener códigos. Y luego déjame agregar mi barra diagonal hacia atrás N, y luego podemos decir logs, cuatro Usuario, y luego tenemos nuestras llaves coll, y luego podemos tener el nombre de usuario Bien, no es necesario, pero es agradable tenerlo. Bien, ahora vamos a abrir el registro de auditoría D TextiFle porque es a partir de ahí, vamos a sacar los Entonces voy a decir con ahora abierto y ahora entre paréntesis, ¿cuál es el nombre del archivo? Se trata de auditoria bajo llamada Log TXT. Y ahora, claro, queremos tener el modo de lectura. Bien, porque vamos a leer del archivo y vamos a decir como archivo Log On Score en nuestra columna. Bien, entonces ahora vamos a revisar los registros y el archivo. Entonces pasémoslos a una variable llamada logs. Y ahora Log Underscore file dot redlines. Bien. Y ahí está. Bien. Así que ahora vamos a tener que crear algún tipo de bucle de cuatro que va a pasar por cada registro individual. ¿Y qué es exactamente lo que buscamos? Estamos buscando cualquier registro que coincida con un nombre de usuario en particular. Así que voy a entrar aquí ahora mismo, ¿verdad? Y voy a decir registros de usuarios, bien, los registros de subrayado van a ser iguales a, y ahora mira esto. Voy a abrirme en mis paréntesis aquí. Voy a decir log dot strip y la razón por la que estoy usando la función strip es de nuevo, quiero eliminar cualquier espacio en blanco o márgenes innecesarios de los nombres de usuario, así que voy a decir log o strip. Y ahora voy a decir cuatro registros de inicio de sesión. Así que estamos buscando cada registro individual en nuestros registros. ¿Y qué estamos buscando? Estamos buscando si el nombre de usuario está en el registro. Así que estamos buscando un nombre de usuario muy específico en nuestros archivos de registro. Entonces ahora si lo hacemos, de hecho, encontramos una coincidencia para el registro para el nombre de usuario, ¿qué hacemos ahora? Así que vamos a decir, si el usuario undercool logs agrega nuestra columna, y ahora voy a decir cuatro log in user Underscoe logs, ¿qué queremos Simplemente queremos imprimir. Entonces voy a decir imprimir y luego registrar, y ahí tienes. Y claro, necesitamos crear una condición. ¿Qué pasa si no se encontró ningún registro? Simplemente podemos decir otra cosa, y ahora podemos imprimir. Podemos decir que no se encontraron registros. En tu cuenta porque recuerda que esto es para el usuario de inicio de sesión, y ahí vas. Entonces solo para darte un resumen muy rápido, ¿verdad? Definimos la función como ver dos registros de llamadas, y pasamos en el nombre de usuario. Y ahora imprimimos un mensaje general diciendo, ya sabes, registros para el usuario. Y luego el nombre de usuario. Y luego abrimos el otro registro el archivo de texto. Vamos a leer de él como un archivo de registro, y luego creamos una variable llamada logs que realmente usará el método read lines para cada archivo de registro en particular. Y ahora aquí, creamos nuestro bucle de cuatro que va a pasar por cada registro individual en los registros y luego ver si hay una coincidencia para ese nombre de usuario. Ahora, si de hecho hay una coincidencia, simplemente podemos imprimir el registro para ese usuario en particular. De lo contrario, simplemente diremos que no se encontraron registros en su cuenta. Entonces ahí está. Hemos creado con éxito una función para los registros de video. Únete a mí en el siguiente video donde vamos a crear el menú de inicio de sesión de post para nuestros usuarios de inicio de sesión. 77. Parte 8: añadir el menú de inicio de sesión de publicación: Bueno, vuelve. Así que ahora vamos a crear la función que mostrará el menú post login para nuestros usuarios de inicio de sesión con opciones. Así que hagamos eso justo encima de la función para ver los registros. Entonces aquí mismo. Voy a decir función para mostrar Post iniciar sesión en el menú. Bien. Bien, así que como de costumbre, vamos a llamar a este, digamos, publicar en el inicio de sesión de puntuación en el menú de puntuación Creo que es un buen nombre. Y, por supuesto, dentro, vamos a pasar en un nombre de usuario perimetral a dos puntos. Bien, entonces vamos a crear una declaración while. Entonces, mientras el usuario está, de hecho, conectado, dejemos ahora imprimir las opciones para ellos. Entonces, antes que nada, en realidad voy a imprimir, como, un mensaje normal. Entonces puedo decir algo como iniciar sesión, lo siento, publicar menú de inicio de sesión, derecha, Post, guión, menú de inicio de sesión. Bien, y déjame agregar mi N al revés para que esto esté en la nueva línea. Bien, entonces ahora podemos imprimir las opciones. Sólo van a haber dos de ellos. ¿Bien? Entonces la opción número uno será simplemente ver mis registros. Recuerda que esto es personalizado. Es para el usuario de inicio de sesión. Y luego la opción número dos, bueno, cerrar la sesión supongo Y ahí está. Entonces vamos a tener que preguntarle al usuario a qué opción quiere ir. Entonces voy a decir elección igual y luego entrada, y luego podemos decir algo como, ya sabes, ¿qué te gustaría hacer? Signo de interrogación. Bien. Entonces ahora vamos a tener que crear las declaraciones IL para cada escenario. Entonces voy a ir con el primero si elección es igual a uno, qué queremos hacer, queremos ver los registros, y claro, usan un nombre. Así que vamos a llamar a la función, que es ver logs nombre de usuario, así que muy, muy simple. Y entonces podemos decir, si la elección equivale a dos. Y entonces, ¿qué queremos hacer aquí? Bueno, simplemente podemos imprimir un mensaje que diga que se ha desconectado con éxito. Pero entonces no olvides que queremos registrar cada tarea. Así que vamos a agregar la declaración log event aquí. Así que log event, y luego podemos decir algo así como Fstring y luego podemos decir que el usuario tiene un collie llaves y códigos individuales, nombre de usuario desconectado nombre de usuario Y ahí tienes. Y, por supuesto, no olvides que necesitamos la sentencia break shot en caso de que el usuario conectado decida, por alguna razón, elegir la opción tres, cuatro, cinco, o cualquier otra opción que no exista. Entonces vamos a decir break y luego si no, podemos simplemente imprimir un mensaje que diga, elección inválida. Por favor, inténtelo de nuevo. Y ahí está. Bien, entonces ahora hemos creado con éxito la función que mostrará el menú post login. Sin embargo, ¿cómo lo vinculamos realmente a la función de inicio de sesión? Porque una vez que el usuario inicia sesión, queremos llamar a esta función. Entonces, ¿qué hacemos? Vamos a pasar a la función de inicio de sesión principal. Y ahora veamos el código. ¿Dónde ha iniciado sesión el usuario? Dice aquí mismo, inicio de sesión exitoso. Entonces aquí mismo donde dice el inicio de sesión exitoso, voy a venir aquí ahora mismo y ahora llamar a nuestra función. Entonces aquí, voy a decir post guión bajo inicio de sesión, menú de subrayado Y, claro, entre paréntesis, vamos a agregar el nombre de usuario y ahí vas. Entonces eso es todo. Creo que hemos terminado con éxito de escribir nuestro código. Ahora vamos a probarlo. Voy a ejecutar el código, ¿de acuerdo? Y voy a iniciar sesión, antes que nada, como en realidad, ¿sabes qué? Voy a intentar otra cosa, ¿de acuerdo? Solo estoy registrando un nuevo usuario. ¿Bien? Y voy a llamar a este usuario Boris ¿Bien? Y luego pase será Bois uno, dos, tres con el símbolo del anuncio. ¿Bien? Así que ahora deja que Boris inicie sesión. Entonces Boris y luego Boris uno, dos, tres, con el símbolo del anuncio Y ahí tienes, Sí, podemos ver Bois ahora tiene el menú de inicio de sesión de post, y puede Bois ver sus registros, pero va a presionar uno y ahí vas, Registros para cuerpos de usuarios. Órganos registrados satisfactoriamente a las 8:10 35. Y luego ingresó con éxito a las 8:10 45. Y si miramos a nuestros usuarios punto TXT, ahí tienes. Tenemos cuerpos con su contraseña hash. Y luego por aquí tenemos al Alex registrado con éxito. John se conectó correctamente. Obviamente, estas son pruebas que hice fuera de la pantalla. Pero se puede ver ahora mismo que el programa de hecho está funcionando con éxito. Hay algunas otras pruebas que podemos realizar. Podemos asegurarnos de que si escribí opción número cinco aquí, ¿ de acuerdo? Tecleé cinco y presioné Enter, puede decir elección inválida, por favor inténtelo de nuevo Así que déjame intentar cerrar la sesión ahora y puedes verlo, de hecho, desconectado correctamente. Y si presiono tres en el menú principal, se puede ver ahora mismo que ha salido del sistema y el programa de hecho está funcionando correctamente Entonces ahí está. Enhorabuena. Hemos creado con éxito un sistema de registro de usuarios bastante avanzado que permitiría a los usuarios registrarse. También hemos implementado un verificador de contraseñas para garantizar que la contraseña sea lo suficientemente fuerte al tener al menos ocho caracteres de largo, tener una mayúscula Opa , un número y también un símbolo especial. Y, por supuesto, también hemos agregado funciones de seguridad adicionales para hash de la contraseña para que se almacenen en un formato hash Y, por supuesto, también creamos un menú de inicio de sesión para los usuarios de inicio de sesión donde luego pueden ver sus propios registros personales. Eso ha sido divertido. Muchas gracias por ver. Te veré en la siguiente clase. 78. Conclusión del proyecto final: Bien, así que enhorabuena. Hemos construido con éxito el sistema de registro de usuarios, y solo quería darte algunos consejos más. Sul en caso de que quisieras tal vez mejorar aún más el programa o hacer algunos ajustes aquí y allá. En lugar de hacer hash las contraseñas, por ejemplo, puedes intentar cifrarlas que pueda intentar eliminar la función hash y luego reemplazarla con la función de cifrado Obviamente, tendrás que importar la biblioteca de criptografía para poder hacer eso Y luego incluso puedes agregar una opción adicional para el usuario de inicio de sesión además de que vean los registros. Se puede crear una función, una sencilla función matemática que puede calcular algún tipo de, ya sabes, multiplicación o suma Puedes pedirle al usuario que proporcione dos o tres números, ellos los proporcionan, y luego la función puede hacer algún tipo de matemática, tal vez pueda multiplicarlos o agregarlos, ya sabes, algo muy, muy básico. También puede agregarlo como una opción extra para el usuario de inicio de sesión. Entonces, hay muchas formas diferentes de mejorar o modificar aún más mejorar o modificar el sistema de registro de usuarios que acabamos de construir. Así que sé creativo, piensa fuera de la caja, busca formas mejorar o modificar el programa. Y si se te ocurren algunas ideas muy interesantes, me encantaría saber de ti. También me encantaría que compartieras tu código, compartas tu código con la comunidad, compartas tu código con el resto de estudiantes que toman el curso, también. Entonces eso es más o menos para el proyecto. Espero que te hayas divertido mucho, construyendo el sistema de registro de usuarios, y ojalá también hayas aprendido bastante, también. Así que gracias por ver. Gracias por construir conmigo el sistema de registro de usuarios. Te veré en la siguiente clase. 79. Conclusión del curso: Enhorabuena. Has llegado al final de este curso, Python para la ciberseguridad Y ojalá encontraras el curso muy útil, informativo, educativo, pero también divertido, también. Y ojalá, en este punto, ahora tengas las habilidades para escribir algunos programas con Python. si tienes alguna duda sobre cualquier cosa que cubrimos en este curso, como de costumbre, estaré más que feliz de atenderte y responderte y ayudarte de cualquier manera que pueda. No dudes en contactarme. Y si te ha resultado útil este curso, por favor no olvides dejar una reseña escrita para el curso y dejar que el mundo sepa que disfrutaste del curso. Entonces, eso es todo. Mi nombre es Alex. Ha sido un placer. Si vas a tomar algún otro de mis cursos de ciberseguridad Ojalá también te vea en esos cursos. Pero si esto es un adiós, déjame decirte que te deseo todo lo mejor en tu viaje a Python y también en tu viaje como profesional de la ciberseguridad, te deseo nada más que éxito y mucho más éxito en el futuro Entonces Lassa, muchas gracias por tomar el curso para Marlin y nos vemos la próxima vez. Adiós.