Verificar si paso x tiempo para realizar una accion

Iniciado por SlayerBur, 14 Mayo 2021, 19:16 PM

0 Miembros y 1 Visitante están viendo este tema.

SlayerBur

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

engel lex

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

Código (python) [Seleccionar]
from time import time
#....... codigo
fin_bloqueo = time() + 2
#.......
if time() > fin_bloqueo:
     hacer_algo()
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

Cita de: engel lex 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 (python) [Seleccionar]
from time import time
#....... codigo
fin_bloqueo = time() + 2
#.......
if time() > fin_bloqueo:
     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.

engel lex

en ese caso puedes crear una bandera tipo


Código (python) [Seleccionar]

bloquear_inputs = False  #variable externa al ciclo


#ciclo principal del juego

 if bloquear_inputs:
   if time() > bloquear_inputs:
     bloquear_inputs = False
 else:
   if input_usuario():
     hacer_accion()

 # acción que causa bloqueo de inputs
   bloquear_inputs = time() + 2



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

#4
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 (python) [Seleccionar]
#!/usr/local/bin/python3.7

import time

# El tiempo a esperar
TIME_LIMIT = 5
CURRENT_TIME = None

print("Escriba la tecla P y presione ENTER.")
while (True):
    try:
        cmd = input("> ")
    except (EOFError, KeyboardInterrupt):
        break

    if not (cmd):
        continue

    if (cmd[:1].lower() == "p"):
        if (CURRENT_TIME is None or time.time()-CURRENT_TIME >= TIME_LIMIT):
            print("Prueba")

            # Se reajusta el tiempo para poder realizar las mismas acciones
            CURRENT_TIME = time.time()
        else:
            print("Debes esperar %d segundos..." % (TIME_LIMIT))
    elif (cmd[:1].lower() == "q"):
        break
    else:
        print("Error, comando inexistente")


Ejemplo:

Código (bash) [Seleccionar]
python3.7 main.py

Resultado:

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:

> Prueba

~ DtxdF