Transcripciones
1. Introducción: Bienvenido a Python. Muchos proyectos Matemáticas Quiz adición de juego en este curso estarán creando un diminuto juego de consola . El test los jugadores. Habilidad de masas. Este mini curso de proyecto se descompone en trozos de tamaño de método. Literalmente. La mayoría de las clases se centran en un solo método. Aprenderás a crear preguntas de matemáticas aleatorias. Calcula la respuesta a esas preguntas. Construye un bucle de juego que brinde una buena experiencia de usuario y, lo
más importante, cómo utilizar diversas estructuras de tuberías fundamentales. Entonces, ¿para quién es este curso? Bueno, en realidad, un par de personas diferentes Primero, si tienes un conocimiento básico de piadoso y pitón y te gustaría ver el lenguaje que se está poniendo a uso práctico, este curso es para ti. Es una excelente manera de ver cómo se pueden descomponer los problemas y cómo resolverlos usando python. Si no conoces a ningún Piketon, pero ya estás familiarizado con otro idioma. Java Sea Sharp Tacks script. Realmente no importa. Entonces tu público objetivo número dos. Si caes en esta categoría, obtendrás una exposición rápida a la sintaxis inusual de Patton. Como alguien que ha tenido exposición a más de 14 lenguajes de programación en la última década, eso me hace sentir un poco viejo hablo por experiencia cuando digo que mirar el código de
otra persona en tu nuevo lenguaje y modificarlo para que se adapte a tus necesidades es uno de los formas más rápidas de recoger ese idioma. Esto se debe a que se llega a ver tantos aspectos que el recurso de aprendizaje tradicional es a menudo simplemente no se muestran a los principiantes. Este también es un buen curso para cualquiera que ya conozca a Pathan pero quisiera un
refresco rápido , así que que empiece la programación.
2. Evaluación de ecuaciones: en esta intra lección toe tienen que crear un juego de preguntas de matemáticas usando Python. Vamos a estar creando el núcleo, todo
el proyecto. Este es un método llamado calcular Respuesta, y lo que va a hacer se le da un problema. Te va a devolver. En la respuesta se utilizará este método a lo largo de todo el proyecto, y es realmente importante que lo hagamos bien. Vamos a empezar creando un método esqueleto simple, solo una demo, que nuestro entorno está funcionando y funcionando. Esperábamos devolver no, ya que ese es el valor predeterminado y python. Hace eso, así que está listo para seguir adelante. Siguiente. Añadamos parámetros. Un método como este va a aceptar todos los componentes de una pregunta básica de matemáticas. Ah, lado
izquierdo,
lado derecho y un operador como más o menos, se pone en una declaración de devolución ficticia. Hemos codificado duro al operador por ahora para mantener las cosas simples y para mostrar que cambiar los valores de los
argumentos realmente tiene un efecto. Para hacer un seguimiento de los avances en el futuro, estas declaraciones de impresiones nos permitirán saber qué operaciones se están comportando como se espera en una lección
posterior. Cambiará estos por casos de prueba reales en lugar de solo impresiones. Observe cómo todos dan la misma respuesta. Por ahora. Arreglemos eso con una simple declaración if más adelante, podrías agregar Ellis, pero en realidad no es necesario. Una simple comparación de cuerdas dentro del horno. Si Operador es suficiente por ahora, las 1 ª 2 salidas de comportarse como se esperaba, se puede usar
la misma lógica todo el camino hacia abajo. Necesito recordar cambiar cada condicional, y cada operador de retorno y la salida parecen ser correctos. Pero, ¿qué pasa cuando se le da algún tipo de entrada inválida? Digamos que una cara sonriente o algo igualmente raro que impago a la adición no tiene mucho
sentido . Entonces démosle la misma lógica que sus hermanos sólo van a duplicar este trozo de código . Eso deja la cuestión de cuál es la forma correcta de manejar los malos insumos. Podríamos simplemente devolver una constante tal cero, pero entonces nadie sabrá que algo salió mal. Cuando lo haga, también
podríamos mostrar un mensaje de aire, pero eso hace que la salida sea fea y se puede ignorar. La mejor manera de manejar algo como esto es plantear una excepción que obliga a los usos a reconocer que tienen un error y ya sea arreglarlo o manejarlo explícitamente con un try catch . Ahora queremos ejecutar este código para doble comprobación que son excepción se está planteando de hecho donde debería estar. Y aquí es como tarea para esta lección. Intenta agregar una ecuación extra. Tipo, por ejemplo, sobre exponentes o potencia de operador. También detecte el problema de Aled sin mano en torno a la división e implemente un mensaje de error explícito para cuando suceda. Por lo que concluye la primera lección de crear un juego de preguntas de matemáticas usando Python. Ojalá no
fuéramos demasiado rápido, y si sí me dejábamos caer un mensaje y ya veré qué podemos hacer para ayudarte. Entonces una rápida revisión de lo que se cubrió tres puntos principales escribimos un método de retorno de valor que calcula las respuestas a una pregunta de matemáticas. Utilizamos ifs con el fin de decidir qué hicieron diversos operadores, y finalmente aprendimos a plantear una excepción para que los comportamientos indeseables pudieran
manejarse rápidamente. Por lo que en la siguiente lección, estaremos escribiendo el método del sistema para calcular. Respuesta. I e. Generar pregunta. Como siempre, siéntete libre de dejar preguntas o comentarios, y haré todo lo posible para abordarlos
3. Nota paralelo: comprensión de alternativas: y ahora una tangente rápida antes de pasar a la siguiente porción del programa de quiz, quería demostrar que casi siempre hay otra forma de codificar algo. Si bien una forma no siempre es mejor que otra, cada versión suele tener sus propios pros y contras distintos. Te explicaré algunas de estas ventajas y desventajas usando dos ejemplos. Otro beneficio de las barras laterales como este es que podrás obtener exposición a características
del lenguaje que tal vez no sabías que existían. Por lo que para la alternativa número uno revisa la combinación de Funciones Lambda y diccionarios fin de eliminar el exceso de sentencias if. Si no sabes qué son ninguno de esos, eso está perfectamente bien. Y si ya sabes cuáles son y cómo combinarlas así, entonces ¿por qué estás viendo este video? Ya oíste un nivel superior universitario. Este enfoque de funciones es agradable por varias razones, en mi opinión, porque es fácil de leer, trivial de extender y no restrictivo con respecto a los operadores personalizados. Por ejemplo, podría
usar la letra l o literalmente cualquier otra cadena para representar un logaritmos. Si quieres experimentar con esta versión, he compartido un enlace en la descripción. Alternativa Número dos es una bestia totalmente diferente. El mal es algo que la mayoría de los idiomas no tienen es una característica incorporada. Javascript y Python son las únicas dos excepciones que puedo pensar. Entregar ive es esencialmente una llamada al intérprete compañero que dice algo como esto . Toma esta cuerda, finge que es código, y luego dame lo que sea que termine. Pass Evil es seguro en este ejemplo, pero sólo porque comprobamos contra la lista de operadores legales antes de hacer algo. Si no tuviéramos ese cheque, entonces aquí se podría inyectar código arbitrariamente complejo, lo que plantea un riesgo real para la seguridad. Debido a esto, convocar ambientes abiertamente deshabilitados mal, que hace que sea algo para evitar cuando sea posible por razones de compatibilidad. Otra limitación con este enfoque es que el formato de ecuación está rígidamente conectado toe lo que python considere enviado tácticamente legal, lo que ese ejemplo de registro de antes no podría usarse aquí. El gran pro de usar el mal es lo muy, muy corto y legible que es con esa tangente ojalá informativa. Fuera del camino, sigamos con la siguiente porción de la lógica de los quizzes
4. Generar preguntas: hola y bienvenidos a la segunda disminución principal, creando un juego de preguntas de matemáticas de patentes. Hasta el momento, hemos aprendido a calcular el resultado de una pregunta dada. Pero eso no es realmente mucho uso todo por sí mismo. Después de todo, si haces tus preguntas de mi mano, realmente no
necesitarías una calculadora porque solo podrías trabajar bailes a medida que
avanzas . En esta lección, vamos a cubrir la generación de preguntas aleatorias usando Rand de Python en Método y hacia el final también mostrará brevemente cómo el método de respuesta de cálculo existente de la última lección y el recién creado generan método de pregunta de esta lección se puede hacer para comunicarse entre sí, convirtiéndose en algo útil donde alguna vez había en el camino teórico efímero, más en esa segunda parte en la siguiente lección, comencemos. Como siempre, lo primero que hay que hacer es crear el contorno de nuestro método objetivo. Por el momento, no
hay argumentos obvios, así que dejaremos eso en blanco ahora. El propósito principal del método lo que tienen retornos es algo que necesitamos discutir más a fondo. Mencioné brevemente antes que generen pregunta. Es el método del sistema para calcular la respuesta. Quizás una comparación más apta es la del cálculo productor y consumidor. Respuesta consume las salidas de generar pregunta. Esto significa que los valores de retorno aquí deben duplicar la estructura. ¿ Qué respuesta de cálculo se espera recibir en esta versión en particular? Calcular respuesta está esperando tres argumentos a los números y un operador. Como siempre, existen soluciones alternativas, como pasar por los objetos de pregunta. Pero esto es lo suficientemente bueno para nuestro sencillo caso de uso. Ese es el esqueleto de nuestro método completo. Ahora vamos a eliminar toda esta fealdad codificada dura. Arreglar los números con algo más aleatorio es el tipo de reemplazo más fácil. Entonces empecemos por ahí. Esta nueva importación significa en lugar de traer toda la biblioteca aleatoria, sólo
queremos acceder al método generador de entrevistas aleatorias que contiene i e. rand. Esta es una buena manera de reducir el clatter en programas más grandes, ya que ya no necesitas decir Punto aleatorio se topó con cada vez que quieres crear un nuevo
número aleatorio , Brandon y espera argumentos y límite superior e inferior 0 a 10 suena como un punto de
partida para estos. Cuando estábamos en esto, notó que el primer valor de retorno ahora está cambiando cada vez que este era el
comportamiento esperado . Entonces duplicemos la lógica para el número del lado derecho. Aleatorizar ing al operador es donde las cosas lo hacen confuso. Recuerda, un operador es uno de un conjunto muy limitado de caracteres, y por lo tanto la biblioteca aleatoria no tendrá nada que nos ayude, al
menos no directamente como punto de partida. Podemos enumerar explícitamente son conjunto de operadores conocidos como una cadena. A continuación, pregúntate. ¿ Cómo elegiríamos exactamente a un operador de esta colección? La respuesta más simple es que la calle es tratar. El string es una lista y utilizar el aviso de indexación de valores si cambiamos este valor o indexamos los cambios operados
devueltos con él. Para hacer las cosas más aleatorias, vamos a reemplazar el índice constante por algo más dinámico. uso de lógica similar es antes que ahora tenemos un valor de índice de operador aleatorio. Antes de ejecutar esto, mira si puedes detectar el problema. Pausa. Ahora. Si quieres probar por ti mismo, la respuesta quedará clara. Si ejecutamos este código un par de veces, ahí se estrelló. El motivo que se estrelló es porque no tuvimos cuidado con los límites del operador Index. A diferencia de la mayoría de los lenguajes, python tiene un inclusive up abundan en su generador de números aleatorios en lugar de
uno exclusivo . Yo traigo esto porque puede llevar a sutiles bugs que son súper difíciles de replicar y Deepak. La solución más fácil es simplemente restar uno del límite superior. Los números posibles generados ahora serán 012 o tres, pero nunca por significado nunca saldrá de límites. Echemos un vistazo a una salida de muestra más grande a partir de nuestro nuevo método. En su mayoría se ve bien, pero aquí hay otro problema potencial. Tenemos un operador de división aquí y un valor del lado derecho de cero. Esto es un problema porque resulta en división por cero. Podríamos resolver esto simplemente limitando Son preguntas del dedo del pie en lugar de cero, sin embargo, eso limita artificialmente lo que nuestro programa puede hacer. En cambio, pongamos aquí un cheque para que podamos resolver el problema en lugar de simplemente ocultarlo. El caso de uso que queremos tener en cuenta es la división por cero, que solo ocurre si ambas se cumplen estas dos condiciones separadas. Identificar dónde ocurre el problema es el paso uno. A continuación, tenemos que decidir cómo arreglarlo realmente. No podemos simplemente plantear una excepción después de todo, eso no es en realidad un arreglo. Podríamos agregar uno al lado derecho, pero eso introduce una ligera preferencia por preguntas donde el lado derecho es uno. Podríamos volver a ollar el número por completo, y esta es en realidad la mejor respuesta. El único problema con la versión que estás viendo ahora es que todavía hay una posibilidad después de que este nuevo si se hace, que volvamos a conseguir cero. Para evitar que eso suceda reemplazará el if con un bucle while usando la misma condición. Ahora podemos garantizar que RHS tendrá un valor seguro. Impresionante para verificar que ese es el caso. Añadamos un comprobado nuestro bucle de salida para la división potencial por cero. En lugar de hacer un chequeo visual. También podría hacer uso de los valores devueltos, omitiéndolos en nuestro método de cálculo anterior. Contestar. Si no pasa nada cuando calcular respuesta usa nuestros valores, sabes que deben estar seguros. Ah, beneficio
extra de chequear así es que podemos ver nuestros dos métodos interactuando antes dar la tarea. Recapitulemos rápidamente línea por línea. Aquí tenemos nuestra colección de operadores conocidos en esta versión, una cadena simple. Aquí generamos un índice aleatorio que se puede utilizar de forma segura en la cadena antes mencionada. A continuación, combinamos las dos líneas anteriores y recuperamos el valor final de los operadores. Estas dos líneas solo están generando inter jizz aleatorio para su uso como los componentes numéricos de nuestras dos preguntas. Aquí tenemos el bucle que comprueba y previene la división por cero preguntas regenerando el número del lado derecho. Y finalmente regresamos todo lo que generamos hasta el momento. Listo para consumo externo. De acuerdo, hora
de la tarea. Te darás cuenta. Aquí hay muchos números codificados duros. Esto significa que sólo se puede generar un rango muy limitado de preguntas. Quiero que agregues dos nuevos argumentos de límite inferior y arriba sobre eso. Permita que quien llame a nuestro método especifique un conjunto alternativo de límites. Por ejemplo, es posible que tengas algunos estudiantes que necesiten aprender sobre los números negativos. Tener un límite inferior y superior menos 10 a 10 en lugar de 0 a 10 les permitiría
hacer justamente eso. Recuerda, hay al menos tres líneas diferentes donde necesitarían
usarse estos nuevos y aseados argumentos . El siguiente trozo de tarea es un poco más complicado. Quiero que permitas a operadores de múltiples caracteres como Log o el poder de doble estrella de Pathan de operador. Mi mano para este es que la cadena de operadores actuales quizá debería ser una colección
herbal de índice diferente . Sé que la demo hacia el final a la parte sobre cómo mostrar y probar la salida se hizo un poco rápido, pero eso fue por una buena razón. Yo lo juro. En primer lugar, no
fue realmente el foco de esta lección. El foco estaba destinado a ser cómo generar de manera confiable preguntas seguras para usar al azar. Pero lo que es más importante, casi toda esa lógica va a estar presente en el siguiente video cuando traigamos todo lo que hemos hecho hasta ahora juntos para crear el bucle principal del juego. Por lo que eso significa que aún están por venir las explicaciones más detalladas. De esta lección se dan dos comidas principales. Cómo utilizar el método aleatorio para generar números aleatorios y seleccionar operadores al azar, y cómo usar bucles para evitar que los valores indeseables se arrastren y causen problemas más adelante. No olvides, si estás atascado con algo, deja un comentario o manda un mensaje, y haré todo lo posible para ayudarte a verte la próxima vez
5. El bucle de juego: una parada ligeramente diferente a la habitual en esta ocasión, ya que estamos a punto de escribir el bucle principal del juego, no
tenemos que crear un método dedicado para ello como lo haríamos normalmente, aunque mucho de los más grandes se pueden extraer método de ayuda del dedo del pie para la tarea si que quieras. En lugar de preocuparse por los tipos de argumento y retorno y fundir lógica específica del método , enfoque
bien tomado más parecido a preguntar repetidamente, ¿Qué querría hacer o ver a continuación? Si yo fuera el jugador, lo primero que me gustaría es un jugador es una pregunta que se me muestre para mostrar pregunta, tenemos que generar uno primero aquí. Invocamos generar pregunta a partir de la última lección y el almacenamiento resulta en una variable de pregunta para su uso posterior. Ahora tenemos una pregunta que necesita ser mostrada al usuario. Ah, declaración de
impresión con algún formato de cadena para hacer las cosas bonitas y bonitas es lo suficientemente bueno por ahora. Cuando estábamos en esto, vemos la pregunta mostrada prolijamente. Agradable. Ahora pregúntate otra vez, ¿Qué querría hacer o ver a continuación? Si fuera jugador, diría que lo siguiente es que me dejes contestar tu pregunta por esto. El método de entrada es la única opción real para un programa cónsul. Ahora hemos dado la pregunta del jugador y restaurando su respuesta. Aquí una tangente rápida. Observe que ambos mostramos la pregunta y luego solicitamos al usuario una segunda vez su entrada. Esto se ve torpe. ¿ No podemos combinar ambas cosas en remolque? Uno. Y la respuesta es absolutamente y deberías. Entonces para hacer eso, podemos simplemente cortar la cadena de preguntas pegada en la llamada de entrada. Y luego cuando lo ejecutamos Voila, Anita experiencia de usuario sin peticiones de entrada repetidas. El siguiente paso en un juego como este sería dar al jugador comentarios sobre si tenía razón o no dar esa retroalimentación. Necesitamos dos cosas que aún no tenemos. Necesitamos saber la respuesta correcta, y necesitamos un medio para comparar la respuesta correcta con los jugadores. Contestar. cual ya tenemos del paso anterior. Tiempo para llamar a nuestro otro método de ayuda calcular. Contestar. Tenemos la respuesta correcta aquí en esta variable. Entonces ahora necesitamos un medio para comparar los dos tipos diferentes de respuestas. Empecemos con el enfoque ingenuo de comparar directamente los dos cuando estábamos cuando ejecutamos esto a pesar de dar una respuesta correcta, dice
que nos equivocamos. ¿ Por qué haría eso? En realidad, la respuesta es bastante simple. La entrada está devolviendo una cadena, pero calcular la respuesta está devolviendo un número. Entonces, aunque los dos valores se vean similares, como puedes ver aquí, son muy diferentes a los ojos de tu computadora. Si le costamos el lado de esta comparación a una cuerda, repente volvemos. Es cierto que podemos usar la misma técnica de casting en nuestra comparación anterior, y ahora cuando ponemos una respuesta correcta, nos dicen mucho. Todavía hay un ligero problema con esta sencilla comparación. ¿ Qué pasa cuando le das a la pregunta del usuario como nueve dividida por siete? ¿ Qué tan preciso tiene que ser un jugador? Por ser una pregunta como esta está un poco más allá, el alcance de este sencillo proyecto implementará una solución al final del video. De esa manera, aquellos de ustedes que quieran probar y elaborar una solución para ustedes contrites su tarea y aquellos de ustedes que solo quieren ver una respuesta no se quedarán con 1/2 proyecto de trabajo por ahora. Cuando el jugador se equivoca, podríamos hacer un punto de mostrarles la respuesta correcta completa. De esa manera hay menos saber si se trata de un tema de precisión o si en realidad estaban equivocados de vuelta al juego principal, ¿qué querría ver la jugada a continuación? Bueno, una sola pregunta no es muy divertida. Entonces si estuviera jugando, me gustaría ver otra pregunta. Este es probablemente el paso más fácil de todos. Acabamos de envolver todo lo que hemos hecho hasta ahora en un bucle por ahora lo demostraremos, usando solo a ella oraciones. Y es hacer más de una pregunta. Entonces está funcionando. Lo final que me gustaría ver es mi puntaje. Para eso, necesitaremos dos cosas. ¿ Cuántas preguntas hubo en total? ¿ Y cuántos de esos conseguí? Correcto. Las preguntas totales son fáciles de agregar a lo que ya tenemos. Simplemente agregamos una constante al principio y nos aseguramos de que se utilice por el bucle para determinar cuántas preguntas hacen. Noté que si cambiamos nuestra nueva variable, el número total de preguntas hechas cambia para que coincida con la segunda pieza de información para mostrar la puntuación. ¿ Cuántas veces fue para jugar correcto? Requiere cebolla, un
poco más de esfuerzo para comenzar con el uso. No tiene respuestas correctas, por lo que agregamos una variable de cero duda en la parte superior. Entonces solo hay una vez que cambia este valor, y eso está aquí. I e. Cuando las dos tías se emparejan con esas dos piezas de información, podemos escribir una línea de impresión como ésta donde le mostramos al usuario su escuela cruda. Y entonces también podemos sumar un porcentaje al final para que no tengan que resolverlo por sí mismos. Y eso es todo. Bueno, casi. Añadamos el método más flexible de comparar respuestas que prometí hace poco . Voy a acelerar esta sección para que no tengas que ver todo siendo escrito. Mientras tanto, una rápida explicación. Si restamos una respuesta de la otra, independientemente de cuál sea más grande o correcta, para
luego hacer positivo el resultado. Tenemos la diferencia absoluta entre esos dos números, pero ¿cómo sabemos cuando esa diferencia es demasiado grande? Bueno, teníamos un término de tolerancia y comparativo. Es que aquí algunas salidas demo para demostrar que está funcionando como se esperaba. Observe cómo el pedido no importa. El 1er 2 son demasiado diferentes entre sí para ser considerado correcto, y el segundo para estar justo dentro de ese rango de tolerancia. Por lo que regresaron verdaderos. Observe cómo también podemos cambiar la tolerancia, y de repente se requiere mucha más o menos precisión. Con esa ayuda un método hecho. Sólo tenemos que reemplazar la vieja comparación. Vamos a ejecutarlo con nuestros nuevos cambios y dárselo a cerrar deliberadamente pero no del todo la
respuesta correcta . Y ahí está, un juego de preguntas más tolerante. Entonces la hora de la tarea. Empecemos con las cosas simples. En primer lugar, quiero que cambies el programa para que el usuario pueda elegir cuántas preguntas quieren
contestar al principio, o darles la opción de salir temprano para que su único anotó en lo que han hecho hasta ahora o hacer ambas cosas. Si de verdad quieres. Y para aquellos de ustedes que están comiendo más de un reto,
pueden tratar de cambiar este bucle de juego para que en lugar de un juego de cónsul, tengan un juego pegajoso puedan usar TK Enter o cualquier otro módulo u I que les guste no se sientan mal por no haciendo éste. No obstante. Yo personalmente no te disfruto. Trabajo en python en absoluto. Y eso es, Ah, juego de preguntas matemáticas
totalmente funcional escrito desde cero y pitón que literalmente podrías usar para probar conocimiento aritmético de cualquier persona.
6. Resumen y comentarios: Entonces ahora que el programa está hecho, revisemos rápidamente las principales estructuras del proyecto. Nuestro juego puede resolver preguntas de matemáticas usando calcular, responder. Generar preguntas aleatorias usando Generar Pregunta el lado de un determinado arterias
lo suficientemente preciso , utilizando el método es lo suficientemente preciso y mezclar todo lo anterior en un solo bucle de juego con interacciones
riel jugador. Podrás presentar tus propias versiones del juego como proyecto de curso. Cuéntanos qué cambios hiciste y por qué, o cómo te acercas a las diferentes preguntas de la tarea. Si realmente conoces tus cosas,
ten una buena haciendo que todo el proyecto esté más orientado a objetos o simplemente por diversión. Juega una ronda de golf de código y trata de encoger el proyecto en el menor número de líneas posible. Gracias por ver. Esperamos que hayan disfrutado de este muchos proteger. Con eso en mente, constantemente
estamos tratando de mejorar nuestros cursos para que sus comentarios sean inestimables. Por favor siéntete libre de dejar comentarios o enviar mensajes sobre lo que te gustó en lo que crees que hicimos mejor. Por ejemplo, ¿
debo ir más rápido o más lento? ¿ Te gustaría explicaciones más o menos detalladas? ¿ Fue el proyecto a simple etcétera? También nos interesa saber qué tipo de muchos proyectos te gustaría ver a continuación y hasta la próxima vez, seguir codificando