Veamos, es lo siguiente:
num = 54
intento = 0
while intento != num:
intento = int(input("Adivina la cifra: "))
if intento > num:
print("Alto")
elif intento < num:
print ("Bajo")
print ("Acertaste")
Línea 3: Mientras que el intento sea diferente al num, entonces ocurrirá...
Y entonces la línea 4 define el intento. ¿¿Pero cómo va a definir después qué es el intento?? ¿No tendría que hacerlo antes? >:(
:-\ Esto de los bucles carece de la menor lógica para mí, si alguien me echa una mano se lo agradeceré infinito. Gracias, un saludo.
el while es un ciclo...
el siempre volverá a evaluar la linea 3 si su intento era erroneo... entonces pasará a la 4 para pedir el nuevo valor... si es correcto, ignorará el if y cuando salte a la linea 3 saldrá del ciclo...
No entiendo muy bien esa construcción, la verdad :-\
Tampoco entiendo por qué establece al principio que intento = 0 :huh: :huh: :huh: :huh:
Gracias por tu ayuda, un saludo.
Sería muy fácil de explicar en una pizarra... dibuja una línea imaginária desde la línea 3 hasta la 8, o imagina una pelota de ping pong que va desde la línea 3 hasta la 8 y la pelota rebota sin parar de arriba a abajo entre ese bloque de código hasta que intento séa el número correcto, aunque no es del todo así, pero si no lo entiendes de esa manera... xD
Cita de: Linton en 19 Febrero 2013, 19:37 PMTampoco entiendo por qué establece al principio que intento = 0 :huh: :huh: :huh: :huh:
Sería una mala costumbre no otorgarle un valor inicial a una variable, aunque el valor fuese "nulo", o aunque el valor no se vaya a procesar.
saludos
EDITO: mira que explicación más buena:
http://es.wikipedia.org/wiki/Whiley http://en.wikipedia.org/wiki/While
Cita de: EleKtro H@cker en 19 Febrero 2013, 19:55 PM...imagina una pelota de ping pong que va desde la línea 3 hasta la 8 y la pelota rebota sin parar de arriba a abajo entre ese bloque de código hasta que intento séa el número correcto...
Si ya sé que es un proceso cíclico :) Lo que no entiendo es el orden de la construcción.
Cita de: EleKtro H@cker en 19 Febrero 2013, 19:55 PMSería una mala costumbre no otorgarle un valor inicial a una variable
¿Por qué? Si ya se van a extraer diferentes valores del input :huh: Eso no tiene lógica.
Gracias por la ayuda, un saludo.
Cita de: Linton en 19 Febrero 2013, 20:36 PM¿Por qué? Si ya se van a extraer diferentes valores del input :huh: Eso no tiene lógica.
- para hacer más entendible la lectura de un código, por ejemplo.
- para que una una variable no de error por no tener un valor definido (algo que se ve mucho en Batch por ejemplo)
No se me ocurre más ahora mismo
saludos!
¿Y por qué no se hace así?
edad = int(input("Escribe tu edad: "))
while edad < 18 #lo que sea
Es la secuencia lógica.
Cita de: Linton en 19 Febrero 2013, 20:54 PM
¿Y por qué no se hace así?
edad = int(input("Escribe tu edad: "))
while edad < 18 #lo que sea
Es la secuencia lógica.
EDITO: ups perdón, había leido
while not xD
Pero es que en el ejemplo que das no es necesario un búcle, puedes usar una comparación (IF).
La caracteristica principal de un búcle es poder repetir indefinidamente un bloque de código, y en tu ejemplo la variable "edad" está fuera del búcle, lo que quiere decir que con "input" le das un valor UNA SOLA VEZ, y si el valor es menor que "18" entonces el while se quedaría loopeando etérnamente si dentro del bloque del búcle no modificas la variable "edad" a un valor mayor de "18" para que se cumpla la condición, porque solo tiene un valor para comparar (el valor que le des anteriormente con el userinput).
¿Es eso lo que no entiendes?
saludos
Cita de: Linton en 19 Febrero 2013, 20:54 PM
¿Y por qué no se hace así?
edad = int(input("Escribe tu edad: "))
while edad < 18 #lo que sea
Es la secuencia lógica.
si lo haces así tomas el valor antes del while... si la condicion no se cumple, caerás en un ciclo infinito ya que no vuelves a hacer el
edad = int(input("Escribe tu edad: "))
Citarsi la condicion no se cumple, caerás en un ciclo infinito
Al contrario, no entrará en el bucle.
@ Linton:
Por eso se inicializa a 0 la 1ª vez, para asegurar la entrada al bucle y muestre el mensaje que corresponda (ya en función de la entrada que dé el usuario en el input), por lo menos una vez.
No sé si habrás visto
Do-While, quizá ver 1º esta forma te ayude a entender mejor el funcionamiento de los bucles.
Un saludo.
Al contrario, no entrará en el bucle.
sorry se me pasó :P
cierto... con el do while es mas facil de digerir :P
¿Qué es el Do While?
Tampoco entiendo cómo funciona el "acierto": no está declarado algo como
if intento = num:
...para llegar al print final de "¡Acertaste!"
De modo que cuando el usuario teclea el número correcto, que incumple los dos if (ni es mayor ni menor a sí mismo), el programa... ¿vuelve atrás? ¿O basta con eso para que salga del bucle y prosiga con lo que haya por delante?
¡Muchas gracias a todos! :)
el do while es un ciclo similar al while... la diferencia está en que el primero ejecuta y al final pregunta si debe repetirse, esto asegura que se ejecute por lo menos una vez sin importar la condicion...
para comparar lo debes hacer con "=="
if intento == num:
si lo haces con un solo "=" el sistema creerá que le diste el valor de num a intento, y esa operación es cierta siempre y cuando sea valida (depende del lenguaje valida es que las variables sean del mismo tipo y ambas existan)
CitarDe modo que cuando el usuario teclea el número correcto, que incumple los dos if (ni es mayor ni menor a sí mismo), el programa... ¿vuelve atrás? ¿O basta con eso para que salga del bucle y prosiga con lo que haya por delante?
depende de lo que quieras hacer... lo mas logico, es que al ser correcto, salga del ciclo y continue
¡Gracias, un saludote! :)