sanfermin67, creo que el último "if p in f" debería ser "if p in l" (es decir, si la palabra está en la línea).
Tu código tiene el problema de que si la línea contiene a más de una de las palabras buscadas, se agregará a b tantas veces como palabras contenga.
Además hay otro detalle: la posición en donde está el return indica que la función terminará luego de encontrar la primera línea que contenga a alguna de las palabras. El return debería estar fuera del for.
Se me ocurre un sistema de "puntajes". Cada línea arranca en 0, y por cada vez que se encuentre cada palabra buscada, se incrementa en 1 su puntaje. Luego simplemente se selecciona la línea cuyo puntaje sea el más alto.
El cálculo puede ser algo así:
Código Python:
Ver originalfor linea in archivo:
for palabra in lista_de_palabras_buscadas:
puntaje[linea] += linea.count(palabra)
http://docs.python.org/library/stdtypes.html#str.count
Les dejo a ustedes pensar lo que falta:
- cómo inicializar el vector
puntaje con todas sus entradas en 0
- cómo seleccionar al final el mayor puntaje y a partir de allí obtener la línea correspondiente
- cómo decicir en caso de empate
una forma simple puede ser leer el archivo con readlines(), crear el vector puntaje de tamaño len(lineas_del_archivo), ¡y ya no les digo más porque hay que pensarlo!
Saludos.