elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Verificar si paso x tiempo para realizar una accion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Verificar si paso x tiempo para realizar una accion  (Leído 2,911 veces)
SlayerBur

Desconectado Desconectado

Mensajes: 92



Ver Perfil
Verificar si paso x tiempo para realizar una accion
« en: 14 Mayo 2021, 19:16 pm »

Buen día.

Estoy intentando hacer un código, y necesito que la persona no pueda realizar la misma acción, hasta que haya pasado 2 segundos (por ejemplo), pero a la vez, el programa debe continuar funcionando, por ende el sleep no me funcionaría :'(

Intente obteniendo los segundos actuales, y en una variable dentro del def, pero siempre me sumaría los 2 y nunca llegaría al tiempo

Código:
        time = datetime.datetime.now()
        tiempo = time.second + 2
        if time.second > tiempo:
            print('Texto')

eso es lo que tendría dentro de mi clase / def.
Intente colocar la variable en otro lado, pero siempre sería lo mismo, al intentar realizar la accion, volvería a sumar +2 al time.
no se si se comprende mi duda

Pd. Estoy utilizando pygame


« Última modificación: 29 Mayo 2021, 23:22 pm por SlayerBur » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Verificar si paso x tiempo para realizar una accion
« Respuesta #1 en: 14 Mayo 2021, 20:47 pm »

Hola! asumo que esto es python3, no se que estás armando pero usualmente sería algo como

Código
  1. from time import time
  2. #....... codigo
  3. fin_bloqueo = time() + 2
  4. #.......
  5. if time() > fin_bloqueo:
  6.     hacer_algo()


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
SlayerBur

Desconectado Desconectado

Mensajes: 92



Ver Perfil
Re: Verificar si paso x tiempo para realizar una accion
« Respuesta #2 en: 14 Mayo 2021, 21:08 pm »

Hola! asumo que esto es python3, no se que estás armando pero usualmente sería algo como

Código
  1. from time import time
  2. #....... codigo
  3. fin_bloqueo = time() + 2
  4. #.......
  5. if time() > fin_bloqueo:
  6.     hacer_algo()

Estoy intentando hacer un pequeño juego, y necesito que no se pueda pulsar / realizar una acción si se realizo previamente en un lapso de 2 segundos.
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Verificar si paso x tiempo para realizar una accion
« Respuesta #3 en: 14 Mayo 2021, 21:28 pm »

en ese caso puedes crear una bandera tipo


Código
  1. bloquear_inputs = False  #variable externa al ciclo
  2.  
  3.  
  4. #ciclo principal del juego
  5.  
  6.  if bloquear_inputs:
  7.    if time() > bloquear_inputs:
  8.      bloquear_inputs = False
  9.  else:
  10.    if input_usuario():
  11.      hacer_accion()
  12.  
  13.  # acción que causa bloqueo de inputs
  14.    bloquear_inputs = time() + 2
  15.  
  16.  

así si los inputs estan bloqueado se ve si es tiempo de desbloquear, en cualquier caso igual el ciclo sigue, pero no llega a "hacer_accion()", pero si no está bloqueado, entonces hace la acción.


espero esto te ayude y puedas ajustarlo a tu código...


sinceramente yo recomendaría para estas cosas hacer uso de multi hilos (threading) pero dependerá de que tan simple sea tu proyecto si eso vale la pena o no
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
DtxdF

Desconectado Desconectado

Mensajes: 53



Ver Perfil
Re: Verificar si paso x tiempo para realizar una accion
« Respuesta #4 en: 22 Mayo 2021, 20:06 pm »

Hola @SlayerBur

Para ello debe ajustar una variable que indique el tiempo límite que desea esperar después de realizar una acción. Esto es para tener un mejor orden, pero también puede optar por crear un archivo de configuración (ya sea con ConfigParser, TOML, JSON, etc.), aunque esto se sale del tema, es más una recomendación para su proyecto.

Después de ajustar los segundos límites, también debe crear una variable donde hará referencia a el tiempo actual, el cual será usado para calcular los segundos transcurridos. Mucho después tiene que restar el tiempo actual con el tiempo que hace referencia esa variable, el cual le debería dar los segundos que han pasado.

El siguiente código es un pequeño script a modo de ilustración, y si mira la línea 20 puede ver que si es None, ejecutará la acción, hará la acción y ajustará el tiempo actual. Es necesario para cuando la operación que se desea todavía no se ha realizado.

Código
  1. #!/usr/local/bin/python3.7
  2.  
  3. import time
  4.  
  5. # El tiempo a esperar
  6. TIME_LIMIT = 5
  7. CURRENT_TIME = None
  8.  
  9. print("Escriba la tecla P y presione ENTER.")
  10. while (True):
  11.    try:
  12.        cmd = input("> ")
  13.    except (EOFError, KeyboardInterrupt):
  14.        break
  15.  
  16.    if not (cmd):
  17.        continue
  18.  
  19.    if (cmd[:1].lower() == "p"):
  20.        if (CURRENT_TIME is None or time.time()-CURRENT_TIME >= TIME_LIMIT):
  21.            print("Prueba")
  22.  
  23.            # Se reajusta el tiempo para poder realizar las mismas acciones
  24.            CURRENT_TIME = time.time()
  25.        else:
  26.            print("Debes esperar %d segundos..." % (TIME_LIMIT))
  27.    elif (cmd[:1].lower() == "q"):
  28.        break
  29.    else:
  30.        print("Error, comando inexistente")

Ejemplo:

Código
  1. python3.7 main.py

Resultado:

Código:
Escriba la tecla P y presione ENTER.
> p
Prueba
> p
Debes esperar 5 segundos...
>

Luego de esperar los 5 segundos, sucede la misma acción una y otra vez:

Código:
> Prueba

~ DtxdF
« Última modificación: 23 Mayo 2021, 03:52 am por DtxdF » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines