2016-04-06 96 views
-4

我再次啓動,謝謝大家的回覆。while循環呼叫陣列外

我有一個日誌文件,我接受條目並從中刪除所有垃圾。 我留下了我的數組或列表是這個

23 
23.23.23.23 
45 
45.45.45.45 
100 
34.34.54.13 

我怎麼稱呼每一行,我想是與此有關。

a = 1 
while a < 18: 
    a = a + 2 
    #logging.debug(line.split(PID_ANDROID)[a]) 
    countIP = a 
    trySomething() 

    if a == 20: 
     break 

但我必須在我打電話後做事情。 我希望能夠使用的第一個條目,

> do something 
> see if something is happening 
> if its not goto 3rd entry 
> try the same thing again. 

這就是我堅持的。 ,因爲當我從別的地方調用它時,我使用全局來存儲。 python告訴我,我不能告訴我們一個str或turp。或者使用下面的代碼給我一個列表中所有東西的繼續輸出。

atm我有這段代碼。

def trySomething(): 
global countIP 
global LOG_SPLITER 
#logging.debug('Processing Number: %s' % (countIP,)) 
logging.debug(LOG_SPLITER.split(PID_ANDROID)[countIP]) 
time.sleep(.5) 
clearScreen() 
#grabBox90() 
#lineGoto() 

我的問題是。 我該如何做循環,並一次只拔出一個與它做某事,當我到達完成的循環轉到下一個?

+0

'c = + 2'是無效的Python,我也建議你開始使用'x + = 1'而不是'x = x + 1'。 – Signal

+5

這篇文章確實需要進一步完善,以便您提出明確的問題和疑問。就目前而言,它似乎更像是在討論你正在做的事情。 – zephyr

回答

0

它看起來好像應該使用for循環,其初始索引爲1,步長爲2.或者,對值爲1使用顯式調試語句,然後在其餘循環中從3開始循環,以避免如果測試。如果代碼的其餘部分增加1而不是2,那麼可以讓你在仍然有循環的情況下正確地執行初始跳轉。

而不是

c = 1 
#do my stuff 
while c < 20: 
    if c == 1: 
     logging.debug(line.split(PID_ANDROID)[c]) 
     c = + 2 
    else: 
     logging.debug('Moving on to a refresh') 
    # You do not incremennt c 
    # c += 2 should go here to increment every time 

的Python 2

for i in xrange(1,20,2): 
    # do your processing 

的Python 3

for i in range(1,20,2): 
    # do you processing 
+0

完美的參考,我在我的循環內添加了我的代碼,並將其他所有內容移動到外面。 – MrT

+0

代碼的作品,併爲每個想知道我想達到的是這個。如果a = 1: a = 1: a = + 2 ip.close() ip = os.popen(adbTap + '56 584')#點擊掃描 ip.close() 時間。睡眠(3) grabBox90() if a == 20: break – MrT

0

如果你只是想登錄line每個條目你可以這樣做:

entries = line.split(PID_ANDROID) 
for e in entries[::2]: # take every other element 
    logging.debug(e) 

迭代條目是「更pythonic」。

+0

由於他明確地在'c == 1'上調試並跳過所有其他的,所以這不是他要求的。 – sabbahillel