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
Hola! asumo que esto es python3, no se que estás armando pero usualmente sería algo como
from time import time
#....... codigo
fin_bloqueo = time() + 2
#.......
if time() > fin_bloqueo:
hacer_algo()
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
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.
en ese caso puedes crear una bandera tipo
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
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.
#!/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:
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