2013-07-06 64 views
8

Tôi đang cố gắng để thực hiện một vòng lặp trong khi chỉ có dưới một thời gian xác định như thế này, nhưng vòng lặp while tiếp tục thực hiện nó ngay cả khi chúng tôi đang vượt quá giới hạn định nghĩa:thực hiện một vòng lặp while giữa định nghĩa thời gian

import datetime 
import time 

now = datetime.datetime.now() 

minute = now.minute 

while minute < 46 : 
    print "test" 
    time.sleep(5) 
    minute = now.minute 

Làm thế nào có thể ngừng vòng lặp khi chúng ta vượt qua giới hạn?

Cảm ơn

+4

'now' được định nghĩa bên ngoài' while' và do đó, sẽ là giá trị không đổi. – hjpotter92

Trả lời

8

Bạn không cập nhật giá trị minute bên trong khi vòng lặp chính xác. Bạn nên tính toán lại giá trị của now trong vòng lặp và sau đó gán now.minute mới cho minute.

while minute < 46 : 
    print "test" 
    time.sleep(5) 
    now = datetime.datetime.now() 
    minute = now.minute 
4

Bạn cần xác định thời gian mới trong vòng lặp của mình. Biến số minutetĩnh, biến này không cập nhật để phản ánh thời gian thay đổi.

Nếu bạn muốn lặp cho một số tiền nhất định thời gian, bắt đầu với time.time() thay vào đó và sau đó tính toán thời gian trôi qua:

import time 

start = time.time() 

while time.time() - start < 300: 
    print 'test' 
    time.sleep(5) 

sẽ in 'test' mỗi 5 giây trong vòng 5 phút (300 giây) .

Bạn cũng có thể thực hiện tương tự với datetime đối tượng, nhưng cuộc gọi time.time() thì đơn giản hơn một chút để làm việc.

Để lặp cho đến khi một thời gian nhất định datetime có thể được sử dụng như:

import datetime 

while datetime.datetime.now().minute < 46: 
    print 'test' 
    time.sleep(5) 

Một lần nữa, lưu ý rằng vòng lặp cần gọi một phương thức mỗi lần để xác định những gì thời điểm hiện tại là.

0

Bạn đang lưu trữ thời gian hiện tại ở now biến. Thay vào đó bạn sẽ nhận được thời gian hiện tại bên trong mỗi lần lặp: đề xuất

import datetime 
import time 

minute = datetime.datetime.now().minute 

while minute < 46 : 
    print "test" 
    time.sleep(5) 
    minute = datetime.datetime.now().minute 
1

của vòng lặp nên datetime.datetime.now().minute - minute < 46 và cơ thể của vòng lặp không nên cập nhật minute.

Các vấn đề liên quan