2011-07-28 146 views
1

在我的python腳本中,我通過從索引9開始的列表(headerRow)進行迭代。我想檢查它是否已經在數據庫中,如果沒有,則添加它到一個帶有自動增強主鍵的數據庫。然後我想再次通過循環發送它來檢索它的主鍵。減少循環中遞增的變量

for i in range (9, len(headerRow)): 
    # Attempt to retrieve an entry's corresponding primary key. 
    row = cursor.fetchone() 
    print i 

    if row == None: # New Entry 
     # Add entry to database 
     print "New Entry Added!" 
     i -= 1 # This was done so that it reiterates through and can get the PK next time. 
     print i 

    else: # Entry already exists 
     print "Existing Entry" 
     qpID = row[0] 
     # ... 

這裏是我的腳本輸出:

9 
New Question Added! 
8 
10 
New Question Added! 
9 
11 

正如你所看到的,我的問題是,範圍()不關心什麼i現在值。什麼是我想要做什麼的首選python方法?

由於提前,

邁克

回答

5

爲什麼不使用while循環?

i=9 
while (i<len(headerRow)): 
    # Attempt to retrieve an entry's corresponding primary key. 
    row = cursor.fetchone() 

    if row == None: # New Entry 
     # Add entry to database 
     print "New Entry Added!" 
    else: # Entry already exists 
     print "Existing Entry" 
     qpID = row[0] 
     i += 1 
     # ... 
+0

它的工作原理很簡單。我喜歡。現在更好的問題是爲什麼使用for循環在我的腦海中如此根深蒂固。謝謝。 – MikeKusold

1

我手動更改索引變量,極大的厭惡讓我不想對此發表評論... :) 怎麼樣只是改變它在同一次迭代做兩件事?代碼看起來有點奇怪,但你明白了。

for i in range (9, len(headerRow)): 
    # Attempt to retrieve an entry's corresponding primary key. 
    row = cursor.fetchone() 
    print i 

    if row == None: # New Entry 
     # Add entry to database 
     print "New Entry Added!" 
     row = cursor.fetchone() # re-fetch to get the PK 

    # Entry will exist now 
    print "Getting Existing Entry" 

    qpID = row[0] 
    # ... 

,並試圖解釋爲什麼遞減「我」不工作:

for循環並沒有真正增加變量。它只是從你給出的序列中選取下一個值(由範圍函數生成)。所以如果順序是[9,10,11,12]它會按順序選擇那些。變量「i」將得到下一個值,前一個將被丟棄。沒有增加或減少會影響這一點。