Foros del Web » Programando para Internet » Python »

Advinar un número

Estas en el tema de Advinar un número en el foro de Python en Foros del Web. Buenas, la duda que tengo es fruto del cansancio, estoy seguro. Os comento: La función es muy sencilla, genera un random dentro de una lista ...
  #1 (permalink)  
Antiguo 04/03/2013, 04:13
 
Fecha de Ingreso: marzo-2013
Mensajes: 2
Antigüedad: 11 años, 1 mes
Puntos: 0
Advinar un número

Buenas, la duda que tengo es fruto del cansancio, estoy seguro. Os comento:

La función es muy sencilla, genera un random dentro de una lista y elige un número al azar. El jugador/usuario debe encontrar ese número con la ayuda que le da el programa al decirle si es: mayor, o menor que el introducido.

Mi problema radica en la imposibilidad de comparar mi raw_input con el elemento escogido. Ya que al meterlo en el bucle... se queda ahí de forma permanente. Os muestro mi código:

Código:
def x():

    lista=[]
    for i in range(0,101):
        lista.append ([i])

    from random import choice
    
    x=choice(lista)

    #print x
    
    y=raw_input()

    lista=[]

    lista.append(int(y))

    if (x==lista):
        print 'Has acertado'
    else:
        while (x!=lista):
            if (x<lista):
                result='El número es menor'
            else:
                if(x>lista):
                    result='El número es mayor'
    print result
A ver si alguien me saca de mi ignorancia.
Un saludo.
  #2 (permalink)  
Antiguo 04/03/2013, 07:14
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Advinar un número

Permíteme darte algunos consejos:

* Los import van al principio, para tener claro qué módulos está usando tu programa. Tal y como lo usás ahora el import se hace en cada ejecución de la función.
* lista = range(0, 100) es equivalente a tu for (range genera una lista)
* Deberías controlar los límites de y, de lo contrario el usuario podría ingresar "200", por ejemplo, que no está en tu lista.
* El uso de choice() es correcto, pero si no lo hacés en dentro del while, la condición es invariante (siempre el mismo x contra la misma lista, dará siempre el mismo resultado)
* Creás la lista al iniciar la función, y luego la destruís y la redefinís inmediatamente luego de la asignación de y. ¿para qué?
* x es un elemento de la lista, por lo que x == lista es SIEMPRE falso (entero != lista). Creo que lo que querías hacer es x == y
* x == y tal y como están definidas ambas variables es siempre falso, ya que x es un entero e y es una cadena (devuelta por raw_input)
* raw_input no existe en Python 3, ten esto en cuenta para el futuro


Saludos.
  #3 (permalink)  
Antiguo 08/03/2013, 04:59
 
Fecha de Ingreso: marzo-2013
Mensajes: 2
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Advinar un número

Muchas gracias por tu ayuda! Al final me ha quedo así:

Código PHP:
def ad():
    
from random import choice
    intentos
=0
    
print 'Se trata de advinar un número entre el 0 y el 50'

#Elegimos el número que tendrán que adivinar

    
lista=[]
    
lista=range(0,50)
    
x=choice(lista)
    
#print x

#Pedimos el número al jugador    

    
y=int(raw_input())

#Realizamos el bucle del juego

    
while(x!=y):
        
intentos=intentos+1
        y
=int(raw_input())
        if(
x<y):
            print 
'El número buscado es menor'
        
if(x>y):
            print 
'El número buscado es mayor'
        
if(x==y):
            break
    if(
x==y):
        print 
'Has acertado realizando un total de:',intentos,'intentos' 
Ahora mi único problema, es que al ejecutar tengo que meter dos veces el int. Pero claro, si elimino la definición de y previa al bucle, este no funcionará pues estamos haciendo referencia a algo que no está definido aun.

Un saludo.
  #4 (permalink)  
Antiguo 08/03/2013, 08:05
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Advinar un número

Ya que estás definiendo x antes de entrar al while, una forma de evitarte pedir el primer y antes es hacer algo como

Código Python:
Ver original
  1. y = 50 # no está en la lista range(0,50) por lo tanto x no puede ser 50
  2. while (x != y):
  3.     y=int(raw_input())
  4.     ...
  #5 (permalink)  
Antiguo 08/03/2013, 15:12
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 11 meses
Puntos: 49
Respuesta: Advinar un número

Podrías ahorrarte el uso de lista con:

Código:
x=random.choice(range(0,50))
Saluditos!. ...
  #6 (permalink)  
Antiguo 11/03/2013, 07:56
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Advinar un número

Cita:
Iniciado por leosansan Ver Mensaje
Podrías ahorrarte el uso de lista con:

Código:
x=random.choice(range(0,50))
Si bien es cierto, la verdad es que es equivalente, lo único que ahorras es la declaración de la variable. En estos casos es donde uno tiene que juzgar si importa más lo corto del código o la facilidad de su lectura.


Saludos.
  #7 (permalink)  
Antiguo 12/03/2013, 18:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Advinar un número

De hecho puedes ahorrarte el range.

Código Python:
Ver original
  1. from random import randint
  2. print randint(0, 50)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.