0

私はこのコードを持っています

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)

これを実行すると、lineas.len に対して If 文は正しく動作しますが、else 文は (contadorLineasTotal-contadorLineasValidas) 回ではなく 1 回実行されるようです。

どうしたの?

ありがとう

4

1 に答える 1

3

行はタブでインデントされ、行はスペースelseでインデントされます。ifおそらく 2 つのインデントは Python の観点からは一致しないため、elseが一致しませんifforおそらくそれは(ブロックも持つことができるelse)と同じインデントにあります。

このような問題を回避するには、一貫したインデントを使用してください。-tタブとスペースの両方を使用したインデントが使用されている場合は、フラグを指定して python を実行して警告を表示することもできます。

于 2013-04-02T17:45:17.783 に答える