2017-10-07 35 views
-3

我目前正在刮網頁,並且每隔幾秒就會更改某個變量minute。這minute位於永遠運行的def內。我如何做到這一點,例如,如果minute == 80,if語句只運行一次?如何在Python中只執行一次「if」語句?

這是怎樣的代碼看起來像:

def login(): # necesarry for this 
// stuff 
return r 

def run(r): 
    //stuff 
    minute_soup = soup.find_all("span", {"class":"clock-period"}) 
    minute = minute_soup[0].text 

    if minute == 80: 
     print(minute) 

    time.sleep(10) 

r = login() 
while True: 
    run(r) 

目前,每次minute等於80,它在做同樣的事情一遍又一遍,每10秒,直到minute不等於80。當minute等於80時,有沒有辦法讓它做一次?

+0

你可以設置你已經運行一次標誌事件得到解決?目前尚不清楚你所描述和展示的內容。 – pvg

回答

1

你可以使用參數舉行標誌:

def run(r): 
    //stuff 
    minute_soup = soup.find_all("span", {"class":"clock-period"}) 
    minute = minute_soup[0].text 

    if minute == 80 and r.flag: 
     r.flag = False 
     print(minute) 
    if minute != 80: 
     r.flag = True 

    time.sleep(10) 

r = login() 
r.flag = True 
while True: 
    run(r) 
0

當我從你的問題了解你可以使用flag,當第一次分成爲80集真的那麼if將永遠不會再執行:

def login(): # necesarry for this 
// stuff 
return r 

def run(r): 
    //stuff 
    minute_soup = soup.find_all("span", {"class":"clock-period"}) 
    minute = minute_soup[0].text 
    flag = False 

    if (minute == 80 and !flag): 
     flag = True 
     print(minute) 

    time.sleep(10) 

r = login() 
while True: 
    run(r) 
+0

每次調用run()時,都會將'flag'設置爲'false'(線索:應該是'False'),所以我認爲這會遇到OP報告的問題。 – quamrana

0
minuteRunOnce = False 
def run(r): 
    //stuff 
    minute_soup = soup.find_all("span", {"class":"clock-period"}) 
    minute = minute_soup[0].text 

    if (minute == 80 and not(minuteRunOnce)): 
     print(minute) 
     minuteRunOnce = True 

    time.sleep(10) 

r = login() 
while True: 
    run(r) 
0

這將是這樣的:

flag = true 
def run(r): 
    if r == 80: 
     if flag: 
      flag = false 
      //More stuff 
    else: 
     flag = true 

我建議你看看eventhandling,因爲無限循環通常可以通過使用代碼會更簡潔

+0

我不斷收到此錯誤...請幫忙嗎?我嘗試將其設置爲全局但不起作用。 UnboundLocalError:賦值之前引用的局部變量「標誌」 –