Foros Python

Versión completa: Verificar si paso x tiempo para realizar una accion
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.

Se comprende tu duda. El problema es que si definís tu variable time justo antes de hacer la comprobación, nunca van a pasar dos segundos. Deberías definirla fuera del bucle (ya que mencionás que estás usando pygame) o al momento de iniciar el programa. Luego, dentro del condicional es importante que actualices la variable. En vez de hacerlo con datetime.datetime.now(), hay una función específica para calcular un intervalo de tiempo llamada time.perf_counter().

Te recomiendo que lo hagas así:

  1. import time
  2.  
  3. # Esto antes del bucle o al comienzo del programa.
  4. counter = time.perf_counter()
  5.  
  6. while True: # True o cualquier otra condición.
  7. if time.perf_counter() - counter > 2:
  8. print("Texto")
  9. # Fundamental actualizar el contador.
  10. counter = time.perf_counter()


Para que tengas una idea, en algunas plataformas time.perf_counter() retorna la cantidad de segundos que pasaron desde que se inició el sistema. Pero eso es irrelevante, lo importante es que podés fiarte de las diferencias entre dos llamadas a esa función para conocer un intervalo de tiempo (en segundos).

Saludos
(14-05-2021, 11:53 PM)Francisco escribió: [ -> ]Hola.

Se comprende tu duda. El problema es que si definís tu variable time justo antes de hacer la comprobación, nunca van a pasar dos segundos. Deberías definirla fuera del bucle (ya que mencionás que estás usando pygame) o al momento de iniciar el programa. Luego, dentro del condicional es importante que actualices la variable. En vez de hacerlo con datetime.datetime.now(), hay una función específica para calcular un intervalo de tiempo llamada time.perf_counter().

Te recomiendo que lo hagas así:

  1. import time
  2.  
  3. # Esto antes del bucle o al comienzo del programa.
  4. counter = time.perf_counter()
  5.  
  6. while True# True o cualquier otra condición.
  7.     if time.perf_counter() - counter > 2:
  8.         print("Texto")
  9.         # Fundamental actualizar el contador.
  10.         counter = time.perf_counter()


Para que tengas una idea, en algunas plataformas time.perf_counter() retorna la cantidad de segundos que pasaron desde que se inició el sistema. Pero eso es irrelevante, lo importante es que podés fiarte de las diferencias entre dos llamadas a esa función para conocer un intervalo de tiempo (en segundos).

Saludos

Acabas de ahorrar dolores de cabeza muy amplios, Gracias !  Big Grin 

Estaba utilizando números aleatorios para logra hacer "Control" de tiempo, de cada 100 numeros, si tocaba por ej el numero 1, hacia la acción necesaria, y tuve que hacer unas 7 veces, calculando que numero agregar para controlar maso menos el tiempo  Cry