Foros del Web » Programando para Internet » Python »

Uso de la funcion Sleep y otras dudas

Estas en el tema de Uso de la funcion Sleep y otras dudas en el foro de Python en Foros del Web. Hola, me ha surgido una duda a la hora de realizar un script para python. El objetivo del script es que lea de un puerto ...
  #1 (permalink)  
Antiguo 09/12/2014, 05:52
 
Fecha de Ingreso: octubre-2014
Mensajes: 5
Antigüedad: 10 años, 1 mes
Puntos: 0
Uso de la funcion Sleep y otras dudas

Hola, me ha surgido una duda a la hora de realizar un script para python.
El objetivo del script es que lea de un puerto un valor cada X tiempo (uso de la función sleep) y lo ponga en pantalla.
En principio parece una tarea muy sencilla, pero no se como usar correctamente la funcion sleep.
Entonces he empezado por crear un programa alternativo que simplemente pregunte la frecuencia de lectura del valor y la imprima (la frecuencia, no el valor).
Para ello he creado este codigo, pero me falta saber como asegurarme que la frecuencia que lea sea un numero entero comprendido entre el 0.1 y el 2, por ejemplo:

Cita:
def datos():
often= input("How often do you want to print the result? (In seconds) Please, enter a value between 0.1 and 2.")
while not (str.isdigit(often) and (often>=0.1)and(often<=2)):
often=input("How often do you want to print the result? (In seconds) Please, enter a value between 0.1 and 2.")
Al ejecutar este codigo, me da un error porque considera a "often" como float en vez de str (o al reves):

Cita:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
datos()
File "<pyshell#1>", line 4, in datos
while not (str.isdigit(often) and (often>=0.1)and(often<=2)):
TypeError: unorderable types: str() >= float()
Alguna idea con ésto?

La otra duda, es la implementación de la funcion sleep, que sería algo así:

Cita:
veces=0
while veces<100:
time.sleep (often) #esta es la función que no se utilizar
veces=veces+1
Muchas gracias por vuestra ayuda amigos.
Un saludo, Javier
  #2 (permalink)  
Antiguo 09/12/2014, 10:43
 
Fecha de Ingreso: octubre-2014
Mensajes: 5
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Uso de la funcion Sleep y otras dudas

Bueno, he ido probando y he solucionado el error poniendo un float, no es perfecto, porque si pones cualquier cosa que no sea un numero, tira error y se cierra, pero como es para uso propio, no pasa nada, se lo que hay que poner (es solo por adornarlo un poco más )


Cita:
def datos():

import time
often= float(input("How often do you want to print the result? (In seconds) Please, enter a value between 0.1 and 2."))
while not ((often>=0.1)and(often<=2)):
often=float(input("How often do you want to print the result? (In seconds) Please, enter a value between 0.1 and 2."))
Ahora viene el problema del sleep, que sigo sin saber como va...
A ver, me explico, una vez leido el "often" se aplica a time.sleep(often) y eso implica que el programa se reinicie cada "often" tiempo? Porque yo quiero medir en "continuo" (bueno, realmente, en discontinuo pero a un tiempo diferencial) un valor y que me lo muestre en pantalla...
No se si me explico Habia pensado en poner un contador,"veces", para que tomase X medidas, en el ejemplo son 100, pero podrían ser 10-15-20...
Que os parece, así tiraría?
Cita:
veces=0
while often<100:
print ("hola")
'''time.sleep (often) #esta es la función que no se utilizar'''
veces=veces+1
Muchas gracias!!
  #3 (permalink)  
Antiguo 09/12/2014, 13:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Uso de la funcion Sleep y otras dudas

Si, solo convierte tu cadena a entero. input en python 3 siempre regresa un string. Y haz las comparaciones necesarias.

Código Python:
Ver original
  1. def datos():
  2.     often = float(input("How often do you want to print the result? (In seconds) Please, enter a value between 0.1 and 2."))
  3.     while not (0.1 <= often <= 2.0):
  4.         often = float(input("How often do you want to print the result? (In seconds) Please, enter a value between 0.1 and 2."))

Por lo que entendi, tu ciclo deberia de correr 100 veces. Siempre comparas contra often por lo que nunca tendras el efecto deseado.
Código Python:
Ver original
  1. for i in range(100):
  2.     print("hola")
  3.     time.sleep(often)

Etiquetas: dudas, funcion, ip, sleep, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:44.