2013-04-02 53 views
0

我有了這個代碼Else語句只能執行1次循環的Python

def filtraValoraciones (nomFichero = "valoraciones.data"): 
# Se crea el archivo de salida 
crearArchivoValoracionesFiltradas() 
contadorLineasTotal = 0 
contadorLineasValidas = 0 
lineas = [(l.strip()).split("\t") for l in (open(nomFichero).readlines())] 
for l in lineas: 
    contadorLineasTotal = contadorLineasTotal + 1 
    # Se lee Usuario, Restaurante, Precio y Calidad 
    idUsuari = int(l[0]) 
    idRestaurant = int(l[1]) 
    precio = round(float(l[2]),2) 
    calidad = round(float(l[3]),2) 
    if (idUsuari >= 0 and idUsuari <= 99) and (idRestaurant >= 0 and idRestaurant <= 49) and precio > 0.00 and (calidad >= 0.0 and calidad <= 10.00): 
     # Tiene valores coherentes --> se vuelcan a otro fichero 
     cadena = str(idUsuari) + " " + str(idRestaurant) + " " + str(precio) + " " + str(calidad) + "\n" 
     salida = open('valoracionesFiltradas.data','a') 
     salida.write (cadena); 
     salida.close() 
     contadorLineasValidas = contadorLineasValidas + 1 
    else: 
     cadena2 = str(idUsuari) + " " + str(idRestaurant) + " " + str(precio) + " " + str(calidad) + "\n" 
     print cadena2 

print "El numero de valoraciones filtradas han sido: " + str(contadorLineasTotal-contadorLineasValidas) 

當我執行此,如果statemente工作正常進行lineas.len裏面,但else語句似乎是1次,而不是執行(contadorLineasTotal-contadorLineasValidas)次。

有什麼問題?

感謝

+2

請修復您的縮進。 – wRAR

+0

沒有看到輸入文件的內容,我們無法知道'else'分支是否應該被使用多次。但是,鑑於其他人指出的縮進問題,很可能這個問題有正確的答案。 – chepner

回答

3

else行縮進用空格而if線與製表符縮進。從Pythons的角度來看,這兩個縮進可能不匹配,因此elseif不匹配。可能它與forwhich can also have an else block)的縮進位置相同。

使用一致的縮進來避免此類問題。您也可以使用-t標誌運行python,以便在使用縮進標籤和空格的情況下獲得警告。