Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Artikbot en 24 Agosto 2009, 00:20 am



Título: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: Artikbot en 24 Agosto 2009, 00:20 am
Buenas!

Quiero escribir un código que me muestre un campo donde ingresar una palabra, en caso de no tener la longitud deseada, volver a pedirla otra vez mostrando un mensaje de error distinto, con el error cometido. Y seguir así hasta que se ingrese un valor de longitud adecuada.

Este es mi source, pero no repite la petición:

Código
  1. x=input('ingrese su contraseña -> ')
  2. if len(x)<6:
  3. print('demasiado corta')
  4. elif len(x)>=6:
  5. print('contraseña correcta')

Así que he intentado añadir una línea, que funciona, vuelve a pedir la contraseña, pero sin embargo, la toma como el valor x, pero hace caso omiso de la línea anterior de código. Me ha parecido obvio, pero no creo que la solución sea copiar una y otra vez el código... debe haber algún modo de hacerle volver a repetir el código pero añadiendo al mensaje de salida 'debe tener 6 o más carácteres', no? Además de eso, el mensaje que introduzco le suda 3 pueblos, muestra un output en blanco si fallo, y si acierto muestra el valor correspondiente.

Código
  1. x=input('ingrese su contraseña -> ')
  2. if len(x)<6:
  3. print('demasiado corta')
  4. x=input('ingrese su contraseña. debe tener 6 o mas caracteres -> ')
  5. elif len(x)>=6:
  6. print('contraseña correcta')



Entonces mi pregunta es... Cómo hago para hacerle volver hacia el principio del código haciéndole añadir una frase al output? Lo de la frase creo que ya sé como hacerlo, pero lo de devolverle al inicio sí que NPI... :-\


Saludos!


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: -Ramc- en 24 Agosto 2009, 00:42 am
Con un bucle puedes hacer que se devuelva al inicio hasta que ponga una contraseña de 6 caracteres.


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: Jubjub en 24 Agosto 2009, 00:44 am
Algo asi:

Código
  1. x = ""
  2. while (len(x)<6):
  3.    x=input('ingrese su contraseña -> ')
  4.    if len(x)<6:
  5.        print('demasiado corta')
  6. print('contraseña correcta')
  7.  


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: Artikbot en 24 Agosto 2009, 00:53 am
Un bucle... Debería añadir el inicio del bucle antes de la línea adonde se declara el valor de x?

O sea, con el while conseguiría que el programa continuase ejecutando el código hasta que la entrada fuese correcta... Cierto?

veamos...

Código
  1. # -*- coding: utf-8 -*-
  2. x=input('ingrese su contraseña -> ')
  3. while len(x)<6:
  4. print('por favor, ingrese otra vez. debe tener 6 o más carácteres')
  5. if len(x)>=6:
  6. print('contraseña correcta')
  7. input('')

Parece que es lo que debería... Pero repite hasta el infinito el mensaje de volver a ingresar :-(

Quizás si pudiese terminar esa orden, me permitiría volver a ingresar, no?



Edit: Jubjub, no entiendo el trozo de tu código adónde abandonas el if para volver al while... O sea, que en el momento que el trozo que pertenece a while fuese un valor mayor de 6, dejaría de tener relevancia el while y mostraría el mensaje de 'contraseña correcta'?

Así hace lo que quiero que haga (code de jubjub con una petición a declarar x al incio xD)

Código
  1. x=input('ingrese su contraseña -> ')
  2. while (len(x)<6):
  3. x=input('ingrese su contraseña -> ')
  4. if len(x)<6:
  5. print('demasiado corta')
  6. print('contraseña correcta')



Muchas gracias tíos :D


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: -Ramc- en 24 Agosto 2009, 01:01 am
Código
  1. x=input('ingrese su contrasenia -> ')
  2. while len(x)<6:
  3. x=input('por favor, ingrese otra vez. debe tener 6 o mas caracteres\n')
  4. print('contrasenia correcta')


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: Artikbot en 24 Agosto 2009, 01:05 am
Código
  1. x=input('ingrese su contraseña -> ')
  2. while (len(x)<6):
  3. print('demasiado corta')
  4. x=input('ingrese su contraseña -> ')
  5. print('contraseña correcta, presione una tecla para salir')
  6. input('')
  7.  

Con un solo while. Y muestra mensaje de terminación de la app xD

Ay la ostia, si el code es el mismo en esencia >.<

Adrede, ese \n que pones... No he visto para qué sirve en los docs de Python 3.1, qué es exactamente?

Edit: Puedo deducir que a partir de \n es adónde se introduce el código del usuario dentro de 'input', no?


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: -Ramc- en 24 Agosto 2009, 01:09 am
El \n es salto de línea, así el siguiente mensaje que se muestre o en este caso el ingreso de la contraseña se hará en la siguiente línea.

Saludos.


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: Artikbot en 24 Agosto 2009, 01:10 am
Ajá!

Gracias a los dos :D


Mañana veré a ver qué mas hago, esta vez un poco más útil xDDDD

Son la 1:10 de la mañana y tengo sueño  :rolleyes:


Título: Re: [python] Tonteando con el lenguaje, como hacerle volver atrás?
Publicado por: Jubjub en 24 Agosto 2009, 22:35 pm
:D aqui nos tienes :P