Durante esta actividad, los alumnos serán capaces de:
Competencias | Subcompetencias | Criterio |
---|---|---|
SING0300:
Solución de problemas |
SING0301A:
Evaluación del problema |
|
SING0303A:
Implementación de acciones |
|
|
SING0400:
Compromiso con la sustentabilidad |
SING0401A:
Aplicación de estándares y normas |
|
SEG0700:
Transformación digital |
SEG0702A:
Tecnologías de vanguardia |
|
Patricio Ávila, en su artículo de junio de 2018 titulado “Qué le depara a México la prueba PISA 2018” de la revista El mundo de la educación, señala lo siguiente:
Esta es a la situación a la que nos hemos enfrentado en México cada tres años por un largo tiempo: “un mal desempeño de nuestros estudiantes”. Hay muchos factores que dan lugar a este tipo de resultados, pero ¿y nosotros como alumnos y profesores qué estamos haciendo para mejorar esta situación? ¿qué podríamos hacer?
Para este proyecto se te pedirá elaborar un juego para niños que les permita desarrollar o mejorar sus habilidades cognitivas.
El programa de Toros y vacas (en inglés: Bulls and Cows) comienza seleccionando al azar un código secreto de cuatro dígitos distintos. El jugador tiene que adivinarlo en la menor cantidad de intentos. No hay límite en cuanto al número de intentos.
Después de cada intento el programa debe indicar cuántos toros y cuántas vacas obtuvo el jugador:
Un toro indica que uno de los dígitos ingresados coincide exactamente con el valor y la posición de uno de los dígitos en el código secreto.
Una vaca indica que uno de los dígitos ingresados coincide con el valor de uno de los dígitos en el código secreto, pero que se encuentra en una posición incorrecta.
Por ejemplo:
— Código secreto: | 2435 |
— Intento del jugador: | 1234 |
— Resultado: | Un toro y dos vacas (el toro es el 3 y las vacas son 2 y 4 ). |
El juego termina cuando el jugador obtenga cuatro toros, es decir, cuando haya descubierto todos los dígitos y posiciones correctas del código secreto.
El programa debe estar escrito en el lenguaje Python 3 y debe implementar puntualmente todas las reglas del juego de Toros y vacas tal y como están descritas arriba.
Todo el código del programa debe estar compuesto de una serie de funciones contenidas en un solo archivo fuente llamado toros_y_vacas.py
.
En la parte superior del archivo se debe incluir un comentario similar al siguiente, reemplazando los datos ficticios con los datos personales (matrícula y nombre) del autor del programa:
# ------------------------------------------------------------ # Autor: A01166611 Pepper Pots # 22 de octubre, 2019. # # TOROS Y VACAS # ============= # Descripción del proyecto. # ------------------------------------------------------------ . . (El resto del programa va aquí) .
Todas las funciones del programa deben incluir al inicio una cadena de documentación que describa brevemente el comportamiento de la función seguido, cuando sea apropiado, de uno o varios casos de prueba. Por ejemplo:
def imprime_titulo(): """Despliega el nombre y autor de la aplicación. >>> imprime_titulo() T O R O S Y V A C A S ========================= © 2019 por Pepper Pots """ print('T O R O S Y V A C A S') print('=========================') print('\N{Copyright Sign} 2019 por Pepper Pots')
Al iniciar la ejecución del programa se debe desplegar el título de la aplicación (nombre del programa y autor) y se le debe ofrecer al jugador la opción de ver las instrucciones del juego.
El programa debe indicar en qué número de intento va el juego cada vez que se solicite el ingreso del código del jugador.
Si durante un intento el jugador ingresa como código una entrada inválida (una cadena que contenga caracteres que no sean dígitos, o que el número de dígitos sea distinto a cuatro, o que existan dígitos repetidos) el programa debe desplegar un mensaje de error y solicitar una nueva entrada. Una entrada inválida no incrementa el contador de número de intentos.
Durante cualquier intento, en lugar de ingresar un código el jugador debe tener la opción de teclear la letra “X” para indicar que se rinde y que desea terminar el juego en ese momento. Si eso ocurre, el juego concluye desplegando cuál era el código secreto.
Cuando el jugador obtenga cuatro toros, el juego termina felicitando al jugador e informándole en cuántos turnos logró adivinar el código secreto.
Al concluir un juego, ya sea porque el jugador ganó o porque se rindió, el programa debe preguntarle al usuario si desea jugar otra vez. En caso afirmativo se debe iniciar un nuevo juego. De lo contrario el programa debe terminar.
Las entradas del usuario que requieran caracteres alfabéticos deben considerarse sin hacer distinción entre mayúsculas y minúsculas.
La información desplegada respecto al número de intentos, toros y vacas debe estar correctamente pluralizada. Por ejemplo, el programa debe decir “Lo lograste en 1 intento”, en lugar de “Lo lograste en 1 intentos”.
Todo el código debe apegarse a las convenciones de codificación del lenguaje Python.
A continuación se proporciona un ejemplo de una corrida completa del programa (la entrada del usuario está en azul):
T O R O S Y V A C A S ========================= © 2019 por Pepper Pots ¿Deseas ver las instrucciones? (S/N): s INSTRUCCIONES El programa seleccionará un código secreto de cuatro dígitos distintos y tú tienes que adivinar cuál es en la menor cantidad de intentos. No hay límite en cuanto al número de intentos. Después de cada uno de tus intentos el programa te dirá cuántos "toros" y cuántas "vacas" obtuviste: - Un "toro" indica que uno de los dígitos que ingresaste coincide exactamente con el valor y la posición de uno de los dígitos en el código secreto. - Una "vaca" indica que uno de los dígitos que ingresaste coincide con el valor de uno de los dígitos en el código secreto, pero que está en una posición incorrecta. El juego termina cuando obtengas cuatro "toros", es decir, cuando hayas descubierto todos los dígitos y posiciones correctas del código secreto. ==== Intento #1 ==== Ingresa un código (X para rendirte): 1234 Obtuviste 0 toros y 1 vaca. ==== Intento #2 ==== Ingresa un código (X para rendirte): 2345 Obtuviste 0 toros y 1 vaca. ==== Intento #3 ==== Ingresa un código (X para rendirte): 3456 Obtuviste 2 toros y 0 vacas. ==== Intento #4 ==== Ingresa un código (X para rendirte): 3578 Obtuviste 0 toros y 2 vacas. ==== Intento #5 ==== Ingresa un código (X para rendirte): 0459 Obtuviste 1 toro y 0 vacas. ==== Intento #6 ==== Ingresa un código (X para rendirte): 1406 Obtuviste 2 toros y 0 vacas. ==== Intento #7 ==== Ingresa un código (X para rendirte): 8476 Obtuviste 2 toros y 2 vacas. ==== Intento #8 ==== Ingresa un código (X para rendirte): 7486 Obtuviste 4 toros y 0 vacas. ¡Felicidades! Lo lograste en 8 intentos. ¿Deseas volver a jugar? (S/N): s ==== Intento #1 ==== Ingresa un código (X para rendirte): 1234 Obtuviste 0 toros y 1 vaca. ==== Intento #2 ==== Ingresa un código (X para rendirte): 12345 Debes ingresar exactamente cuatro dígitos distintos. ==== Intento #2 ==== Ingresa un código (X para rendirte): 1231 Debes ingresar exactamente cuatro dígitos distintos. ==== Intento #2 ==== Ingresa un código (X para rendirte): 1111 Debes ingresar exactamente cuatro dígitos distintos. ==== Intento #2 ==== Ingresa un código (X para rendirte): me rindo Debes ingresar exactamente cuatro dígitos distintos. ==== Intento #2 ==== Ingresa un código (X para rendirte): x Te rendiste. El código secreto era: 7863 ¿Deseas volver a jugar? (S/N): s ==== Intento #1 ==== Ingresa un código (X para rendirte): 4597 Obtuviste 4 toros y 0 vacas. ¡Felicidades! Lo lograste en 1 intento. ¿Deseas volver a jugar? (S/N): n
A continuación se describen las funciones que pueden servir como base para construir el programa.
Función que imprime los títulos de la aplicación (nombre del programa y autor).
Función que imprime las instrucciones del juego si el usuario así lo desea.
"2435"
. Para ello se puede usar la función sample
del módulo random
.
Función que evalúa un intento del jugador. Recibe dos argumentos (el código secreto y el código seleccionado por el jugador) y devuelve una tupla con el número de toros y el número de vacas obtenidas. Por ejemplo, si las entradas son "2435"
y "1234"
, entonces debe devolver (1, 2)
.
Función que recibe como argumento un número entero y una cadena de caracteres con una palabra. Devuelve una cadena formada por la concatenación del número y la palabra adecuadamente pluralizada. Por ejemplo, si las entradas son 2
y "vaca"
, el valor devuelto debe ser: "2 vacas"
. Por otro lador, si las entradas son 1
y "toro"
, el valor devuelto debe ser: "1 toro"
.
Función que recibe como argumento una cadena de caracteres y devuelve True
o False
dependiendo si es o no una entrada válida del usuario. Es válida si está conformada exactamente por cuatro dígitos no repetidos. Por ejemplo, si la entrada es "1234"
devuelve True
. Por otro lado, si la entrada es "1213"
devuelve False
.
"X"
, se termina el juego y se indica cuál era el código secreto. De lo contrario, se utiliza la función del punto 6 para determinar si la entrada es válida. Si no lo es, vuelve a solicitar una nueva entrada. Cuando ya se tiene una entrada válida, se procede a evaluarla usando la función del punto 4 y se despliega el resultado utilizando la pluralización correcta con ayuda de la función del punto 5. El juego termina si el jugador obtuvo cuatro toros. En ese caso se le felicita y se muestra en cuántos intentos lo logró (pluralizado correctamente con la ayuda de la función del punto 5).
Función principal del programa. Despliega los títulos y posiblemente las instrucciones del juego haciendo uso de las funciones de los puntos 1 y 2. Posteriormente, se invoca la función del punto 7. Al concluir cada juego se le pregunta al usuario si desea volver a jugar. En caso afirmativo se vuelve a invocar la función del punto 7. En caso negativo el programa finaliza.
Como se indicó anteriormente, todo el código del programa debe estar en un solo archivo fuente llamado toros_y_vacas.py
.
Para entregar el archivo toros_y_vacas.py
, ingresa los siguientes datos:
Fecha límite: Martes, 22 de octubre.