Professional Documents
Culture Documents
Cada vez que se empieza un partido, el programa debe "eligir" un nmero de cuatro
cifras (sin cifras repetidas), que ser el cdigo que el jugador debe adivinar en la menor
cantidad de intentos posibles. Cada intento consiste en una propuesta de un cdigo
posible que tipea el jugador, y una respuesta del programa. Las respuestas le darn
pistas al jugador para que pueda deducir el cdigo.
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Estas pistas indican cun cerca estuvo el nmero propuesto de la solucin a travs de
dos valores: la cantidad de aciertos es la cantidad de dgitos que propuso el jugador que
tambin estn en el cdigo en la misma posicin. La cantidad de coincidencias es la
cantidad de digitos que propuso el jugador que tambin estn en el cdigo pero en una
posicin distinta.
2. Especificacin:
2. Diseo:
Lo primero que tenemos que hacer es indicarle al programa que tiene que "elegir" un
nmero de cuatro cifras al azar. Esto lo hacemos a travs del mdulo random . Este
mdulo provee funciones para hacer elecciones aleatorias.
La funcin del mdulo que vamos a usar se llama choice . Esta funcin devuelve un
elemento al azar de una n-upla, y toma como parmetro la n-upla de la que tiene que
elegir. Vamos a usarla entonces para elegir cifras. Para eso tenemos que construir una
n-upla que tenga todas las cifras, lo hacemos de la misma manera que en la parte 3.6:
digitos = ('0','1','2','3','4','5','6','7','8','9')
Como estn entre comillas, los dgitos son tratados como cadenas de caracteres de
longitud uno. Sin las comillas, habran sido considerados nmeros enteros. En este caso
elegi-mos verlos como cadenas de caracteres porque lo que nos interesa hacer con ellos
no son cuentas sino comparaciones, concatenaciones, contar cuntas veces aparece o
donde est en una cadena de mayor longitud, es decir, las operaciones que se aplican a
cadenas de texto. Entonces que sean variables de tipo cadena de caracteres es lo que
mejor se adapta a nuestro problema.
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Ahora tenemos que generar el nmero al azar, asegurndonos de que no haya cifras
repetidas. Esto lo podemos modelar as:
Una vez elegido el nmero, hay que interactuar con el usuario y pedirle su primera
propuesta. Si el nmero no coincide con el cdigo, hay que buscar la cantidad de
aciertos y de coincidencias y repetir el pedido de propuestas, hasta que el jugador
adivine el cdigo.
# ARCHIVO: [mastermind.py]
# "elegimos" el codigo
codigo = ''
for i in range(4):
candidato = random.choice(digitos)
# vamos eligiendo digitos no repetidos*
while candidato in codigo:
candidato = random.choice(digitos)
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
codigo = codigo + candidato
TRUCO
Cuando lo que queremos escribir es demasiado largo como para una sola lnea que
entre cmodamente en el editor o en el campo visual, le indicamos al intrprete que
queremos seguir en la siguiente lnea por medio de la barra invertida (como al final
anterior que empieza por "Tu propuesta ...).
Podemos ver que para este caso el programa parece haberse comportado bien. Pero
cmo podemos saber que el cdigo final era realmente el que eligi originalmente el
programa? O qu habra pasado si no encontrbamos la solucin?
Para probar estas cosas recurrimos a la depuracin del programa. Una forma de hacerlo
es simplemente agregar algunas lneas en el cdigo que nos informen lo que est
sucediendo que no podemos ver. Por ejemplo, los nmeros que va eligiendo al azar y el
cdigo que queda al final. As podremos verificar si las respuestas son correctas a
medida que las hacemos y podremos elegir mejor las propuestas enlas pruebas.
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
# "elegimos" el codigo
codigo = ''
for i in range(4):
candidato = random.choice(digitos)
# vamos eligiendo digitos no repetidos
while candidato in codigo:
print 'DEBUG: candidato =', candidato
candidato = random.choice(digitos)
codigo = codigo + candidato
print 'DEBUG: el codigo va siendo =', codigo
De esta manera podemos monitorear cmo se va formando el cdigo que hay que
adivinar, y los candidatos que van apareciendo pero se rechazan por estar repetidos:
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Bienvenido/a al Mastermind!
Tienes que adivinar un numero de 4 cifras distintas
Que codigo propones?:
Una forma de evitar esto es fijar la cantidad de cifras en una variable y cambiarla slo
ah:
# "elegimos" el codigo
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
cant_digitos = 5
codigo = ''
for i in range(cant_digitos):
candidato = random.choice(digitos)
# vamos eligiendo digitos no repetidos
Con 5 dgitos, el juego se pone ms difcil. Nos damos cuenta que si el jugador no logra
adivinar el cdigo, el programa no termina: se queda preguntando cdigos y
respondiendo aciertos y coincidencias para siempre. Entonces queremos darle al
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
usuario la posibilidad de rendirse y saber cul era la respuesta y terminar el programa.
Para esto agregamos en el ciclo while principal una condicin extra: para seguir
pregun-tando, la propuesta tiene que ser distinta al cdigo pero adems tiene que ser
distinta del texto "Me doy" .
Entonces, ahora no slamente sale del while si acierta el cdigo, sino adems si se rinde
y quiere saber cul era el cdigo. Entonces afuera del while tenemos que separar las dos
posibilidades, y dar distintos mensajes:
# ARCHIVO: mastermind5.py
# "elegimos" el codigo
cant_digitos = 5
codigo = ''
for i in range(cant_digitos):
candidato = random.choice(digitos)
# vamos eligiendo digitos no repetidos
while candidato in codigo:
candidato = random.choice(digitos)
codigo = codigo + candidato
Anterior Siguiente
6.4. Procesamiento sencillo de cadenas 6.6. Ejercicios
Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano,
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano,
Nicols Paez. La copia y redistribucin de esta pgina se permite bajo los trminos de la licencia Creative
Commons Atribucin - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.
INDICE DE CONTENIDOS
1. Algunos conceptos bsicos
2. Programas sencillos
3. Funciones
4. Decisiones
5. Ms sobre ciclos
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
6.5. Nuestro primer juego
6.6. Ejercicios
6.7. Resumen
6.8. Ejercicios
7. Tuplas y listas
8. Algoritmos de bsqueda
9. Diccionarios
14. Objetos
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
3.757
2006-2017 LibrosWeb.es Contacto Novedades Condiciones Privacidad
das online
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com