Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: deleted_account en 30 Agosto 2017, 01:17 am



Título: Tiempo y Python!
Publicado por: deleted_account en 30 Agosto 2017, 01:17 am
HOLA!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Estoy creando un pequeño programa en Python! Pero, me surgió una gran pregunta...¿Cómo puedo dar un tiempo límite para que el usuario ingrese un dato?
No se si me explico con la pregunta... En mi código, me gustaría que el usuario tenga que ingresar un dato... Pero, si el usuario no ingresó el dato después de 5 segundos, Mueste un mensaje que diga "Perdiste!".

DATOS A TENER EN CUENTA :
*SOY NOVATO XD
*TRABAJO EN PYTHON 3.6
*MI SISTEMA OPERATIVO ES WINDOWS 10

GRACIAS POR LEER MI MENSAJE!
Espero su respuesta!

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
New Moments, New Life!




Título: Re: Tiempo y Python!
Publicado por: engel lex en 30 Agosto 2017, 02:05 am
lamentablemente no tiene respuesta simple... yo te recomendaría hacerlo como un hilo aparte o usar señales...

no se si señales funcione bien en windows, pero aquí un codigo simple
Código
  1. import signal
  2.  
  3. def interrupcion(signum, frame):
  4. print("perdiste")
  5. print("presiona enter para continuar")
  6.  
  7. signal.signal(signal.SIGALRM, interrupcion) #cargamos la interrupción
  8.  
  9. def leerEntrada(texto, tiempo): #definimos nuestro propio input
  10. def interno(texto): #con una funcion contenida >:)
  11.  return input(texto)
  12. signal.alarm(tiempo) #activamos la alarma
  13. retorno = interno(texto) #esperamos el retorno
  14. signal.alarm(0) #desactivamos la alarma
  15. return retorno #retornamos
  16.  
  17.  
  18. valor = leerEntrada("Tienes 5 segundos para responder: ", 5) #texto, tiempo
  19. print ("valor: ", valor)
  20.  
  21.  


Título: Re: Tiempo y Python!
Publicado por: tincopasan en 30 Agosto 2017, 02:16 am
hace ya mucho tiempo mostré una implementación de como lo resolvía.
Código
  1. #-*- coding:utf-8 -*-
  2. import msvcrt
  3. import time
  4.  
  5.  
  6. def input_tiempo(aviso = ">>>",duracion=5):
  7.    global nombre
  8.    nombre=""
  9.    print (aviso)    
  10.    finaliza = time.time() + duracion
  11.    while time.time()< finaliza:
  12.        if msvcrt.kbhit():
  13.            letra= msvcrt.getche().decode('ASCII')
  14.            if letra == "\r":
  15.                break
  16.            else:
  17.                nombre+= letra
  18.  
  19. q=input_tiempo("Escribe tu nombre: ")
  20. if nombre != "":
  21.    print("\nHola ¡¡ {} !!".format(nombre))
  22. else:
  23.    print("Perdiste")    
  24. input()
  25.  
  26.  


Título: Re: Tiempo y Python!
Publicado por: engel lex en 30 Agosto 2017, 02:37 am
la solucion ideal es la de tincopasan, aunque hay una cosita que no me gusta

linea 7, declaras nombre como global, pero esto parece inapropiado a primera vista, no sería mejor retornarlo?




Título: Re: Tiempo y Python!
Publicado por: deleted_account en 30 Agosto 2017, 03:38 am
Gracias por sus respuestas!
Voy a intentarlo!