1 00:00:00,000 --> 00:00:05,559 Hola, en este video vamos a programar en Python un juego de ahorcado 2 00:00:05,559 --> 00:00:09,539 Es el juego común y corriente que la gente juega con papel y lápiz 3 00:00:09,539 --> 00:00:13,900 donde una persona piensa en una palabra o un texto 4 00:00:13,900 --> 00:00:19,260 y la otra persona le toca ir diciendo letras a ver si adivina por completo el texto 5 00:00:19,260 --> 00:00:22,960 pero tiene una cantidad de intentos limitada 6 00:00:22,960 --> 00:00:27,600 por lo tanto si falla muchas veces entonces es ahorcado y pierde el juego 7 00:00:27,600 --> 00:00:30,500 Si no, adivina y gana el juego 8 00:00:30,500 --> 00:00:44,359 Vamos a dividir el programa de abarcado en una serie de subrutinas 9 00:00:44,359 --> 00:00:46,240 Que nos van a ayudar a resolver el problema 10 00:00:46,240 --> 00:00:49,140 Vamos a dividir el problema en subproblemas 11 00:00:49,140 --> 00:00:51,759 Las subrutinas son de dos tipos 12 00:00:51,759 --> 00:00:53,960 Una son de interfaz, otra son de lógica 13 00:00:53,960 --> 00:00:58,679 Las subrutinas que son de interfaz se encargan de imprimir cosas en la pantalla 14 00:00:58,679 --> 00:01:02,100 De leer de la consola, de hacer validaciones 15 00:01:02,100 --> 00:01:08,760 Mientras que las subrutinas de lógica se encargan de hacer algún trabajo que es necesario para la lógica del programa 16 00:01:08,760 --> 00:01:15,180 Pueden ver, hay muchas subrutinas que son de interfaz y unas cuantas que son parte de la lógica 17 00:01:15,180 --> 00:01:18,400 Entonces esto es lo que vamos a implementar 18 00:01:18,400 --> 00:01:21,459 Ya estamos aquí en el ambiente de programación de Python 19 00:01:21,459 --> 00:01:28,719 Vamos a iniciar con una subrutina principal que no va a recibir ningún parámetro 20 00:01:28,719 --> 00:01:31,420 Y es la que se va a encargar de ser el programa principal 21 00:01:31,420 --> 00:01:38,299 Voy a aprovechar para indicarles cómo elaborar un tipo de documentación que se llama Python Docs 22 00:01:38,299 --> 00:01:42,859 Que se trata de poner un string justo después de la declaración de la función 23 00:01:42,859 --> 00:01:44,459 Es decir, justo después del def 24 00:01:44,459 --> 00:01:49,620 Este string sirve como documentación interna de la función o de la subrutina 25 00:01:49,620 --> 00:01:54,959 Y en Python existe un comando que sirve para ver la ayuda de las diferentes funciones 26 00:01:54,959 --> 00:01:56,079 Para ver qué es lo que hacen 27 00:01:56,079 --> 00:01:58,340 Entonces ya lo voy a hacer y vamos a ver cómo funciona 28 00:01:58,340 --> 00:02:04,200 Entonces acá voy a ponerle una descripción, esta es la subrutina principal del juego de ahorcado 29 00:02:04,200 --> 00:02:08,520 Vean que estoy usando el string con triple comilla, lo cual me deja cambiar de línea 30 00:02:08,520 --> 00:02:15,340 Entradas, ninguna, salidas, el juego de ahorcado y restricciones 31 00:02:15,340 --> 00:02:19,659 Esa es la documentación de nuestra función principal 32 00:02:19,659 --> 00:02:24,659 No quiero que haga nada por ahora esta subrutina, entonces voy a ponerle aquí pass para que no haga nada 33 00:02:24,659 --> 00:02:28,439 y voy a irme al intérprete para probarlo 34 00:02:28,439 --> 00:02:31,139 entonces vean, si yo pongo aquí Orcado, pues obviamente no pasa nada 35 00:02:31,139 --> 00:02:32,780 porque la subrutina no tiene nada que hacer 36 00:02:32,780 --> 00:02:35,360 pero existe esta función que se llama Help 37 00:02:35,360 --> 00:02:36,900 o procedimiento que se llama Help 38 00:02:36,900 --> 00:02:40,139 que sirve para ver cómo funciona una función 39 00:02:40,139 --> 00:02:42,819 o una subrutina en general 40 00:02:42,819 --> 00:02:43,879 entonces Help de Orcado 41 00:02:43,879 --> 00:02:45,599 y nos va a imprimir en pantalla 42 00:02:45,599 --> 00:02:49,860 eso que escribimos en el encabezado 43 00:02:49,860 --> 00:02:51,340 o después del encabezado de la función 44 00:02:51,340 --> 00:02:53,259 entonces para eso sirve esto 45 00:02:53,259 --> 00:02:56,460 Para poder acceder a la documentación de la subrutina 46 00:02:56,460 --> 00:03:01,259 Ahora sí, entonces vamos a hacer nuestro juego de arcado 47 00:03:01,259 --> 00:03:04,639 Primero que todo vamos a usar una variable global 48 00:03:04,639 --> 00:03:08,819 Que nos va a servir para guardar cuál es la cantidad máxima de intentos 49 00:03:08,819 --> 00:03:10,620 Que va a tener el jugador a la hora de jugar 50 00:03:10,620 --> 00:03:13,199 Entonces va a poder hacer 7 intentos 51 00:03:13,199 --> 00:03:15,719 Si en 7 intentos no ha adivinado, entonces pierde 52 00:03:15,719 --> 00:03:17,819 Esa variable es variable global 53 00:03:17,819 --> 00:03:22,180 Pero en Python para poder usar una variable que está declarada fuera de una función 54 00:03:22,180 --> 00:03:31,860 entonces hay que hacer esto, global intentos max, esto hace que Python entienda que la variable cuando se refiere al nombre intentos max 55 00:03:31,860 --> 00:03:39,639 es a la variable global que se encuentra definida afuera y no una variable local, recuerden que en Python cuando uno asigna un valor 56 00:03:39,639 --> 00:03:46,460 entonces la variable se crea, por lo tanto si lo primero que hacemos es asignarle un valor a intentos max lo que va a pasar es que cree que es una variable local 57 00:03:46,460 --> 00:03:53,460 En fin, si queremos usar una variable global en Python tenemos que usar global y el nombre de la variable que está declarada fuera de la subrutina 58 00:03:53,460 --> 00:03:59,439 ¿Qué va a hacer este programa? Bueno, primero lo que vamos a hacer es limpiar la pantalla 59 00:03:59,439 --> 00:04:05,879 Para quitar lo que haya en la consola y esto es algo estético, nada más, no es necesario 60 00:04:05,879 --> 00:04:09,479 Y vamos a imprimir un mensaje de entrada 61 00:04:09,479 --> 00:04:15,939 esta subrutina de limpiar pantalla lo que va a hacer es imprimir un montón de líneas en blanco 62 00:04:15,939 --> 00:04:18,199 para que no se vea lo que había antes en la consola 63 00:04:18,199 --> 00:04:22,279 y esta otra imprimir entrada lo que va a hacer es imprimir un rótulo que dice 64 00:04:22,279 --> 00:04:26,000 abarcado, bienvenido al juego de abarcado, taca taca, esas cosas 65 00:04:26,000 --> 00:04:27,480 es como una bienvenida 66 00:04:27,480 --> 00:04:32,339 después vamos a usar una variable que se llama continuar 67 00:04:32,339 --> 00:04:36,019 el juego de abarcado se va a repetir muchas veces 68 00:04:36,019 --> 00:04:39,579 Yo puedo jugar una vez y al final del juego decir quiero jugar de nuevo 69 00:04:39,579 --> 00:04:43,879 Entonces este ciclo que vamos a hacer es ese que permite jugar varias veces seguidas 70 00:04:43,879 --> 00:04:48,240 Entonces mientras continuar sea true 71 00:04:48,240 --> 00:04:50,759 Entonces vamos a hacer una serie de cosas 72 00:04:50,759 --> 00:04:55,759 Y cuando el usuario diga que ya no quiere jugar más 73 00:04:55,759 --> 00:04:58,240 Entonces a continuar le vamos a asignar false 74 00:04:58,240 --> 00:05:00,160 Para que se salga de la subrutina 75 00:05:00,160 --> 00:05:01,959 ¿Qué es lo que va a pasar dentro de este ciclo? 76 00:05:01,959 --> 00:05:05,899 Un juego consiste en primero tenemos que leer el texto original 77 00:05:05,899 --> 00:05:10,920 Entonces el otro jugador va a escribir el texto original 78 00:05:10,920 --> 00:05:14,439 Y para eso vamos a hacer una subrutina que se encarga de leer ese texto 79 00:05:14,439 --> 00:05:18,160 Entonces esta subrutina leer texto original le va a imprimir al usuario 80 00:05:18,160 --> 00:05:19,660 Por favor indique el texto 81 00:05:19,660 --> 00:05:23,680 Y el usuario escribe el texto, el texto tiene que cumplir con ciertas reglas 82 00:05:23,680 --> 00:05:27,920 Esas reglas, esas restricciones las va a vigilar esta misma subrutina 83 00:05:27,920 --> 00:05:33,040 Entonces la subrutina retorna como resultado el texto que el usuario escribió 84 00:05:33,040 --> 00:05:37,699 Este texto original puede tener tildes, mayúsculas y otras cosas 85 00:05:37,699 --> 00:05:43,160 Letras en general, pero puede tener mayúsculas y puede tener tildes 86 00:05:43,160 --> 00:05:50,699 Lo que pasa es que esas mayúsculas y tildes posteriormente no nos van a interesar 87 00:05:50,699 --> 00:05:56,439 Bueno, justo después de que leemos el texto original hay que limpiar otra vez la pantalla 88 00:05:56,439 --> 00:06:01,620 Para que el nuevo jugador no vea que fue lo que escribió, si no sería muy fácil 89 00:06:01,620 --> 00:06:04,839 Y ahora sí, entonces vamos a inicializar nuestras variables 90 00:06:04,839 --> 00:06:06,420 Vamos a necesitar una variable texto 91 00:06:06,420 --> 00:06:09,680 Esta variable texto va a ser el texto que hay que adivinar 92 00:06:09,680 --> 00:06:11,480 Pero sin tildes y sin mayúsculas 93 00:06:11,480 --> 00:06:13,139 Entonces vamos a hacer una subrutina 94 00:06:13,139 --> 00:06:16,699 Que se encarga de preparar el texto original 95 00:06:16,699 --> 00:06:19,459 Se lo enviamos por parámetro 96 00:06:19,459 --> 00:06:23,560 Ese texto original puede traer tildes y mayúsculas 97 00:06:23,560 --> 00:06:24,259 Como les dije antes 98 00:06:24,259 --> 00:06:27,060 Y preparar se encarga de devolver el texto limpio 99 00:06:27,060 --> 00:06:29,480 Sin esas cosas 100 00:06:29,480 --> 00:06:31,339 Sin tildes y sin mayúsculas 101 00:06:31,339 --> 00:06:33,639 Y también le quita espacios al inicio y al final 102 00:06:33,639 --> 00:06:35,899 Por aquello de que el usuario le haya metido espacios 103 00:06:35,899 --> 00:06:37,139 Que no nos interesa adivinar 104 00:06:37,139 --> 00:06:40,000 Luego vamos a llevar una variable 105 00:06:40,000 --> 00:06:41,139 Que se llama intentadas 106 00:06:41,139 --> 00:06:44,860 Que es un string con las letras que el usuario ya usó 107 00:06:44,860 --> 00:06:46,680 Hayan servido o no hayan servido 108 00:06:46,680 --> 00:06:47,459 Las letras que ya usó 109 00:06:47,459 --> 00:06:49,180 Porque el usuario no puede repetir letras 110 00:06:49,180 --> 00:06:52,019 Eso va a ir ahí, por eso empieza como un string vacío 111 00:06:52,019 --> 00:06:53,620 Porque al principio no ha intentado nada 112 00:06:53,620 --> 00:06:55,399 Luego una variable que nos dice 113 00:06:55,399 --> 00:06:58,699 Cuantos intentos ha hecho el usuario 114 00:06:58,699 --> 00:07:00,300 Eso lo vamos a empezar en cero 115 00:07:00,300 --> 00:07:01,980 Esta es la variable que vamos a ir viendo 116 00:07:01,980 --> 00:07:04,800 Tiene que ser menor que la cantidad máxima de intentos 117 00:07:04,800 --> 00:07:06,980 Para que sean solo 7 oportunidades 118 00:07:06,980 --> 00:07:10,579 Y también vamos a llevar el número de ronda por el que vamos 119 00:07:10,579 --> 00:07:12,120 El número de ronda empieza en 1 120 00:07:12,120 --> 00:07:15,180 Esas son nuestras variables principales 121 00:07:15,180 --> 00:07:16,579 Ahora tenemos otro ciclo 122 00:07:16,579 --> 00:07:20,740 Este ciclo se va a repetir mientras el usuario está adivinando letras 123 00:07:20,740 --> 00:07:22,220 Entonces dice letras 124 00:07:22,220 --> 00:07:25,959 Si es verdad, si es correcta le va a decir 125 00:07:25,959 --> 00:07:27,899 Y si es incorrecta también le va a decir 126 00:07:27,899 --> 00:07:32,740 Pero este ciclo se va a repetir hasta que el usuario pierda o gane alguna de las dos 127 00:07:32,740 --> 00:07:34,639 Entonces, ¿cuál es la condición para perder? 128 00:07:34,800 --> 00:07:37,199 La condición para perder es gastar todos los intentos 129 00:07:37,199 --> 00:07:43,060 Entonces, mientras intentos sea menor que intentos max, que es la cantidad máxima de intentos 130 00:07:43,060 --> 00:07:45,160 Podemos seguir jugando, si no ya perdimos 131 00:07:45,160 --> 00:07:49,240 Y además, mientras no haya adivinado 132 00:07:49,240 --> 00:07:54,319 Entonces lo que vamos a hacer es crear una función que se llama adivinó 133 00:07:54,319 --> 00:07:58,579 Esta función nos dice si el jugador ya ganó o no ganó 134 00:07:58,579 --> 00:08:00,519 Para eso le tenemos que mandar el texto 135 00:08:00,519 --> 00:08:01,959 Que hay que adivinar 136 00:08:01,959 --> 00:08:05,620 Y además las letras intentadas 137 00:08:05,620 --> 00:08:08,779 Entonces con eso podemos saber 138 00:08:08,779 --> 00:08:12,540 Esta subrutina se va a encargar de devolver true o false 139 00:08:12,540 --> 00:08:15,560 True si todas las letras de texto 140 00:08:15,560 --> 00:08:17,920 Están ya en las intentadas 141 00:08:17,920 --> 00:08:19,279 Porque si es así ya adivinó 142 00:08:19,279 --> 00:08:21,480 Entonces este ciclo se va a repetir 143 00:08:21,480 --> 00:08:24,180 Mientras se cumpla esta condición 144 00:08:24,180 --> 00:08:28,620 En cada una de las rondas lo primero que vamos a hacer es limpiar la pantalla 145 00:08:28,620 --> 00:08:34,419 Esto no es necesario, de nuevo, es algo estético, pero no sé, lo voy a dejar así 146 00:08:34,419 --> 00:08:38,259 Y vamos al inicio de la ronda, después de limpiar la pantalla 147 00:08:38,259 --> 00:08:40,460 Lo que vamos a hacer es imprimir una serie de información 148 00:08:40,460 --> 00:08:44,419 Vamos a decir por cuál ronda vamos, cuáles son las letras que ya usó 149 00:08:44,419 --> 00:08:48,580 Cuántos intentos ha fallado y cómo se ve la palabra 150 00:08:48,580 --> 00:08:51,779 Cómo están los espacios ahí, cuáles son las letras que le faltan 151 00:08:51,779 --> 00:08:56,620 Entonces para eso vamos a hacer una subrutina que se va a llamar imprimir ronda 152 00:08:56,620 --> 00:09:01,519 Que va a recibir el texto que hay que adivinar, va a recibir las letras intentadas 153 00:09:01,519 --> 00:09:06,379 Va a recibir cuantos intentos ha hecho y va a recibir el número de ronda por el que vamos 154 00:09:06,379 --> 00:09:09,000 Toda esa información se la mandamos por parámetro 155 00:09:09,000 --> 00:09:12,720 Luego de que ya imprimimos ese mensaje en pantalla lo que tenemos que hacer es leer 156 00:09:12,720 --> 00:09:17,159 Cual es la letra que el usuario quiere intentar, entonces vamos a decir letra intento 157 00:09:17,159 --> 00:09:21,940 Y lo vamos a obtener de una subrutina también de interfaz 158 00:09:21,940 --> 00:09:24,519 Que se va a encargar de leer el intento 159 00:09:24,519 --> 00:09:27,659 Y le vamos a pasar todas las letras que ya ha usado 160 00:09:27,659 --> 00:09:30,820 Para que no le permita repetir letras que ya ha usado antes 161 00:09:30,820 --> 00:09:32,600 Vamos a hacer que el juego sea buena gente 162 00:09:32,600 --> 00:09:37,200 Porque podríamos dejar que repita letras que ya fallaron 163 00:09:37,200 --> 00:09:38,700 Y simplemente perdió un intento más 164 00:09:38,700 --> 00:09:43,779 Pero no, somos un juego bueno, un juego familiar 165 00:09:43,779 --> 00:09:47,779 que no va a dejar que la gente se equivoque repitiendo letras 166 00:09:47,779 --> 00:09:51,820 ok, entonces luego de que lee esta función entonces nos devuelve 167 00:09:51,820 --> 00:09:55,419 la letra que el usuario quiere intentar, entonces la guardamos en esa variable 168 00:09:55,419 --> 00:09:59,840 y luego necesitamos saber si adivinó o no adivinó 169 00:09:59,840 --> 00:10:03,639 si esa letra que acaba de intentar está o no está dentro de la palabra 170 00:10:03,639 --> 00:10:07,779 o del texto que se tiene que adivinar, entonces también vamos a hacer 171 00:10:07,779 --> 00:10:11,940 una función que nos va a decir si el intento es bueno 172 00:10:11,940 --> 00:10:13,600 o es malo, si adivinó o no adivinó 173 00:10:13,600 --> 00:10:16,220 entonces eso se va a llamar acierta intento 174 00:10:16,220 --> 00:10:18,259 es una función booleana, nos dice true o false 175 00:10:18,259 --> 00:10:20,259 recibe el texto y además 176 00:10:20,259 --> 00:10:22,460 recibe la letra del intento 177 00:10:22,460 --> 00:10:24,279 si acertó el intento 178 00:10:24,279 --> 00:10:26,240 lo que vamos a hacer es imprimir un mensaje 179 00:10:26,240 --> 00:10:28,139 que diga, felicidades 180 00:10:28,139 --> 00:10:29,720 adivinó una letra 181 00:10:29,720 --> 00:10:32,320 esto lo podríamos poner aquí mismo, podríamos hacer 182 00:10:32,320 --> 00:10:34,519 print, podríamos escribir un print con el mensaje 183 00:10:34,519 --> 00:10:36,379 pero no vamos a hacer eso, vamos a hacer 184 00:10:36,379 --> 00:10:37,620 una subrutina también 185 00:10:37,620 --> 00:10:40,220 imprimir mensaje de acierto 186 00:10:40,220 --> 00:10:43,179 ¿Por qué una subrutina? ¿Por qué no el print? 187 00:10:43,639 --> 00:10:49,220 Porque si posteriormente quisiéramos complicar o modificar algo de esa impresión de ese mensaje 188 00:10:49,220 --> 00:10:51,980 Por ejemplo hacer que el mensaje salga diferente siempre 189 00:10:51,980 --> 00:10:56,899 Que escoja un mensaje de una serie de posibles mensajes para que el juego no sea tan repetitivo 190 00:10:56,899 --> 00:11:01,759 Es más fácil modificar esa subrutina que venir a modificar la lógica del programa principal 191 00:11:01,759 --> 00:11:06,000 Entonces así si tenemos que hacer alguna modificación en el mensaje o algo nuevo surge 192 00:11:06,000 --> 00:11:08,340 Entonces es mejor tenerlo dentro de una subrutina 193 00:11:08,340 --> 00:11:12,500 Luego, si no adivinó el intento, entonces no acertó el intento 194 00:11:12,500 --> 00:11:18,360 Entonces vamos a imprimir un mensaje de no acierto 195 00:11:18,360 --> 00:11:22,220 No se me ocurrió una mejor palabra, pero un mejor nombre 196 00:11:22,220 --> 00:11:26,879 Lo mismo, una subrutina que se encarga de imprimir qué es lo que pasó 197 00:11:26,879 --> 00:11:31,120 Pero además cuando no acertó el intento, aparte de imprimir ese mensaje 198 00:11:31,120 --> 00:11:34,940 Tenemos que aumentar la cantidad de intentos fallidos que ha hecho 199 00:11:34,940 --> 00:11:37,059 Entonces a la variable intentos le vamos a sumar un 200 00:11:37,059 --> 00:11:50,299 Ok, después de haber impreso ese mensaje, se adivinó o no adivinó la letra, necesitamos agregar a la variable que lleva las letras que ya hemos intentado, la letra que acaba de intentar. 201 00:11:50,299 --> 00:11:54,500 No importa si adivinó o no adivinó, la letra ya se usó, entonces la vamos a agregar aquí. 202 00:11:55,059 --> 00:11:58,679 Y también vamos a aumentar la ronda por la que vamos porque eso fue todo. 203 00:11:59,039 --> 00:12:03,940 Le dijimos si adivinó o no adivinó y además pasamos a la siguiente ronda. 204 00:12:03,940 --> 00:12:07,840 Hasta aquí ya básicamente se está dando el juego 205 00:12:07,840 --> 00:12:14,340 El jugador está intentando letras, está viendo que adivina y que no adivina 206 00:12:14,340 --> 00:12:17,340 Cuando salgamos de este ciclo, de este while 207 00:12:17,340 --> 00:12:21,539 Vamos a haber perdido o ganado, cualquiera de las dos, no sabemos 208 00:12:21,539 --> 00:12:25,000 Entonces es necesario aquí preguntar si ganó o perdió 209 00:12:25,000 --> 00:12:28,000 Entonces lo más fácil es preguntar si adivinó la última letra 210 00:12:28,000 --> 00:12:31,480 Si salió del ciclo y adivinó, fue un acierto correcto 211 00:12:31,480 --> 00:12:34,379 Entonces vamos a asumir que el usuario ganó 212 00:12:34,379 --> 00:12:38,740 Entonces vamos a imprimir un mensaje de victoria 213 00:12:38,740 --> 00:12:42,059 Le vamos a mandar el texto original para que se imprima 214 00:12:42,059 --> 00:12:43,840 Para que el usuario vea que era lo que habían puesto 215 00:12:43,840 --> 00:12:44,940 Aunque ya lo adivinó 216 00:12:44,940 --> 00:12:49,179 Y si no, entonces vamos a imprimir mensaje de derrota 217 00:12:49,179 --> 00:12:53,679 También con el texto original para que el usuario vea 218 00:12:53,679 --> 00:12:55,460 Que fue lo que tenía que adivinar 219 00:12:55,460 --> 00:12:58,059 Después de esto, todavía estamos en el ciclo grande 220 00:12:58,059 --> 00:13:00,500 En el ciclo que permite jugar una y otra vez 221 00:13:00,500 --> 00:13:05,019 Entonces acá al final necesitamos preguntarle al usuario si quiere jugar de nuevo o no 222 00:13:05,019 --> 00:13:07,740 Entonces vamos a usar la variable continuar 223 00:13:07,740 --> 00:13:12,419 Esta variable va a estar en true o en false, si queremos seguir o no queremos seguir 224 00:13:12,419 --> 00:13:15,340 Entonces aquí vamos a hacer una subrutina también de interfaz 225 00:13:15,340 --> 00:13:18,100 Que se llama leer jugar nuevamente 226 00:13:18,100 --> 00:13:21,240 Que le va a decir al usuario si quiere jugar de nuevo o sí o no 227 00:13:21,240 --> 00:13:24,860 Y entonces nos devuelve un valor booleano, un true o un false 228 00:13:24,860 --> 00:13:26,480 Que se lo asignamos de una vez a esa variable 229 00:13:26,480 --> 00:13:30,399 Entonces si el usuario dice que no quiere jugar más, la variable es false y nos salimos del ciclo 230 00:13:30,399 --> 00:13:34,480 Si el usuario dice que sí quiere jugar, entonces la variable es true, continúa y juega de nuevo 231 00:13:34,480 --> 00:13:39,659 Si salimos del ciclo principal de este ciclo grande, entonces ya el juego se acabó 232 00:13:39,659 --> 00:13:44,700 Lo que vamos a hacer es imprimir un mensaje de despedida y listo, se acabó 233 00:13:44,700 --> 00:13:48,080 Entonces este es nuestro programa principal 234 00:13:48,080 --> 00:13:51,700 Obviamente falta mucho por hacer, faltan muchas subrutinas 235 00:13:51,700 --> 00:13:57,740 Pero vamos a ir haciéndolas todas poco a poco, agregándoles su documentación 236 00:13:57,740 --> 00:14:04,779 y viendo a ver si es necesario hacer chequeo de restricciones o no en las diferentes funciones 237 00:14:04,779 --> 00:14:09,600 vamos a empezar con la primera que se usa por acá que es limpiar pantalla 238 00:14:09,600 --> 00:14:13,240 vamos a definir aquí def, limpiar pantalla 239 00:14:13,240 --> 00:14:19,320 vamos a hacerle la documentación a la función o al procedimiento de limpiar la pantalla 240 00:14:19,320 --> 00:14:29,799 entonces esta es una subrutina que imprime líneas en blanco para limpiar la pantalla 241 00:14:29,799 --> 00:14:39,460 entradas ninguna, salidas 40 líneas en blanco y restricciones ninguna 242 00:14:39,460 --> 00:14:43,879 listo, esta es la documentación de esta subrutina 243 00:14:43,879 --> 00:14:46,480 En realidad esta subrutina no hace mucha cosa 244 00:14:46,480 --> 00:14:51,340 Gastamos más tiempo escribiendo la documentación que lo que en realidad va a hacer 245 00:14:51,340 --> 00:14:56,539 Porque lo que va a hacer es imprimir un enter 246 00:14:56,539 --> 00:15:00,360 Ahí está el enter, lo va a imprimir 40 veces 247 00:15:00,360 --> 00:15:02,360 Eso es todo lo que hace la subrutina 248 00:15:02,360 --> 00:15:04,940 Esa fue la primera, ya está lista 249 00:15:04,940 --> 00:15:07,139 Limpiar pantalla, ya la tenemos por acá 250 00:15:07,139 --> 00:15:09,000 Estamos aquí, limpiar pantalla 251 00:15:09,000 --> 00:15:12,659 Ahora vamos con la de imprimir entrada 252 00:15:12,659 --> 00:15:20,419 Entonces esta subrutina se va a encargar de imprimir la entrada del juego 253 00:15:20,419 --> 00:15:24,980 Entonces cuando entremos al juego se va a imprimir un rótulo que dice 254 00:15:24,980 --> 00:15:26,519 Bienvenido al juego de Orcado 255 00:15:26,519 --> 00:15:28,860 Y lo va a poner creado por Mauricio 256 00:15:28,860 --> 00:15:32,100 Pero ustedes le pueden poner cualquier otro mensaje que quieran ponerle 257 00:15:32,100 --> 00:15:34,159 Entonces aquí va a poner la documentación 258 00:15:34,159 --> 00:15:40,159 Subrutina que imprime un mensaje de bienvenida 259 00:15:40,159 --> 00:15:43,139 Entradas, ninguna 260 00:15:43,139 --> 00:15:46,580 Salidas, mensaje de bienvenida 261 00:15:46,580 --> 00:15:49,879 Y restricciones, ninguna 262 00:15:49,879 --> 00:15:51,840 Ahí está, nuestra documentación 263 00:15:51,840 --> 00:15:54,799 Entonces, esto ya lo tengo preparado 264 00:15:54,799 --> 00:15:57,059 Porque no lo voy a hacer aquí en vivo 265 00:15:57,059 --> 00:15:59,820 Pero básicamente es esto lo que voy a imprimir 266 00:15:59,820 --> 00:16:01,399 Vean que bonito 267 00:16:01,399 --> 00:16:03,559 Esto lo hice con una página de internet 268 00:16:03,559 --> 00:16:06,080 Que permite hacer algo que se llama ASCII Art 269 00:16:06,080 --> 00:16:07,899 Es decir, esto que voy a escribir aquí 270 00:16:07,899 --> 00:16:09,679 ASCII Art 271 00:16:09,679 --> 00:16:14,039 Entonces uno escoge entre varios tipos de letra y puede copiar y pegar 272 00:16:14,039 --> 00:16:20,139 Y pueden buscar en internet diferentes sitios y aplicaciones que hacen este tipo de cosas 273 00:16:20,139 --> 00:16:26,700 Entonces yo agarré eso de una aplicación en línea y lo pegué por acá para hacer las letras de ahorcado 274 00:16:26,700 --> 00:16:29,659 Este va a ser el mensaje de bienvenida, eso es todo 275 00:16:29,659 --> 00:16:33,460 Ya tenemos la subrutina de imprimir entrada lista 276 00:16:33,460 --> 00:16:35,700 Ahora, ¿qué más nos hace falta? 277 00:16:35,779 --> 00:16:40,259 Nos hace falta una subrutina que nos permita leer el texto original 278 00:16:40,259 --> 00:16:45,379 Vamos a hacer la subrutina que se llama leer texto original 279 00:16:45,379 --> 00:16:50,000 Esta subrutina no recibe ningún parámetro, no recibe ninguna entrada 280 00:16:50,000 --> 00:16:52,740 Y vamos a hacer la documentación 281 00:16:52,740 --> 00:17:10,900 La documentación dice función, es una función que lee de la consola la palabra o frase a ser adivinada y retorna como resultado el texto leído 282 00:17:10,900 --> 00:17:21,119 Entradas, tiene como entradas el texto del usuario, salidas, texto ingresado, restricciones, ninguna 283 00:17:21,119 --> 00:17:25,440 No vamos a requerir ningún tipo de datos 284 00:17:25,440 --> 00:17:28,819 Pero si vamos a hacer que la frase sea válida 285 00:17:28,819 --> 00:17:34,000 No se vale leer cosas que no se pueden adivinar 286 00:17:34,000 --> 00:17:35,740 Como números o símbolos raros 287 00:17:35,740 --> 00:17:40,220 Entonces para eso vamos a necesitar una función cita auxiliar 288 00:17:40,220 --> 00:17:41,619 Que vamos a declarar ahorita 289 00:17:41,619 --> 00:17:45,079 Entonces texto va a ser el input 290 00:17:45,079 --> 00:17:47,339 Y le damos el mensaje que es 291 00:17:47,339 --> 00:17:53,579 Ingrese la palabra o frase a adivinar 292 00:17:53,579 --> 00:17:58,079 Solo puede contener letras y espacios 293 00:17:58,079 --> 00:18:03,319 Entonces ese va a ser nuestro mensaje para leer el texto 294 00:18:03,319 --> 00:18:06,960 Vamos a necesitar que eso que el usuario ingresó sea algo válido 295 00:18:06,960 --> 00:18:13,640 No lo vamos a revisar aquí, vamos a hacer una función que se encarga de ver si un texto es válido 296 00:18:13,640 --> 00:18:17,839 Pero si no es válido, entonces vamos a quedarnos en un ciclo 297 00:18:17,839 --> 00:18:20,559 Pidiéndole al usuario hasta que escriba un texto válido 298 00:18:20,559 --> 00:18:24,599 O sea, vamos a dejarlo atrapado hasta que escriba algo que sea correcto 299 00:18:24,599 --> 00:18:25,880 Con lo que se pueda jugar 300 00:18:25,880 --> 00:18:29,200 Entonces, mientras no sea 301 00:18:29,200 --> 00:18:32,940 Entonces vamos a hacer una subrutina que se llama 302 00:18:32,940 --> 00:18:34,920 Es texto válido 303 00:18:34,920 --> 00:18:37,839 Y le mandamos por parámetro el texto que acabamos de leer 304 00:18:37,839 --> 00:18:40,099 Mientras el texto no sea válido 305 00:18:40,099 --> 00:18:41,940 Lo que vamos a hacer es decirle 306 00:18:41,940 --> 00:18:49,079 A ver, por favor usuario, el texto solo puede contener letras y espacios 307 00:18:49,079 --> 00:18:55,039 El programa regaña al usuario y después vuelve a hacer el input 308 00:18:55,039 --> 00:18:57,599 Que es igual a este que está aquí, texto 309 00:18:57,599 --> 00:19:04,900 Ese ciclo se encarga de leer el texto hasta que sea válido 310 00:19:04,900 --> 00:19:08,819 Si no es válido, si el usuario no escribe cosas válidas, entonces va a repetir 311 00:19:08,819 --> 00:19:10,019 Se va a quedar atrapado ahí 312 00:19:10,019 --> 00:19:19,019 ahora hagamos la función esa es texto válido entonces recibe un texto por parámetro si esta 313 00:19:19,019 --> 00:19:31,319 función cita es es una función booleana que dice si un string es un texto válido para adivinar 314 00:19:31,319 --> 00:19:45,720 adivinar en el juego si entonces entradas texto a analizar salidas true si el texto es contiene 315 00:19:45,720 --> 00:19:57,480 solo letras letras espacios y tiene al menos un carácter sí porque no se va al escribir un string 316 00:19:57,480 --> 00:20:07,680 vacío eso no es un texto válido para adivinar false sino que esas son las salidas y las 317 00:20:07,680 --> 00:20:15,000 restricciones son que texto debe ser un string que hay aquí termina la documentación de esta 318 00:20:15,000 --> 00:20:25,740 función y vamos a chequear restricciones primero si el tipo de texto es diferente de string entonces 319 00:20:25,740 --> 00:20:35,160 vamos a lanzar una raceException, texto debe ser un string, listo y si no entonces lo que vamos a 320 00:20:35,160 --> 00:20:41,920 hacer es chequear cada uno de los caracteres que se encuentran en el texto, entonces vamos a 321 00:20:41,920 --> 00:20:48,480 preguntar por cada letra que se encuentre en el texto, vamos a preguntar si la letra pasándola 322 00:20:48,480 --> 00:20:53,619 a minúsculas porque no nos interesa si son mayúsculas o minúsculas, si la letra no está 323 00:20:53,619 --> 00:20:57,599 en las letras del abecedario 324 00:20:57,599 --> 00:20:59,140 pero hay que tener cuidado aquí 325 00:20:59,140 --> 00:21:01,500 escoger cuáles letras si son válidas y cuáles no 326 00:21:01,500 --> 00:21:02,900 pero básicamente 327 00:21:02,900 --> 00:21:06,039 primero el espacio si se permite para separar palabras 328 00:21:06,039 --> 00:21:07,519 la A se vale 329 00:21:07,519 --> 00:21:08,619 la A tildada también 330 00:21:08,619 --> 00:21:10,039 B, C, D, E 331 00:21:10,039 --> 00:21:11,680 la E tildada también 332 00:21:11,680 --> 00:21:12,859 F, G, H, I 333 00:21:12,859 --> 00:21:14,519 la I tildada también 334 00:21:14,519 --> 00:21:16,940 J, K, L, M, N 335 00:21:16,940 --> 00:21:17,960 Ñ 336 00:21:17,960 --> 00:21:19,299 O 337 00:21:19,299 --> 00:21:20,859 la O tildada también 338 00:21:20,859 --> 00:21:23,319 P, Q, R, S, T 339 00:21:23,319 --> 00:21:25,359 u, u tildada 340 00:21:25,359 --> 00:21:27,220 v, w, x, y, z 341 00:21:27,220 --> 00:21:28,519 esas son 342 00:21:28,519 --> 00:21:31,500 las letras, ah no, en español también se vale 343 00:21:31,500 --> 00:21:33,279 la u con diéresis, entonces ahí está 344 00:21:33,279 --> 00:21:34,380 la u con diéresis también 345 00:21:34,380 --> 00:21:35,640 entonces 346 00:21:35,640 --> 00:21:39,220 si la letra se 347 00:21:39,220 --> 00:21:41,279 encuentra, vamos a hacer esto para arriba 348 00:21:41,279 --> 00:21:43,319 ahí está, si no 349 00:21:43,319 --> 00:21:45,039 se encuentra en estas que pusimos 350 00:21:45,039 --> 00:21:47,440 entonces no es un texto válido, por lo tanto 351 00:21:47,440 --> 00:21:48,940 decimos return false 352 00:21:48,940 --> 00:21:51,539 y listo, de otro modo 353 00:21:51,539 --> 00:21:52,940 cuando salgamos del ciclo 354 00:21:52,940 --> 00:21:59,220 ya habríamos revisado todas las letras que se venían en el texto, todas se encuentran en las letras válidas que pusimos ahí 355 00:21:59,220 --> 00:22:02,019 por lo tanto es un texto válido, decimos return true 356 00:22:02,019 --> 00:22:09,880 ok, aquí ya hemos escrito varias funciones, lo que voy a hacer es probar cada una de ellas, de las funciones que estamos terminando 357 00:22:09,880 --> 00:22:18,900 entonces por ejemplo voy a probar aquí, limpiar pantalla, eso es lo que hace, lo que hace es imprimir un montón de enter 358 00:22:18,900 --> 00:22:21,720 Por lo tanto queda la pantalla limpia o vacía 359 00:22:21,720 --> 00:22:26,599 Pareciera, pero en realidad aquí está todo lo que estaba antes 360 00:22:26,599 --> 00:22:31,440 La otra que vamos a probar es imprimir entrada 361 00:22:31,440 --> 00:22:32,740 ¿Qué hace esto? 362 00:22:32,859 --> 00:22:34,059 Bueno, imprime esto 363 00:22:34,059 --> 00:22:36,539 Bienvenido al juego de Orcado creado por Mauricio 364 00:22:36,539 --> 00:22:44,400 Muy bien, ahora vamos a probar la subrutina que se llama leer texto original 365 00:22:44,400 --> 00:22:48,019 Nos recibe parámetros y nos va a decir ingrese la palabra o frase adivinar 366 00:22:48,019 --> 00:22:49,740 Solo puede contener letras y espacios 367 00:22:49,740 --> 00:22:52,460 Voy a probar mandándole un string vacío 368 00:22:52,460 --> 00:22:53,519 Debería decirme que 369 00:22:53,519 --> 00:22:55,519 Oh, falló, está malo 370 00:22:55,519 --> 00:22:56,700 Texto válido 371 00:22:56,700 --> 00:22:59,000 Es texto válido 372 00:22:59,000 --> 00:23:01,099 Hizo falta aquí que 373 00:23:01,099 --> 00:23:03,680 En texto válido diga que 374 00:23:03,680 --> 00:23:04,660 Tiene que 375 00:23:04,660 --> 00:23:06,319 Tener 376 00:23:06,319 --> 00:23:10,180 Al menos un carácter 377 00:23:10,180 --> 00:23:12,279 Aquí deberíamos agregar 378 00:23:12,279 --> 00:23:13,339 If 379 00:23:13,339 --> 00:23:14,980 Leng de 380 00:23:14,980 --> 00:23:17,920 O simplemente componer 381 00:23:17,920 --> 00:23:19,279 Que si texto es igual 382 00:23:19,279 --> 00:23:21,200 A string vacío 383 00:23:21,200 --> 00:23:23,779 Entonces return false 384 00:23:23,779 --> 00:23:26,220 Ok, ya bueno, vamos a probarla de nuevo 385 00:23:26,220 --> 00:23:27,880 Porque había un pequeño problema 386 00:23:27,880 --> 00:23:29,900 Leer texto original 387 00:23:29,900 --> 00:23:32,519 Ok, espacio vacío 388 00:23:32,519 --> 00:23:33,579 Ok, me dice 389 00:23:33,579 --> 00:23:35,420 El texto solo puede contener letras y espacios 390 00:23:35,420 --> 00:23:37,140 Ingrese la palabra o frase adivinar 391 00:23:37,140 --> 00:23:38,660 Solo puede contener letras y espacios 392 00:23:38,660 --> 00:23:41,319 Está repetido aquí el mensaje 393 00:23:41,319 --> 00:23:43,319 Está muy feo, voy a borrarle algunas cosas 394 00:23:43,319 --> 00:23:45,920 Leer texto original, ingrese la frase adivinar 395 00:23:45,920 --> 00:23:46,799 Nada más esto 396 00:23:46,799 --> 00:23:57,930 probar de nuevo, listo, leer texto original, ingrese la palabra o frase adivinar, solo puede contener que hay espacio vacío 397 00:23:57,930 --> 00:24:05,829 entonces me dice que no, si escribo números y cosas raras me dice que no, pero cuando escribo algo que sí es válido 398 00:24:05,829 --> 00:24:13,289 por ejemplo voy a poner la palabra ahorcado, me la retorna, aquí se ve que me retornó, este es el valor, me retorna un string con esa palabra 399 00:24:13,289 --> 00:24:21,650 También podría hacer cosas con frases largas, por ejemplo, ahorcado es el juego que estamos programando 400 00:24:21,650 --> 00:24:23,970 Ahí está, entonces también se permite 401 00:24:23,970 --> 00:24:33,089 Hasta ahora tenemos eso, ya probamos leer texto original y leer texto original nos ayuda a probar esta otra que se llama texto válido 402 00:24:33,089 --> 00:24:36,049 Vamos a regresar por acá para ver qué más hay que hacer 403 00:24:36,049 --> 00:24:42,470 Ya hicimos leer texto original, limpiar pantalla, ahora vamos con la subrutina que se llama preparar 404 00:24:42,470 --> 00:25:02,549 Para preparar, habíamos dicho que lo que va a hacer es eliminar del texto original cosas que no nos sirven, por ejemplo, tildes, mayúsculas, espacios que el usuario escriba al inicio o al final, todo eso lo vamos a eliminar para comparar las letras que escribe el usuario contra este texto que vamos a producir aquí. 405 00:25:02,549 --> 00:25:15,470 Entonces esta subrutina convierte el texto a minúsculas, sustituye acentos y elimina espacios al inicio y al final. 406 00:25:15,809 --> 00:25:27,230 Entradas, texto a procesar, salidas, texto sin mayúsculas, acentos y espacios al inicio o al final. 407 00:25:27,529 --> 00:25:30,930 Restricciones, texto debe ser un string. 408 00:25:30,930 --> 00:25:33,609 Primero vamos a chequear restricciones 409 00:25:33,609 --> 00:25:38,130 Si el tipo de texto es diferente de string 410 00:25:38,130 --> 00:25:40,750 Entonces vamos a lanzar una excepción 411 00:25:40,750 --> 00:25:41,849 RaiseException 412 00:25:41,849 --> 00:25:45,710 Y le vamos a decir texto debe ser un string 413 00:25:45,710 --> 00:25:50,009 Después de eso, si sí es un string 414 00:25:50,009 --> 00:25:52,289 Entonces tenemos que pasarlo a minúscula 415 00:25:52,289 --> 00:25:53,609 Entonces lo que vamos a hacer es a texto 416 00:25:53,609 --> 00:25:55,710 Le asigno texto.lower 417 00:25:55,710 --> 00:25:57,690 Eso pasa todo a minúscula 418 00:25:57,690 --> 00:26:00,509 Luego hay un método de los string 419 00:26:00,509 --> 00:26:03,089 Que le quita espacios al inicio y al final 420 00:26:03,089 --> 00:26:05,349 Sería texto.strip 421 00:26:05,349 --> 00:26:08,089 Luego queremos quitar tildes 422 00:26:08,089 --> 00:26:10,849 Por lo tanto hay que hacer replace con cada una de las tildes 423 00:26:10,849 --> 00:26:14,269 Por ejemplo texto.replace 424 00:26:14,269 --> 00:26:18,609 Entonces sustituya la A tildada con una A normal 425 00:26:18,609 --> 00:26:21,710 Igual con las demás vocales y las demás acentos 426 00:26:21,710 --> 00:26:25,049 Entonces voy a copiar aquí esto varias veces 427 00:26:25,049 --> 00:26:26,329 La E por una E 428 00:26:26,329 --> 00:26:28,470 La I tildada por una I 429 00:26:28,470 --> 00:26:31,750 La O tildada por una O 430 00:26:31,750 --> 00:26:35,410 Y la U tildada por una U 431 00:26:35,410 --> 00:26:37,369 La U también puede tener diéresis 432 00:26:37,369 --> 00:26:40,430 Entonces con diéresis va sin diéresis 433 00:26:40,430 --> 00:26:42,230 Y esto ya, ya con esto tenemos todo 434 00:26:42,230 --> 00:26:45,069 Una vez que hicimos esto, entonces retornamos la variable texto 435 00:26:45,069 --> 00:26:48,470 Vean que estamos quitando tildes, mayúsculas y espacios al inicio y al final 436 00:26:48,470 --> 00:26:49,049 Eso es todo 437 00:26:49,049 --> 00:26:50,529 Vamos a probar si esto sirve 438 00:26:50,529 --> 00:26:52,289 Preparar 439 00:26:52,289 --> 00:26:54,029 Y entonces le mandamos un texto 440 00:26:54,029 --> 00:26:56,410 Por ejemplo, hola estamos 441 00:26:56,410 --> 00:26:59,430 probando esta 442 00:26:59,430 --> 00:27:01,509 función, vean que 443 00:27:01,509 --> 00:27:03,450 estoy usando mayúsculas 444 00:27:03,450 --> 00:27:05,670 estoy usando tilde, voy a ponerle 445 00:27:05,670 --> 00:27:07,210 aquí un espacio al final 446 00:27:07,210 --> 00:27:09,509 y también voy a ponérselo al inicio para probar de una vez 447 00:27:09,509 --> 00:27:11,349 que hace, ahora estamos probando esta función 448 00:27:11,349 --> 00:27:13,289 le quito la tilde, le quito las mayúsculas 449 00:27:13,289 --> 00:27:14,970 y le quito los espacios, luego 450 00:27:14,970 --> 00:27:17,450 si yo trato de probarla con algo que no es 451 00:27:17,450 --> 00:27:19,130 un string, bueno me tira mi excepción 452 00:27:19,130 --> 00:27:21,130 esto debe ser un string, excelente 453 00:27:21,130 --> 00:27:23,430 ahora vamos a ver que otras subrutinas 454 00:27:23,430 --> 00:27:25,329 necesitamos, ya tenemos 455 00:27:25,329 --> 00:27:27,470 preparar texto, adivinó 456 00:27:27,470 --> 00:27:29,450 not adivinó, entonces ahora 457 00:27:29,450 --> 00:27:31,509 necesitamos hacer la subrutina 458 00:27:31,509 --> 00:27:33,329 que nos dice si el usuario 459 00:27:33,329 --> 00:27:35,309 ya adivinó la palabra 460 00:27:35,309 --> 00:27:37,369 o el texto que estaba adivinando, adivinó 461 00:27:37,369 --> 00:27:39,730 recibe por parámetro el texto y recibe 462 00:27:39,730 --> 00:27:41,269 por parámetro las letras 463 00:27:41,269 --> 00:27:43,410 intentadas, esta 464 00:27:43,410 --> 00:27:45,009 es una 465 00:27:45,009 --> 00:27:47,289 función booleana 466 00:27:47,289 --> 00:27:49,369 lo que va a hacer es darnos true si el 467 00:27:49,369 --> 00:27:51,109 usuario adivinó el texto 468 00:27:51,109 --> 00:27:53,490 entradas, ok, tiene varias 469 00:27:53,490 --> 00:27:54,769 entradas, lo voy a escribir así 470 00:27:54,769 --> 00:28:19,609 El texto es el texto preparado sin tildes ni acentos, después intentadas son las letras que el usuario ha intentado, que ya usó, y salidas sería true si todas las letras del texto ya han sido intentadas, false si no. 471 00:28:19,609 --> 00:28:24,849 Esas serían las salidas, luego tenemos restricciones, a ver que restricciones hay en estas 472 00:28:24,849 --> 00:28:31,230 Bueno, texto debe ser un string que no debería tener letras y acentos 473 00:28:31,230 --> 00:28:36,750 Eso lo podemos chequear aquí o podríamos dejarlo sin chequear porque ya sabemos que 474 00:28:36,750 --> 00:28:40,730 La única función que va a llamar este texto es la función principal 475 00:28:40,730 --> 00:28:44,029 Esta función es la función principal, la que se llama ahorcado 476 00:28:44,029 --> 00:28:48,849 Si nosotros estamos seguros de que esa función solo le va a mandar parámetros válidos 477 00:28:48,849 --> 00:28:51,450 Entonces no es necesario chequear las restricciones 478 00:28:51,450 --> 00:28:55,529 Sin embargo, si uno quiere hacer un programa realmente robusto 479 00:28:55,529 --> 00:29:00,029 Tiene que chequear siempre las entradas de las funciones para que ninguna de esas falle 480 00:29:00,029 --> 00:29:03,190 Entonces depende del nivel de robustez que queramos 481 00:29:03,190 --> 00:29:04,910 Bueno, vamos a hacerlo bien robusto 482 00:29:04,910 --> 00:29:10,430 Entonces el texto debe ser un string de letras sin acentos 483 00:29:10,430 --> 00:29:16,930 Y por otro lado, intentadas también debe ser un string de letras sin acentos 484 00:29:16,930 --> 00:29:20,130 Entonces esa es la documentación de esta función 485 00:29:20,130 --> 00:29:22,630 Y bueno, primero vamos a chequear restricciones 486 00:29:22,630 --> 00:29:27,049 Si el tipo de texto es diferente de string 487 00:29:27,049 --> 00:29:30,970 O el tipo de intentadas que también son string 488 00:29:30,970 --> 00:29:32,369 Es diferente de string 489 00:29:32,369 --> 00:29:35,089 Entonces tenemos que lanzar el error 490 00:29:35,089 --> 00:29:40,950 De que el texto y las letras intentadas deben ser strings 491 00:29:40,950 --> 00:29:45,529 La otra restricción es que solo pueden venir letras 492 00:29:45,529 --> 00:29:48,809 no puede venir en acentos y todo tiene que estar en minúsculas 493 00:29:48,809 --> 00:29:53,710 entonces ya tenemos esa función que chequea que el texto sea válido o no 494 00:29:53,710 --> 00:29:58,470 entonces si no es texto válido, ya lo habíamos hecho antes 495 00:29:58,470 --> 00:30:02,849 vean que la documentación que le pusimos a la función con Python Docs 496 00:30:02,849 --> 00:30:05,829 aquí se ve, para eso es útil usar este tipo de documentación 497 00:30:05,829 --> 00:30:11,809 entonces si el texto no es válido o tampoco es válido las intentadas 498 00:30:11,809 --> 00:30:15,910 O sea, tiene tildes o tiene mayúsculas, otras cosas 499 00:30:15,910 --> 00:30:18,390 Entonces vamos a lanzar una excepción 500 00:30:18,390 --> 00:30:24,869 El texto y las intentadas contienen caracteres no valios 501 00:30:24,869 --> 00:30:27,190 Estamos en la función adivinó 502 00:30:27,190 --> 00:30:30,549 Y ya chequeamos todas las restricciones 503 00:30:30,549 --> 00:30:35,250 Ahora necesitamos ver cada una de las letras que vienen en el texto 504 00:30:35,250 --> 00:30:38,549 Y corroborar si todas están en intentadas 505 00:30:38,549 --> 00:30:41,130 Si alguna no está en intentadas, entonces no ha adivinado 506 00:30:41,130 --> 00:30:44,789 Entonces lo que vamos a hacer por cada letra que esté en el texto 507 00:30:44,789 --> 00:30:52,470 Si la letra es diferente de espacio, eso sí, porque las diferentes palabras pueden venir separadas por espacios 508 00:30:52,470 --> 00:30:57,470 Eso no nos interesa, entonces si la letra es diferente de espacio, es cualquier otra cosa 509 00:30:57,470 --> 00:31:03,309 Si esa letra no está en las intentadas, entonces todavía no ha adivinado 510 00:31:03,309 --> 00:31:07,029 Porque todavía no ha usado esa letra, no ha intentado con esa letra 511 00:31:07,029 --> 00:31:13,769 entonces si la letra no está en intentadas entonces decimos no, no ha adivinado 512 00:31:13,769 --> 00:31:21,009 pero si el ciclo continúa y vemos que todas las letras que son diferentes de espacio no están en las intentadas 513 00:31:21,009 --> 00:31:26,549 entonces quiere decir que ya adivinó porque ya dijo todas las letras que están en el texto 514 00:31:26,549 --> 00:31:29,930 entonces en ese caso diríamos return true, listo 515 00:31:29,930 --> 00:31:33,329 esa sería la función de adivinó 516 00:31:33,329 --> 00:31:42,829 Esta la podemos probar, entonces por ejemplo, quiero ver si adivinó, cuál era el texto, hola, cómo estás, sin tildes 517 00:31:42,829 --> 00:31:49,490 Y las letras que he probado son A, B, C y D, esto debería decirme que no, ok, me dijo que no, está bien 518 00:31:49,490 --> 00:31:59,349 Para ver si adiviné, debería haber probado la O, la H, la L, la A, la C, la M, la E, la S y la T 519 00:31:59,349 --> 00:32:02,029 Si he probado esas, entonces ya adiviné 520 00:32:02,029 --> 00:32:03,230 True, excelente 521 00:32:03,230 --> 00:32:08,150 Ahora, pues esto debería causar un error si le mando algo con tilde 522 00:32:08,150 --> 00:32:09,130 Oh, no lo hizo 523 00:32:09,130 --> 00:32:12,210 Texto válido, que era texto válido 524 00:32:12,210 --> 00:32:13,630 Vamos a revisar un toque 525 00:32:13,630 --> 00:32:17,990 Ah, solo letras, espacios y se aceptan tildes, por supuesto 526 00:32:17,990 --> 00:32:20,890 Entonces debería darme un error si aquí le mando un número 527 00:32:20,890 --> 00:32:21,829 Sí, ahí sí 528 00:32:21,829 --> 00:32:23,630 Sí está en blanco 529 00:32:23,630 --> 00:32:25,529 Tienen caracteres no válidos 530 00:32:25,529 --> 00:32:28,569 Ok, entonces pareciera que está funcionando bien 531 00:32:28,569 --> 00:32:56,210 Ahora vamos a regresar aquí al programa principal para ver qué sigue, ya tenemos esta función de adivinó, ya tenemos el de limpiar pantalla, ahora vamos a imprimir ronda, def imprimir ronda, va a recibir por parámetro el texto que hay que adivinar, va a recibir la cantidad, las letras intentadas, va a recibir la cantidad de intentos y va a recibir por cuál ronda vamos, toda esta información la necesita para poder imprimir. 532 00:32:56,210 --> 00:32:58,910 ¿Cuál es la documentación de esta subrutina? 533 00:32:59,089 --> 00:33:07,410 Esta función imprime los mensajes requeridos para cada ronda del juego. 534 00:33:07,410 --> 00:33:25,250 Imprime el número de ronda actual, un mensaje que indica las letras que ya fueron utilizadas, cantidad de intentos fallidos y también escribe el texto. 535 00:33:25,250 --> 00:33:28,910 vamos a decirle entre comillas enmascarado 536 00:33:28,910 --> 00:33:35,670 es decir, vamos a imprimir un espacio, un guión bajo por cada letra que no ha adivinado 537 00:33:35,670 --> 00:33:40,890 va a imprimir una letra por cada letra que sí ha adivinado 538 00:33:40,890 --> 00:33:45,230 y va a imprimir un guión normal en caso de que hayan varias palabras 539 00:33:45,230 --> 00:33:50,049 todo esto lo vamos a escribir separado por espacios para que se quede claro qué es lo que está sucediendo 540 00:33:50,049 --> 00:33:52,690 entonces a eso le vamos a decir texto enmascarado 541 00:33:52,690 --> 00:33:55,170 es para no escribir todo eso que acabo de decir 542 00:33:55,170 --> 00:34:03,650 Entradas, texto, es el texto preparado, sin tildes ni acentos 543 00:34:03,650 --> 00:34:09,369 Intentadas, que son las letras que el usuario ha intentado 544 00:34:09,369 --> 00:34:15,349 Los intentos, cantidad de intentos fallidos que lleva el usuario, que lleva el jugador 545 00:34:15,349 --> 00:34:19,530 Y la ronda, número de ronda por la que va el juego 546 00:34:19,530 --> 00:34:27,230 Salidas, pues entre las salidas tenemos la impresión en pantalla de la información de la ronda 547 00:34:27,230 --> 00:34:30,829 Restricciones, ninguna, vamos a dejarlo como ninguna 548 00:34:30,829 --> 00:34:35,989 Ya sabemos que aquí podemos probar si el texto es un string, si el otro es un entero 549 00:34:35,989 --> 00:34:39,690 Todo eso lo podemos probar, ustedes deciden que tanto nivel de robustez quieren 550 00:34:39,690 --> 00:34:47,030 Pero ya para este nivel yo creo que esta función, ya las restricciones se han chequeado antes en otras partes del juego 551 00:34:47,030 --> 00:34:50,309 Entonces sabemos muy bien que aquí vamos a recibir datos correctos 552 00:34:50,309 --> 00:34:51,829 Entonces tal vez no es necesario hacerlo 553 00:34:51,829 --> 00:34:53,050 Pero depende de cada uno 554 00:34:53,050 --> 00:34:53,849 ¿Qué vamos a hacer acá? 555 00:34:53,969 --> 00:34:56,809 Bueno, vamos a imprimir primero por cuál ronda vamos 556 00:34:56,809 --> 00:34:59,449 Le ponemos aquí por cuál ronda vamos 557 00:34:59,449 --> 00:35:04,530 Vamos a imprimir otra cosa que sea letras que ya fueron utilizadas 558 00:35:04,530 --> 00:35:06,889 Para que el usuario sepa con cuáles falló 559 00:35:06,889 --> 00:35:08,130 Eso está en intentadas 560 00:35:08,130 --> 00:35:10,909 Cantidad de intentos fallidos 561 00:35:10,909 --> 00:35:13,269 Y le mandamos aquí intentos 562 00:35:13,269 --> 00:35:15,550 Vamos a dejar un espacio ahí, una línea en blanco 563 00:35:15,550 --> 00:35:19,869 Y vamos a imprimir aquí el texto enmascarado que les decía anteriormente 564 00:35:19,869 --> 00:35:22,570 Bueno, no lo vamos a hacer aquí, vamos a hacer una subrutina 565 00:35:22,570 --> 00:35:24,809 Que se va a encargar de enmascarar el texto 566 00:35:24,809 --> 00:35:28,349 Pero para poder hacer eso necesita el texto que hay que adivinar 567 00:35:28,349 --> 00:35:31,130 Y además cuáles fueron las letras que han sido intentadas 568 00:35:31,130 --> 00:35:33,570 Vamos a imprimir lo que nos devuelva esa subrutina 569 00:35:33,570 --> 00:35:35,710 Va a ser una función que nos devuelve un string 570 00:35:35,710 --> 00:35:37,510 E imprimimos también otra línea en blanco 571 00:35:37,510 --> 00:35:39,530 Ese sería imprimir ronda 572 00:35:39,530 --> 00:35:43,250 Vamos a necesitar la otra subrutina que es enmascarar 573 00:35:43,250 --> 00:35:46,269 Que recibe el texto, también recibe las intentadas 574 00:35:46,269 --> 00:35:47,969 ¿Qué va a hacer esta subrutina? 575 00:35:48,130 --> 00:35:56,389 Retorna un string con un guión bajo por cada letra que no ha sido adivinada 576 00:35:56,389 --> 00:36:03,510 Si una letra del texto aparece en las letras intentadas 577 00:36:03,510 --> 00:36:07,630 Entonces le agrega como tal en lugar del guión 578 00:36:07,630 --> 00:36:16,550 Si el texto original tiene espacios, los sustituye con guiones normales 579 00:36:16,550 --> 00:36:20,690 Entradas, va a ser el texto a adivinar 580 00:36:20,690 --> 00:36:25,489 Intentadas, son las letras que el usuario ha intentado 581 00:36:25,489 --> 00:36:31,190 Y salidas, vamos a tener un string con el texto enmascarado 582 00:36:31,190 --> 00:36:34,590 Texto enmascarado, suena como un superhéroe 583 00:36:34,590 --> 00:36:38,030 Superhero es muy raro, por cierto, no va a tener ningún tipo de éxito 584 00:36:38,030 --> 00:36:39,190 Restricciones ninguna 585 00:36:39,190 --> 00:36:44,210 Aquí podríamos de nuevo chequear que texto sea string, que intentadas también 586 00:36:44,210 --> 00:36:48,030 Pero eso ya lo hemos hecho antes en las funciones que llaman a esta 587 00:36:48,030 --> 00:36:49,489 Entonces ya sabemos que viene por ahí 588 00:36:49,489 --> 00:36:54,250 Primero que todo, necesitamos separar el texto en palabras 589 00:36:54,250 --> 00:36:57,329 Entonces para eso vamos a usar el split 590 00:36:57,329 --> 00:37:00,730 El split es así, si yo tengo un texto que dice 591 00:37:00,730 --> 00:37:03,190 Este es el texto a probar 592 00:37:03,190 --> 00:37:05,610 Y a esto le llamo .split 593 00:37:05,610 --> 00:37:10,469 Lo que va a devolverme es una lista con cada una de las palabras que hay acá 594 00:37:10,469 --> 00:37:13,409 ¿Cómo sabe cuáles son las palabras? Porque están separadas por espacios 595 00:37:13,409 --> 00:37:19,989 Se separa por espacios y me devuelve una lista que tiene cada una de las palabras que estaban en el string original 596 00:37:19,989 --> 00:37:22,409 Eso es lo primero que vamos a necesitar aquí 597 00:37:22,409 --> 00:37:24,849 Dividir el texto en palabras 598 00:37:24,849 --> 00:37:25,710 Split 599 00:37:25,710 --> 00:37:27,690 Entonces tengo una lista de palabras 600 00:37:27,690 --> 00:37:32,210 Porque vamos a escribir en pantalla cada una de las diferentes palabras 601 00:37:32,210 --> 00:37:38,070 las vamos a poner por separado, entonces por ejemplo, si el texto es hola, adiós, si fuera esto, 602 00:37:38,230 --> 00:37:44,590 entonces nuestra función de enmascarar debería dejar un espacio para cada una de las letras, 603 00:37:44,889 --> 00:37:51,929 después este guión que significa que hay un espacio, adiós, debería devolvernos esto que está acá, 604 00:37:51,929 --> 00:37:57,989 este es el texto enmascarado, suponiendo que no ha adivinado ninguna letra, pero si por ejemplo ya hubiera adivinado la A, 605 00:37:57,989 --> 00:38:04,829 entonces debería venir así, hola, adiós, eso es lo que debería devolvernos la subrutina de enmascarar 606 00:38:04,829 --> 00:38:08,969 necesitamos recorrer por palabra y vamos a ir armando un string nuevo 607 00:38:08,969 --> 00:38:15,050 entonces ese string nuevo va a ser la variable resultado, vamos a hacer que inicie con un string vacío 608 00:38:15,050 --> 00:38:22,690 por cada palabra que se encuentre en la lista de palabras, vamos a iterar a través de la lista de palabras 609 00:38:22,690 --> 00:38:28,369 Lo que vamos a hacer es revisar cada una de las letras que se encuentra en esa palabra 610 00:38:28,369 --> 00:38:31,909 Entonces por cada letra que se encuentre en la palabra 611 00:38:31,909 --> 00:38:35,550 Vamos a preguntar si la letra está entre las intentadas 612 00:38:35,550 --> 00:38:37,969 Entonces hay que mostrarla como está aquí 613 00:38:37,969 --> 00:38:40,210 Si no, hay que mostrar un guión 614 00:38:40,210 --> 00:38:42,090 Entonces eso es lo que vamos a preguntar acá 615 00:38:42,090 --> 00:38:44,849 Si la letra está en intentadas 616 00:38:44,849 --> 00:38:49,530 Entonces al resultado lo que le voy a agregar es la letra 617 00:38:49,530 --> 00:38:52,329 Perdón, la letra y un espacio 618 00:38:52,329 --> 00:38:55,489 Así como está aquí, la letra y un espacio 619 00:38:55,489 --> 00:38:59,909 Ahí, la letra y un espacio, eso es lo que estamos haciendo 620 00:38:59,909 --> 00:39:05,369 Si no, lo que voy a hacer es agregarle un guión bajo y un espacio 621 00:39:05,369 --> 00:39:10,570 Al final de cada palabra voy a separar las palabras con ese guión que está acá 622 00:39:10,570 --> 00:39:13,190 Entonces vamos a separar las palabras con un guión normal 623 00:39:13,190 --> 00:39:17,949 Al final de revisar cada palabra le agrega un guión para separar palabras 624 00:39:17,949 --> 00:39:21,269 Cuando ya terminamos de aquí, return resultado 625 00:39:21,269 --> 00:39:24,070 Va a pasar algo, esto no está bien, pero vamos a probarlo así 626 00:39:24,070 --> 00:39:26,449 Enmascarar, le mandamos el texto 627 00:39:26,449 --> 00:39:28,090 Por ejemplo, ese que dice 628 00:39:28,090 --> 00:39:30,630 Este es el texto a probar 629 00:39:30,630 --> 00:39:32,829 Y digamos que no he adivinado nada 630 00:39:32,829 --> 00:39:34,969 O sea, probé la, qué sé yo, la A 631 00:39:34,969 --> 00:39:37,469 O probé la, cuál letra no está ahí 632 00:39:37,469 --> 00:39:39,030 La X, para que no esté 633 00:39:39,030 --> 00:39:39,989 Entonces probé la X 634 00:39:39,989 --> 00:39:41,110 Oh, hay un error 635 00:39:41,110 --> 00:39:42,849 Intentadas 636 00:39:42,849 --> 00:39:44,949 Taipo, salvaje, aparece 637 00:39:44,949 --> 00:39:46,030 Ahí está, ven 638 00:39:46,030 --> 00:39:47,190 Ah, sí, había una X 639 00:39:47,190 --> 00:39:52,050 Este es el texto a probar 640 00:39:52,050 --> 00:39:53,750 Vean que feo quedó esto aquí 641 00:39:53,750 --> 00:39:56,510 Siempre le deja al final un guión adicional 642 00:39:56,510 --> 00:39:57,710 Le voy a poner más aquí 643 00:39:57,710 --> 00:39:58,969 A, B, C, D, E, F, G 644 00:39:58,969 --> 00:40:00,409 Entonces eso es lo que había adivinado 645 00:40:00,409 --> 00:40:01,690 Está funcionando bien 646 00:40:01,690 --> 00:40:02,710 Excepto por esto 647 00:40:02,710 --> 00:40:04,429 Siempre le está agregando al final esto 648 00:40:04,429 --> 00:40:06,469 Entonces tal vez aquí se lo podemos quitar 649 00:40:06,469 --> 00:40:07,730 Debemos decir que quite 650 00:40:07,730 --> 00:40:11,170 Que vaya desde el inicio hasta los últimos dos elementos 651 00:40:11,170 --> 00:40:12,610 Así está mejor 652 00:40:12,610 --> 00:40:15,409 Este es el texto a probar 653 00:40:15,409 --> 00:40:17,289 Muy bien, entonces ya funciona enmascarar 654 00:40:17,289 --> 00:40:20,289 Ahora lo que tenemos que hacer es probar el de imprimir ronda 655 00:40:20,289 --> 00:40:22,409 Imprimir ronda 656 00:40:22,409 --> 00:40:23,989 Que recibe un montón de cosas 657 00:40:23,989 --> 00:40:27,070 Recibe el texto que queremos adivinar 658 00:40:27,070 --> 00:40:28,110 Voy a poner algo corto 659 00:40:28,110 --> 00:40:29,570 Hola, era la palabra adivinar 660 00:40:29,570 --> 00:40:32,690 Las intentadas son, digamos que A, B y C 661 00:40:32,690 --> 00:40:35,030 La cantidad de intentos va a ser por ahora dos 662 00:40:35,030 --> 00:40:36,510 Vamos a probar con cualquier cosa 663 00:40:36,510 --> 00:40:38,050 Y la ronda va a ser la uno 664 00:40:38,050 --> 00:40:39,690 O la dos, no sé 665 00:40:39,690 --> 00:40:40,769 Eso es lo que va a salir 666 00:40:40,769 --> 00:40:41,969 Ronda número dos 667 00:40:41,969 --> 00:40:43,269 Letras que ya fueron utilizadas 668 00:40:43,269 --> 00:40:43,789 A, B y C 669 00:40:43,789 --> 00:40:49,130 cantidad de intentos fallidos 2 y así es como vamos se ve aquí hola pero no sabemos que es 670 00:40:49,130 --> 00:40:54,389 hola con la única letra que ha adivinado excelente entonces estamos está funcionando bien ahora que 671 00:40:54,389 --> 00:41:00,670 sigue ya tenemos bastantes subrutinas creo que quedan las quedan pocas o quedan bastantes no 672 00:41:00,670 --> 00:41:08,090 sé ahora sigue leer intento esta subrutina se encarga entonces de pues leer una letra de el 673 00:41:08,090 --> 00:41:14,329 usuario y enviarla de vuelta es una función entonces leer intento pero recibe por parámetros 674 00:41:14,329 --> 00:41:20,389 las letras que fueron intentadas para que para que si el usuario vuelve a usar una letra que ya había 675 00:41:20,389 --> 00:41:26,929 usado entonces se la vuelve a pedir vamos a decir aquí esto es una función que pide al usuario que 676 00:41:26,929 --> 00:41:37,329 escriba una letra para adivinar si ya se encuentra en las intentadas o no es una letra debe imprimir 677 00:41:37,329 --> 00:41:41,809 un mensaje de error y volver a pedir la letra 678 00:41:41,809 --> 00:41:45,769 aquí no vamos a lanzar una excepción, aquí lo que vamos a hacer es que pedimos de nuevo 679 00:41:45,769 --> 00:41:49,670 el dato para que se quede el usuario ahí hasta que ingrese 680 00:41:49,670 --> 00:41:53,750 un dato válido, entradas, las entradas son, bueno las intentadas 681 00:41:53,750 --> 00:41:57,289 son letras que el usuario ha intentado 682 00:41:57,289 --> 00:42:01,429 salidas, un string con la letra elegida 683 00:42:01,429 --> 00:42:05,409 por el usuario, restricciones, pues ninguna 684 00:42:05,409 --> 00:42:07,349 esta es nuestra documentación 685 00:42:07,349 --> 00:42:09,429 para leer un intento, bueno voy a dejar aquí 686 00:42:09,429 --> 00:42:11,289 un espacio en blanco, una línea ahí 687 00:42:11,289 --> 00:42:13,250 para separar un poco las cosas, para que no salga 688 00:42:13,250 --> 00:42:15,250 todo tan pegado y voy a guardar 689 00:42:15,250 --> 00:42:17,250 en la variable letra lo que el usuario 690 00:42:17,250 --> 00:42:19,050 escriba, input, digite 691 00:42:19,050 --> 00:42:21,389 una letra, vamos a pasar la letra 692 00:42:21,389 --> 00:42:23,190 a minúsculas para evitar cualquier 693 00:42:23,190 --> 00:42:24,809 problema con esto, lower 694 00:42:24,809 --> 00:42:26,869 ahora tenemos que hacer un ciclo 695 00:42:26,869 --> 00:42:29,130 que le pida, si el usuario aquí escribió cualquier 696 00:42:29,130 --> 00:42:31,170 cosa, si el usuario escribió un número por ejemplo 697 00:42:31,170 --> 00:42:33,050 entonces hay que volverlo a pedir, las letras 698 00:42:33,050 --> 00:42:35,150 que puede escribir solo son de la 699 00:42:35,150 --> 00:42:43,789 hasta la zeta incluyendo la ñ si no me equivoco mientras largo de letra el string sólo puede ser 700 00:42:43,789 --> 00:42:53,190 de 1 entonces si es diferente a 1 o la letra es menor que la minúscula de a o la letra es mayor 701 00:42:53,190 --> 00:43:00,349 que la mayúscula minúscula de z o la letra ya está en las intentadas cualquiera de esos casos 702 00:43:00,349 --> 00:43:02,369 tenemos que volver a pedir de nuevo 703 00:43:02,369 --> 00:43:04,610 lo que dudo ahorita es si esto sirva 704 00:43:04,610 --> 00:43:06,829 con una ñ, bueno ya lo probamos 705 00:43:06,829 --> 00:43:08,989 por favor ingrese 706 00:43:08,989 --> 00:43:10,829 una letra que no 707 00:43:10,829 --> 00:43:12,250 haya intentado 708 00:43:12,250 --> 00:43:14,570 y le podemos imprimir aquí las intentadas 709 00:43:14,570 --> 00:43:16,710 para que mire que es lo que está pasando 710 00:43:16,710 --> 00:43:18,769 intentadas, luego de eso 711 00:43:18,769 --> 00:43:20,949 a letra le vamos a asignar el input 712 00:43:20,949 --> 00:43:22,829 otra vez de digite 713 00:43:22,829 --> 00:43:24,969 una letra y de nuevo 714 00:43:24,969 --> 00:43:26,750 pasamos la letra a minúscula 715 00:43:26,750 --> 00:43:28,489 letra.lower 716 00:43:28,489 --> 00:43:32,829 Luego dejamos de nuevo una línea en blanco y return letra 717 00:43:32,829 --> 00:43:35,050 Vamos a probar a ver si esto funciona 718 00:43:35,050 --> 00:43:37,090 Supongamos que solo había intentado la A 719 00:43:37,090 --> 00:43:40,449 Digite una letra, quiero probar con la Ñ porque tengo mil dudas 720 00:43:40,449 --> 00:43:42,429 Por favor ingrese una letra que no haya intentado 721 00:43:42,429 --> 00:43:47,789 No sirve con la Ñ, tenemos problemitas porque la Ñ sí es importante 722 00:43:47,789 --> 00:43:50,550 Ahí está, probé con la D y la D sí funcionó 723 00:43:50,550 --> 00:43:54,210 La A no me la aceptó porque ya estaba entre las intentadas 724 00:43:54,210 --> 00:43:57,090 Aquí tenemos que cambiar, vamos a hacer lo siguiente 725 00:43:57,090 --> 00:44:00,570 Si la letra no está en este string 726 00:44:00,570 --> 00:44:02,309 Vamos a hacer parecido como hicimos antes 727 00:44:02,309 --> 00:44:09,849 A, B, C, D, E, F, G, H, I, J, K, L, M, N, Ñ, O, P, Q, R, S, T, U, W, X, Y, Z 728 00:44:09,849 --> 00:44:11,210 Ahí están todos 729 00:44:11,210 --> 00:44:13,489 Si la letra no está ahí, no la vamos a aceptar 730 00:44:13,489 --> 00:44:14,710 Vamos a probar de nuevo 731 00:44:14,710 --> 00:44:16,849 Leer intento de A 732 00:44:16,849 --> 00:44:17,809 Ya probamos la A 733 00:44:17,809 --> 00:44:19,170 Entonces si le digo A, no 734 00:44:19,170 --> 00:44:20,730 Si le digo un número, no 735 00:44:20,730 --> 00:44:23,349 Si le digo estos símbolos raros, no 736 00:44:23,349 --> 00:44:25,550 Si le digo una Ñ, ya me la aceptó 737 00:44:25,550 --> 00:44:27,349 leer intento de B 738 00:44:27,349 --> 00:44:30,010 parece que está bien, vamos a dejarlo así 739 00:44:30,010 --> 00:44:32,210 ya está aceptando, tuve que hacer esto 740 00:44:32,210 --> 00:44:33,789 el otro estilo era 741 00:44:33,789 --> 00:44:36,150 como un poco más elegante 742 00:44:36,150 --> 00:44:38,130 porque decía entre cuáles 743 00:44:38,130 --> 00:44:39,929 no debía estar, pero no funcionó 744 00:44:39,929 --> 00:44:41,730 con la ñ, así que estamos poniendo 745 00:44:41,730 --> 00:44:44,070 explícitamente cuáles son las letras que sí se están 746 00:44:44,070 --> 00:44:45,909 incluyendo, que sí se están aceptando 747 00:44:45,909 --> 00:44:48,250 regresamos aquí al programa 748 00:44:48,250 --> 00:44:50,050 para ver por dónde 749 00:44:50,050 --> 00:44:51,949 vamos, ya hicimos el de leer 750 00:44:51,949 --> 00:44:53,829 intentos, ahora hay que hacer 751 00:44:53,829 --> 00:45:01,409 esta función cita que nos dice si acertó o no acertó un intento esta función de acierta intento 752 00:45:01,409 --> 00:45:11,349 recibe por parámetro un texto y una letra y esto es una función booleana que dice si un intento es 753 00:45:11,349 --> 00:45:22,409 correcto o no entradas texto que se está adivinando y letra que intentó el usuario salidas retorna 754 00:45:22,409 --> 00:45:24,110 true si la letra 755 00:45:24,110 --> 00:45:26,389 se encuentra en el texto 756 00:45:26,389 --> 00:45:28,369 a adivinar, false 757 00:45:28,369 --> 00:45:30,489 si no, restricciones 758 00:45:30,489 --> 00:45:31,849 ninguna 759 00:45:31,849 --> 00:45:34,190 no vamos a chequear restricciones 760 00:45:34,190 --> 00:45:36,269 esta función en realidad es muy 761 00:45:36,269 --> 00:45:38,369 sencilla porque simplemente hay que decir 762 00:45:38,369 --> 00:45:40,510 si la letra está en texto 763 00:45:40,510 --> 00:45:42,449 eso es una expresión booleana 764 00:45:42,449 --> 00:45:43,969 ¿cierto? nos va a decir si 765 00:45:43,969 --> 00:45:46,110 la letra que estamos poniendo, si el string 766 00:45:46,110 --> 00:45:48,309 que está en esta variable está dentro de este otro 767 00:45:48,309 --> 00:45:50,210 eso es básicamente lo que queremos devolver 768 00:45:50,210 --> 00:45:52,570 Tal vez esta función no era tan necesaria 769 00:45:52,570 --> 00:45:56,030 Pero sí le agrega como un significado al asunto 770 00:45:56,030 --> 00:45:57,969 Ahora dice que acierta el intento 771 00:45:57,969 --> 00:46:00,369 Mientras que letra y texto no nos dicen mucha cosa 772 00:46:00,369 --> 00:46:01,789 Entonces regresamos por acá 773 00:46:01,789 --> 00:46:05,130 Y estamos, creo que ya vamos terminando 774 00:46:05,130 --> 00:46:06,349 Acierta intento 775 00:46:06,349 --> 00:46:09,429 Esta es la función que nos dice si acertó 776 00:46:09,429 --> 00:46:11,630 Ahora nos queda imprimir mensaje de acierto 777 00:46:11,630 --> 00:46:13,230 Imprimir mensaje de no acierto 778 00:46:13,230 --> 00:46:14,469 Adivino, ya la hicimos 779 00:46:14,469 --> 00:46:15,650 Imprimir mensaje de victoria 780 00:46:15,650 --> 00:46:16,590 Mensaje de derrota 781 00:46:16,590 --> 00:46:17,769 Leer, jugar nuevamente 782 00:46:17,769 --> 00:46:21,789 Nos quedan un montón de subrutinas que son de interfaz 783 00:46:21,789 --> 00:46:25,730 Entonces ahora vamos a hacerlas todas seguidas aquí 784 00:46:25,730 --> 00:46:28,929 Para estas no voy a hacer documentación 785 00:46:28,929 --> 00:46:30,969 Porque son cosas muy sencillas 786 00:46:30,969 --> 00:46:32,650 Pero todas deberían tenerlo 787 00:46:32,650 --> 00:46:34,969 Primir, mensaje, acierto 788 00:46:34,969 --> 00:46:37,809 Este mensaje sale cuando adivino una letra 789 00:46:37,809 --> 00:46:38,989 Ha adivinado 790 00:46:38,989 --> 00:46:40,730 Y una cara feliz 791 00:46:40,730 --> 00:46:42,409 Vean que muy sencillo 792 00:46:42,409 --> 00:46:45,650 Pero si queremos después que este programa sea un poco más complejo 793 00:46:45,650 --> 00:46:47,590 Podemos agregarle aquí más funcionalidad 794 00:46:47,590 --> 00:47:17,070 después imprimir mensaje de no acierto, cuando el usuario no adivina la letra entonces vamos a decirle al usuario letra no encontrada, que triste has fallado, letra no encontrada y bueno una carita triste porque no encontré esa letra y lo van a ahorcar, es que hay que pensar también en las implicaciones de este juego, es muy violento entonces por eso al menos merece una cara triste 795 00:47:17,590 --> 00:47:21,070 Imprimir mensaje de Victoria 796 00:47:21,070 --> 00:47:22,929 Entonces nos dan el texto original 797 00:47:22,929 --> 00:47:25,349 Y vamos a imprimir un mensaje que diga 798 00:47:25,349 --> 00:47:28,889 Felicidades, ha adivinado el texto 799 00:47:28,889 --> 00:47:33,230 Y le imprimimos el texto original que hemos puesto para adivinar 800 00:47:33,230 --> 00:47:38,510 Y la otra subrutina es imprimir mensaje de Rota 801 00:47:38,510 --> 00:47:40,710 También tiene el texto original por parámetro 802 00:47:40,710 --> 00:47:42,210 Y vamos a decir print 803 00:47:42,210 --> 00:47:45,190 Ya no son felicidades, vamos a ser un poco más solemnes 804 00:47:45,190 --> 00:47:46,909 ha perdido el texto 805 00:47:46,909 --> 00:47:48,670 a adivinar, era 806 00:47:48,670 --> 00:47:50,789 y le vamos a imprimir aquí texto 807 00:47:50,789 --> 00:47:54,710 original, listo 808 00:47:54,710 --> 00:47:56,989 ¿qué nos queda? nos queda una subrutina 809 00:47:56,989 --> 00:47:58,829 que se llama leer jugar 810 00:47:58,829 --> 00:48:00,829 nuevamente, esta subrutina 811 00:48:00,829 --> 00:48:02,590 lo que hace es preguntarle 812 00:48:02,590 --> 00:48:04,650 al usuario si desea jugar 813 00:48:04,650 --> 00:48:07,050 de nuevo o no, ya esta es una de las últimas 814 00:48:07,050 --> 00:48:09,110 leer jugar nuevamente 815 00:48:09,110 --> 00:48:10,530 si, a esta si le voy a hacer 816 00:48:10,530 --> 00:48:12,570 documentación, es una función 817 00:48:12,570 --> 00:48:14,730 booleana que pregunta 818 00:48:14,730 --> 00:48:16,730 al usuario si desea 819 00:48:17,010 --> 00:48:25,650 jugar de nuevo, solo acepta S o N como respuesta, si el usuario escribe alguna cosa que no sea un 820 00:48:25,650 --> 00:48:32,250 sí o no, una S o N, entonces sigue preguntando, entradas pues no tiene ninguna entrada, salidas, 821 00:48:32,250 --> 00:48:41,250 TRUE si el usuario escribe S, FALSE si no, restricciones, ninguna, entonces qué va a 822 00:48:41,250 --> 00:48:45,750 hacer esta subrutina, pues primero vamos a imprimir hay una línea en blanco para dejar 823 00:48:45,750 --> 00:48:53,070 espacio y vamos a preguntarle la respuesta es input desea jugar de nuevo y le ponemos aquí 824 00:48:53,070 --> 00:48:59,610 sn tal vez ustedes no tienen la costumbre o nunca jugaron con juegos que fueran todos hechos en 825 00:48:59,610 --> 00:49:04,289 consola pero cuando yo estaba pequeñillo yo recuerdo que muchos de los juegos que habían 826 00:49:04,289 --> 00:49:10,510 eran sólo en texto sólo era consola entonces todo eran este tipo de preguntas así como sí o no desea 827 00:49:10,510 --> 00:49:12,329 continuar, desea hacer tal cosa 828 00:49:12,329 --> 00:49:14,530 entonces es curioso 829 00:49:14,530 --> 00:49:16,530 pero bueno, ustedes tal vez no han jugado 830 00:49:16,530 --> 00:49:18,889 juegos así, pero todavía hay juegos de consola 831 00:49:18,889 --> 00:49:20,309 lo que vamos a hacer ahora es pasar 832 00:49:20,309 --> 00:49:22,610 respuesta a minúscula por aquello 833 00:49:22,610 --> 00:49:24,170 que el usuario haya escrito en mayúscula 834 00:49:24,170 --> 00:49:26,269 y mientras la respuesta 835 00:49:26,269 --> 00:49:28,409 que el usuario escribió no esté 836 00:49:28,409 --> 00:49:29,889 en esta lista 837 00:49:29,889 --> 00:49:32,469 que tiene una S y tiene 838 00:49:32,469 --> 00:49:34,630 una N, para que sólo pueda 839 00:49:34,630 --> 00:49:36,070 aceptar esas dos cosas 840 00:49:36,070 --> 00:49:38,329 respuesta le vamos a asignar 841 00:49:38,329 --> 00:49:40,269 input de 842 00:49:40,269 --> 00:49:42,170 Desea jugar de nuevo 843 00:49:42,170 --> 00:49:44,409 Sí o no, o sea, estamos preguntándole de nuevo 844 00:49:44,409 --> 00:49:46,309 La misma cosa, y cuando salimos 845 00:49:46,309 --> 00:49:47,750 De este ciclo ya tuvo que haber 846 00:49:47,750 --> 00:49:50,130 Escrito o una S o una N 847 00:49:50,130 --> 00:49:52,030 No le queda de otra, vamos a hacer 848 00:49:52,030 --> 00:49:54,670 Respuesta es igual a 849 00:49:54,670 --> 00:49:56,690 Respuesta.lower 850 00:49:56,690 --> 00:49:57,409 Otra vez 851 00:49:57,409 --> 00:50:00,650 Y respuesta es igual a 852 00:50:00,650 --> 00:50:01,030 Sí 853 00:50:01,030 --> 00:50:04,250 Leemos la respuesta del usuario 854 00:50:04,250 --> 00:50:06,650 La pasamos a minúscula, si no está en S o N 855 00:50:06,650 --> 00:50:07,969 Entonces seguimos otra vez 856 00:50:07,969 --> 00:50:09,809 Volvemos a preguntarle, volvemos a guardarlo 857 00:50:09,809 --> 00:50:13,949 y la volvemos a pasar a minúscula, hasta que escriba una S o una N y nos salimos de este ciclo 858 00:50:13,949 --> 00:50:17,590 si la respuesta es igual a S, entonces esto va a retornar true 859 00:50:17,590 --> 00:50:21,969 si no, va a retornar false, entonces por eso aquí estamos diciendo que retorne esta expresión 860 00:50:21,969 --> 00:50:25,650 probemos esta subrutina, bueno no hemos probado esas otras 861 00:50:25,650 --> 00:50:29,690 de imprimir, pero son tan sencillas que las vamos a dejar así, y también la de acierta 862 00:50:29,690 --> 00:50:33,329 intento, es muy sencilla, esperemos que no haya ningún error ahí 863 00:50:33,329 --> 00:50:37,929 pero creo que no, leer, jugar nuevamente 864 00:50:37,929 --> 00:50:40,090 Desea jugar de nuevo 865 00:50:40,090 --> 00:50:42,469 G, 4, Y 866 00:50:42,469 --> 00:50:45,110 Naruto, no, no acepta nada 867 00:50:45,110 --> 00:50:46,789 Pero si pongo una S, me vuelve true 868 00:50:46,789 --> 00:50:48,929 Más cosas ahí, no me va a aceptar 869 00:50:48,929 --> 00:50:50,570 Si pongo una N, me retorna false 870 00:50:50,570 --> 00:50:52,050 Eso es justamente lo que queremos 871 00:50:52,050 --> 00:50:54,369 Ahora nos falta, si no me equivoco 872 00:50:54,369 --> 00:50:56,989 Solamente nos falta imprimir el mensaje 873 00:50:56,989 --> 00:50:59,110 Despedida, que es cuando el jugador 874 00:50:59,110 --> 00:51:01,050 Ya termina el juego 875 00:51:01,050 --> 00:51:02,929 Entonces vamos a imprimir aquí 876 00:51:02,929 --> 00:51:04,250 Imprimir 877 00:51:04,250 --> 00:51:06,190 Mensaje despedida 878 00:51:06,190 --> 00:51:08,809 Este es un mensaje que simplemente dice 879 00:51:08,809 --> 00:51:10,090 Gracias por jugar 880 00:51:10,090 --> 00:51:12,690 Gracias por jugar a Orcado 881 00:51:12,690 --> 00:51:14,789 Nos vemos pronto 882 00:51:14,789 --> 00:51:16,869 Alguna tontera así 883 00:51:16,869 --> 00:51:18,070 Ya está listo 884 00:51:18,070 --> 00:51:20,389 Ahora básicamente es probarlo y ver que 885 00:51:20,389 --> 00:51:21,809 Funcione correctamente 886 00:51:21,809 --> 00:51:24,550 Voy a ponerle aquí al final del archivo 887 00:51:24,550 --> 00:51:26,670 Una llamada a la función 888 00:51:26,670 --> 00:51:28,409 Principal para que cuando 889 00:51:28,409 --> 00:51:30,369 Le de F5 aquí 890 00:51:30,369 --> 00:51:31,869 Se ejecute de una vez el juego 891 00:51:31,869 --> 00:51:34,630 Bienvenido al juego de Orcado creado por Mauricio 892 00:51:34,630 --> 00:51:37,269 Ingrese la palabra o frase a adivinar 893 00:51:37,269 --> 00:51:39,590 Solo puede contener letras y espacios 894 00:51:39,590 --> 00:51:42,389 Bueno, entonces se supone que aquí una persona 895 00:51:42,389 --> 00:51:45,130 Viene y escribe cuál es la frase a adivinar 896 00:51:45,130 --> 00:51:48,750 Y le voy a poner, no sé, ser o no ser 897 00:51:48,750 --> 00:51:50,369 Ah, hay un problema 898 00:51:50,369 --> 00:51:55,889 Dice el texto, el problema se dio a ver en la función adivinó 899 00:51:55,889 --> 00:51:58,969 Ajá, en la función adivinó, intentadas está vacía 900 00:51:58,969 --> 00:52:03,309 Entonces el texto y las intentadas contienen caracteres no válidos 901 00:52:03,309 --> 00:52:07,309 Vamos a regresar aquí a la función adivinó 902 00:52:07,309 --> 00:52:13,949 La función adivinó está cayéndose porque le pusimos que no puede aceptar strings vacíos 903 00:52:13,949 --> 00:52:19,409 Pero la verdad es que intentadas sí puede ser un string vacío 904 00:52:19,409 --> 00:52:23,650 Lo que voy a hacer es quitarle esta parte en las restricciones 905 00:52:23,650 --> 00:52:26,510 Que solo chequee que el texto sea válido 906 00:52:26,510 --> 00:52:32,409 Como ya dijimos, más bien tenemos un código que está chequeando demasiadas restricciones 907 00:52:32,409 --> 00:52:37,190 porque cuando escribimos acá nuestra frase ya esa frase se está pasando a minúsculas 908 00:52:37,190 --> 00:52:40,690 se le están quitando los acentos entonces el texto ya a partir de ahí es válido 909 00:52:40,690 --> 00:52:44,809 entonces estar chequeando por todas partes si el texto es válido más bien es contraproducente 910 00:52:44,809 --> 00:52:48,309 porque es demasiado y en este caso hasta nos está causando problemas 911 00:52:48,309 --> 00:52:55,170 entonces vamos a hacer esta opción que es quitarle lo que hice que fue quitarle el chequeo de restricciones 912 00:52:55,170 --> 00:53:00,489 a esa función de adivinó entonces ingrese la palabra o la frase adivinar ser o no ser 913 00:53:00,489 --> 00:53:02,090 Ok, ahí está, ahora sí lo aceptó 914 00:53:02,090 --> 00:53:04,829 Dice ronda número 1, letras que ya fueron utilizadas 915 00:53:04,829 --> 00:53:06,949 Ninguna, cantidad de intentos fallidos 916 00:53:06,949 --> 00:53:08,909 Cero, y ahí está nuestra frase 917 00:53:08,909 --> 00:53:10,949 Enmascarada, entonces supongamos 918 00:53:10,949 --> 00:53:13,010 Que soy otra persona y que no sé que estoy adivinando 919 00:53:13,010 --> 00:53:14,889 Entonces yo digo, bueno, la letra más 920 00:53:14,889 --> 00:53:17,110 Común en el idioma español es la E 921 00:53:17,110 --> 00:53:18,650 Entonces me sale 922 00:53:18,650 --> 00:53:20,869 Un error, tenemos letra 923 00:53:20,869 --> 00:53:22,550 Intento is not defined 924 00:53:22,550 --> 00:53:24,969 En la función ahorcado 925 00:53:24,969 --> 00:53:27,030 En la línea 24 926 00:53:27,030 --> 00:53:28,690 Entonces vamos a venir acá 927 00:53:28,690 --> 00:53:31,530 es esta, letra intento 928 00:53:31,530 --> 00:53:33,309 no está, ah bueno es que aquí me equivoqué 929 00:53:33,309 --> 00:53:34,869 le puse letra 930 00:53:34,869 --> 00:53:36,989 letra intento 931 00:53:36,989 --> 00:53:38,750 bueno ya lo corrigí, esta variable 932 00:53:38,750 --> 00:53:40,750 estaba mal escrita, va de nuevo 933 00:53:40,750 --> 00:53:42,909 aquí vamos a ir chequeando todos los 934 00:53:42,909 --> 00:53:44,369 errorcitos que van a ir saliendo 935 00:53:44,369 --> 00:53:46,769 ser o no ser, ok 936 00:53:46,769 --> 00:53:48,929 entonces digite una letra, había dicho que quería 937 00:53:48,929 --> 00:53:50,969 usar la e, de nuevo hay 938 00:53:50,969 --> 00:53:52,469 otro error, dice intentas 939 00:53:52,469 --> 00:53:54,909 eso está en la línea 29 940 00:53:54,909 --> 00:53:57,349 entonces vamos a ir a la línea 29 941 00:53:57,349 --> 00:54:00,789 intentos, no intentas 942 00:54:00,789 --> 00:54:02,309 ya, corregido ese error 943 00:54:02,309 --> 00:54:03,869 vamos a ver si ya funciona 944 00:54:03,869 --> 00:54:06,530 ser o no ser, digite una letra 945 00:54:06,530 --> 00:54:08,230 la e, otra vez 946 00:54:08,230 --> 00:54:10,349 hay un problema, ah es que que tonto 947 00:54:10,349 --> 00:54:12,349 aquí cambié intentadas 948 00:54:12,349 --> 00:54:14,050 es que era intentadas 949 00:54:14,050 --> 00:54:16,550 así se llama verdad, intentadas 950 00:54:16,550 --> 00:54:18,590 intentadas, le vamos a agregar la letra 951 00:54:18,590 --> 00:54:20,389 intento, no a los intentos 952 00:54:20,389 --> 00:54:22,289 los intentos le sumamos, intentos es un entero 953 00:54:22,289 --> 00:54:24,510 claro, aquí el error dice que no se puede 954 00:54:24,510 --> 00:54:26,309 sumar entero con string, porque 955 00:54:26,309 --> 00:54:28,869 Aquí yo tenía intentos 956 00:54:28,869 --> 00:54:30,210 Que es un string y letra de intentos 957 00:54:30,210 --> 00:54:32,250 Que era un entero 958 00:54:32,250 --> 00:54:34,030 Y letra de intentos que es un string 959 00:54:34,030 --> 00:54:36,150 Entonces eso no funcionó, pero ya lo corrigí 960 00:54:36,150 --> 00:54:38,230 Eso fue que me equivoqué en el nombre de la variable 961 00:54:38,230 --> 00:54:39,570 Y va de nuevo 962 00:54:39,570 --> 00:54:42,269 La frase es ser o no ser 963 00:54:42,269 --> 00:54:43,389 La letra E 964 00:54:43,389 --> 00:54:46,550 Si adiviné algo, está funcionando 965 00:54:46,550 --> 00:54:48,710 Voy a probar aquí con cualquier cosa 966 00:54:48,710 --> 00:54:50,690 Ponerle un número, no, pues ingrese una letra 967 00:54:50,690 --> 00:54:52,670 Esto ya lo habíamos probado, pero es para que vean que sí 968 00:54:52,670 --> 00:54:54,369 Las intentadas ha sido solo la E 969 00:54:54,369 --> 00:54:55,769 Creo que voy a probar la A 970 00:54:55,769 --> 00:54:58,969 La A no está, entonces intentos fallidos 1 971 00:54:58,969 --> 00:55:02,010 Ingreso una letra, la B, he fallado 972 00:55:02,010 --> 00:55:03,750 La A, no, la A ya la hice 973 00:55:03,750 --> 00:55:05,989 ¿Qué pasa si le pongo A? Ok, me dice que no 974 00:55:05,989 --> 00:55:08,449 S, ¿qué era? Ser o no ser 975 00:55:08,449 --> 00:55:10,590 Ah bueno, la O, lo malo es que ya sé qué dice 976 00:55:10,590 --> 00:55:14,630 Pero tal vez con letras, palabras tan cortas está un poco difícil 977 00:55:14,630 --> 00:55:17,710 Voy a ganar, ok, voy a hacer ser o no ser 978 00:55:17,710 --> 00:55:21,550 Adivinado, felicidades, adivinado el texto ser o no ser 979 00:55:21,550 --> 00:55:23,610 Ahí está, entonces ya me dijo que gané el juego 980 00:55:23,610 --> 00:55:25,289 ¿Desea jugar de nuevo? Voy a decirle que sí 981 00:55:25,289 --> 00:55:27,269 Ingrese la palabra o frase adivinar 982 00:55:27,269 --> 00:55:28,889 Solo puede contener letras o espacios 983 00:55:28,889 --> 00:55:31,409 Entonces ahora podríamos poner otra frase 984 00:55:31,409 --> 00:55:34,550 El sol se pone por el oeste 985 00:55:34,550 --> 00:55:37,050 No sé, no se pregunten de dónde saco estas palabras 986 00:55:37,050 --> 00:55:38,630 Pero bueno, estas frases 987 00:55:38,630 --> 00:55:40,369 Digito una letra, la A 988 00:55:40,369 --> 00:55:42,329 No hay A's, voy a poner una E 989 00:55:42,329 --> 00:55:43,909 Si hay E, una O 990 00:55:43,909 --> 00:55:45,809 También hay O, una I 991 00:55:45,809 --> 00:55:46,769 No hay I 992 00:55:46,769 --> 00:55:48,949 Estoy dándome cuenta que el mensaje 993 00:55:48,949 --> 00:55:50,869 De que si la encontró o no la encontró 994 00:55:50,869 --> 00:55:54,190 Está quedando justamente después 995 00:55:54,190 --> 00:56:21,590 o antes de imprimir este montón de espacios en blanco, entonces no se ve, esto es un error que hay que corregir, vamos a tenerlo por ahí, mientras seguimos probando, voy a perder, la B, la C, la D, la E, la F, la G, hay un error aquí, ya perdió, ya hizo los intentos, ya falló 7 veces, letra no encontrada, ha perdido, 996 00:56:21,590 --> 00:56:23,730 El texto adivinar era texto original 997 00:56:23,730 --> 00:56:25,369 No quiero jugar de nuevo 998 00:56:25,369 --> 00:56:27,429 Gracias por jugar Orkado, nos vemos pronto 999 00:56:27,429 --> 00:56:29,590 Entonces vamos a ir un toque a este 1000 00:56:29,590 --> 00:56:31,170 Subrutina que dice 1001 00:56:31,170 --> 00:56:33,389 Que están los mensajes aquí 1002 00:56:33,389 --> 00:56:34,989 Finales, ven si había un error 1003 00:56:34,989 --> 00:56:37,789 En las subrutinas que supuestamente 1004 00:56:37,789 --> 00:56:39,710 Eran tan simples que no podían tener errores 1005 00:56:39,710 --> 00:56:42,070 Bueno, ahí está, eso me pasa por no probarlo 1006 00:56:42,070 --> 00:56:43,469 Probarlo de nuevo 1007 00:56:43,469 --> 00:56:44,730 Ah, vamos a corregir lo otro 1008 00:56:44,730 --> 00:56:46,630 Que se está imprimiendo 1009 00:56:46,630 --> 00:56:49,210 El mensaje de letra no encontrada 1010 00:56:49,210 --> 00:56:51,170 O letra adivinada y después se borra 1011 00:56:51,170 --> 00:56:57,829 todo lo que hay en la pantalla eso es porque aquí precisamente limpiamos la pantalla apenas va a 1012 00:56:57,829 --> 00:57:03,170 empezar la ronda para evitar problemas voy a quitarle esto más bien no se imprima en esos 1013 00:57:03,170 --> 00:57:07,590 espacios porque nos están causando problemas y creo que habría que cambiar un poco la lógica 1014 00:57:07,590 --> 00:57:15,710 de ese ciclo otra frase para adivinar la frase es a qué hora termina este vídeo si ahí está 1015 00:57:15,710 --> 00:57:17,530 intentos fallidos, digite una letra 1016 00:57:17,530 --> 00:57:19,329 A, E, I, O 1017 00:57:19,329 --> 00:57:22,010 O, y hay U también 1018 00:57:22,010 --> 00:57:23,110 B, fallé 1019 00:57:23,110 --> 00:57:25,829 ahora si ven, aquí se ve si fallé 1020 00:57:25,829 --> 00:57:27,789 o no fallé, antes no se veía 1021 00:57:27,789 --> 00:57:28,869 letra no encontrada 1022 00:57:28,869 --> 00:57:31,309 tal vez a la hora de imprimir la ronda 1023 00:57:31,309 --> 00:57:34,070 sería todavía dejar un pequeño espacio 1024 00:57:34,070 --> 00:57:35,530 ahí para que no salga pegado 1025 00:57:35,530 --> 00:57:37,289 entonces antes de esto aquí 1026 00:57:37,289 --> 00:57:39,909 imprimir una línea en blanco, así como está 1027 00:57:39,909 --> 00:57:41,170 ya casi termina 1028 00:57:41,170 --> 00:57:42,369 el video 1029 00:57:42,369 --> 00:57:45,110 A, E, I, O 1030 00:57:45,110 --> 00:57:47,010 Ya fallé la U 1031 00:57:47,010 --> 00:57:48,309 Letra no encontrada 1032 00:57:48,309 --> 00:57:52,849 B, V, D, C, S 1033 00:57:52,849 --> 00:57:54,369 Ahí está 1034 00:57:54,369 --> 00:57:56,130 Llevamos dos intentos fallidos 1035 00:57:56,130 --> 00:57:57,530 La D, ya la intenté 1036 00:57:57,530 --> 00:57:58,610 La F 1037 00:57:58,610 --> 00:58:01,869 Fallé en la G 1038 00:58:01,869 --> 00:58:04,050 La H tampoco, ya llevo 5 1039 00:58:04,050 --> 00:58:06,250 La I, ya le he hecho la J 1040 00:58:06,250 --> 00:58:07,510 Volví a fallar 1041 00:58:07,510 --> 00:58:09,510 La K va a fallar 1042 00:58:09,510 --> 00:58:11,630 Letra no encontrada, ha perdido 1043 00:58:11,630 --> 00:58:13,449 El texto de divinar era, ya casi termino el video 1044 00:58:13,449 --> 00:58:14,650 ¿Desea jugar de nuevo? No 1045 00:58:14,650 --> 00:58:18,710 Listo, pues este video se hizo un poco largo 1046 00:58:18,710 --> 00:58:23,969 Pero si quería compartir con ustedes el proceso de creación de algo 1047 00:58:23,969 --> 00:58:26,210 Desde cero hasta tener el programita 1048 00:58:26,210 --> 00:58:29,489 Aquí todavía puede tener errores, hay que probarlo más 1049 00:58:29,489 --> 00:58:32,030 La lógica principal la hicimos de primero 1050 00:58:32,030 --> 00:58:36,849 Definimos que era lo que había que hacer en términos de subrutinas que todavía no existían 1051 00:58:36,849 --> 00:58:39,909 Y después nos pusimos a programar cada una de las subrutinas 1052 00:58:39,909 --> 00:58:42,590 Probándolas por separado, viendo que funcionaran bien 1053 00:58:42,590 --> 00:58:47,150 y finalmente probamos de forma integral ya todo el programa funcionando 1054 00:58:47,150 --> 00:58:53,210 vimos que surgen nuevos errores que son parte de la interacción entre las diferentes subrutinas 1055 00:58:53,210 --> 00:58:58,230 pero ya una vez corregidos esos pequeños problemas tenemos el programa completo 1056 00:58:58,230 --> 00:59:05,010 entonces listo, si tienen alguna duda o si tienen alguna pregunta me lo pueden enviar 1057 00:59:05,010 --> 00:59:08,469 o dejar en los comentarios, como sea, muchas gracias, nos vemos pronto 1058 00:59:12,590 --> 00:59:12,949 Gracias.