2017-10-07 1851 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:赋值之前引用的局部变量“标志” –