Reto: Booleanos
Generar aletoriamente un número del 100.000 al 200.000. Si ese número tiene un tres pierdes la partida y si carece de treses entonces has tenido éxito en el juego.
Veamos varias soluciones al juego planteado, unas usan variables booleanas y otras no, unas usan funciones y otras no, unas usan un bucle para recorrer todos los caracteres del número aleatorio y otras no. Con esta casuística de soluciones podemos aprender bastante acerda de este tipo de casos. El ejemplo es muy parecido a la programación que necesitaríamos para determinar si un número es primo o no. En ese caso la idea es suponer que de entrada el número analizado si es primo y hasta que no se encuentre alguno de los anteriores que haga que al dividir entre él de división exacta no podremos descartarlo. Por tanto, será necesario buscar si hay división exacta recorriendo unos cuantos valores previos. Y hasta que no podamos descartar que ninguno de los números previos no da división exacta no podremos afirmar que el número candidato es primo. Aquí sucede lo mismo, hasta que no se analizan los seis dígitos que componen el número aleatorio del juego, no se podrá afirmar que hemos ganado. Solo cuando hemos descartado que todos ellos son distintos de tres entonces es cuando podemos afirmar que hemos ganado.
Método 1
Vamos a jugar a 'me quiere' y 'no me quiere' como si estuviéramos desojando una margarita. Tendremos éxito cuando el número aleatorio entre cien mil y docientos mil no tenga ninguna cifra igual a tres. Si aparece algún tres entonces habremos fracasado en el juego.Creamos una variable booleana que inicialmente tendrá el valor
True
. Nos metemos en un condicional if
que analiza si existe algún tres en el número aleatorio. Trabajamos con cadenas alfanuméricas para que nos funcione in
que busca en el string para ver si localiza algún tres. Si se cumple la condición de que ha encontrado un tres entonces la variable booleana meQuiere
se torna en False
.Finalmente nos metemos en otro condicional
if
que analiza el valor de la variable booleana. Observe que no es necesario poner meQuiere==True
, sino que para ver si esta variable es verdadera simplemente se pone la variable booleana ya que en si misma ya nos dirá si es True
o False
.import random
x=str(random.randint(100000,200000))
print(x)
meQuiere=True #inicialmente me quiere
if str(3) in x:
meQuiere=False
if meQuiere:
print('Me quiere')
else:
print('No me quiere')
Método 2
Generamos el número aleatorio y lo convertimos en un string. Inicializamos la variable booleanapremio
como True
. Nos metemos en un bucle for
que recorre todos los caracteres del número. Si alguno de los caracteres es igual a tres entonces la variable booleana se convierte en False y con break
detenemos el bucle.Al final nos encontramos con otro condicional
if
que analiza la variable booleana premio
. Si es verdadera imprime que hemos ganado y si es falsa entonces habremos perdido.import random
x=str(random.randint(100000,200000))
print(x)
premio=True #inicializamos la variable booleana como verdadera
for i in x:
if int(i)==3:
premio=False
break
if premio:
print('Has ganado. BIEN!!!!!!')
else:
print('Has perdido porque ha salido un 3')
Método 3
Los métodos 3, 4 y 5 solo se diferencian en la funciónganare
.Disponemos de dos funciones. La función principal se lanza llamándola con la expresión
jugar()
. Esta primera función no lleva argumentos, por eso dentro de los paréntesis no se escribe nada, pero es necesario ponerlos. Lo primero que hace la función jugar es generar un número aleatorio y convertirlo en string. Dentro de la función nos encontramos con un condicional if
que usa como condición una llamada a la otra función que se llama ganare
y la pasa un argumento que es el número aleatorio generado en forma de cadena alfanumérica. La función ganare
analiza el número entregado y si contiene un tres devuleve False
y si no es así devuelve True
. Este retorno hace que el condicional de la función jugar
actúe de forma que si el resultado es True
imprimirá que hemos ganado el juego y en caso contrario nos dice que hemos perdido.La función
ganare
analiza si el argumento en forma de cadena contiene un tres.import random
#Funcion que retorna True cuando no hay ningún tres
def ganare(x):
for i in x:
if int(i)==3:
return False
return True
def jugar():
x=str(random.randint(100000,200000))
if ganare(x):
print(x,' He ganado. BIEN!!!!!!')
else:
print(x,' He perdido porque ha salido un 3 :(')
jugar()
Método 4
Los métodos 3, 4 y 5 solo se diferencian en la funciónganare
.En este método la función
ganare
no tiene un for
que recorra todos los caracteres buscando un tres. Directamente lo que hacemos es meternos en un condicional if
que pregunta si un tres como string está en x
, si la respuesta es positiva retorna un False
y en caso contrario retorna un True
. Observe que ni siquiera hemos usado else
.import random
def ganare(x):
if str(3) in x:
return False
return True
def jugar():
x=str(random.randint(100000,200000))
if ganare(x):
print(x,' He ganado. BIEN!!!!!!')
else:
print(x,' He perdido porque ha salido un 3 :(')
jugar()
Método 5
Los métodos 3, 4 y 5 solo se diferencian en la funciónganare
.Aquí si usamos una variable booleana en la función
ganare
. La variable se llama premio
y la inicializamos en True
. Si el tres como string se encuentra en el número x
entonces la variable booleana se torna en False
. Al final la función devuelve el valor que contenga en ese momomento la variable booleana.import random
#Funcion que retorna True cuando no hay tres
def ganare(x):
premio=True
if str(3) in x:
premio=False
return premio
def jugar():
x=str(random.randint(100000,200000))
if ganare(x):
print(x,' He ganado. BIEN!!!!!!')
else:
print(x,' He perdido porque ha salido un 3 :(')
jugar()
Método 6
En este caso no trabajamos con funciones. Generamos el número aleatorio lo trasnformamos en una cadena alfanumérica. Nos metemos en un buclefor
que recorre todos los caracteres. Dentro del bucle tenemos un condicional if
que pregunta si el caracter analizado es un tres. En caso afirmativo imprime que hemos perdido y con un break
termina el bucle for
. En caso contrario se imprime que hemos ganado. Lo sorprendente es la indentación de else
, ya que no es la que cabría esperar a la misma altura que el if
. Como vemos else
está al nivel del for
, y funciona. Pero no podría ser de otra forma ya que si la ponemos a la altura del if
cada ver que el dígito analizado no fuera un tres nos diría que hemos ganado.import random
x=str(random.randint(100000,200000))
for i in x:
if int(i) == 3:
print(x,' He perdido porque ha salido un 3.')
break
else:
print(x,' He ganado. Fiesta!!!')
Método 7
Este método proporciona una solución con pocas líneas de código. Generamos el número aleatorio como un string. Nos metemos en unif
que se cuestiona sobre si existe algún tres. En caso afirmativo imprime que hemos ganado y en caso contrario hemos perdido. Una solución rápida y sencilla.import random
x=str(random.randint(100000,200000))
if '3' in x:
print(x,'Has perdido')
else:
print(x,'Has ganado. Felicidades!!!')
Método 8
Definimos la variabletexto
que inicializamos con la frase 'Has ganado, porque no ha salido ningún tres.'Nos metemos en un bucle
for
que recorre las seis posiciones del número aleatorio generado. Dentro del bucle tenemos un condicional que detecta si alguno de los dígitos es un tres. En caso afirmativo se reescribe la frase de la variable texto
informando que ha perdido. De esta forma si no se encuentra ningún tres la frase no se reescribe y se anuncia que se ha ganado.import random
x=str(random.randint(100000,200000))
texto='Has ganado, porque no ha salido ningún tres.'
for i in x:
if i=='3':
texto='Lo siento. Has perdido porque ha salido un tres.'
print(x,texto)
Es un caso de probabilidad, que dará el mismo resultado de esta forma:
ResponderEliminarimport random
print('Lose'if random.randint(0,100000)<40951 else'Win')