Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Linton en 19 Febrero 2013, 18:58 pm



Título: No entiendo la secuencia de un bucle
Publicado por: Linton en 19 Febrero 2013, 18:58 pm
Veamos, es lo siguiente:

Código
  1. num = 54
  2. intento = 0
  3. while intento != num:
  4.    intento = int(input("Adivina la cifra: "))
  5.    if intento > num:
  6.        print("Alto")
  7.    elif intento < num:
  8.        print ("Bajo")
  9. 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.



Título: Re: No entiendo la secuencia de un bucle
Publicado por: engel lex en 19 Febrero 2013, 19:10 pm
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...


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Linton en 19 Febrero 2013, 19:37 pm
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.


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Eleкtro en 19 Febrero 2013, 19:55 pm
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

Tampoco 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/While

y http://en.wikipedia.org/wiki/While


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Linton en 19 Febrero 2013, 20:36 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.


Serí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.


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Eleкtro en 19 Febrero 2013, 20:49 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!


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Linton en 19 Febrero 2013, 20:54 pm
¿Y por qué no se hace así?

Código
  1. edad = int(input("Escribe tu edad: "))
  2. while edad < 18 #lo que sea

Es la secuencia lógica.


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Eleкtro en 19 Febrero 2013, 21:07 pm
¿Y por qué no se hace así?

Código
  1. edad = int(input("Escribe tu edad: "))
  2. 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


Título: Re: No entiendo la secuencia de un bucle
Publicado por: engel lex en 19 Febrero 2013, 21:21 pm
¿Y por qué no se hace así?

Código
  1. edad = int(input("Escribe tu edad: "))
  2. 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

Código:
edad = int(input("Escribe tu edad: "))


Título: Re: No entiendo la secuencia de un bucle
Publicado por: HdM en 19 Febrero 2013, 21:33 pm
Citar
si 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.



Título: Re: No entiendo la secuencia de un bucle
Publicado por: engel lex en 19 Febrero 2013, 22:05 pm
Código:
Al contrario, no entrará en el bucle. 


sorry se me pasó :P


cierto... con el do while es mas facil de digerir :P


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Linton en 20 Febrero 2013, 09:21 am
¿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!  :)


Título: Re: No entiendo la secuencia de un bucle
Publicado por: engel lex en 20 Febrero 2013, 17:00 pm
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 "=="
Código:
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)

Citar
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?

depende de lo que quieras hacer... lo mas logico, es que al ser correcto, salga del ciclo y continue


Título: Re: No entiendo la secuencia de un bucle
Publicado por: Linton en 20 Febrero 2013, 19:27 pm
¡Gracias, un saludote!  :)