¿Por qué mi programa imprime los resultados después de que se hayan dado todos los casos de prueba?

Primero, parece que la lógica que ha implementado para el programa es un poco incorrecta y necesita algunas enmiendas. (Corrígeme si funciona como se esperaba)
Ahora, en la línea 23, pasa el carácter w [i] en la función, lo busca en la lista de letras ‘conocidas’ y obtiene el resultado de que esté presente en la lista o no. El problema es que almacena el resultado en una sola variable, pero tan pronto como el ciclo avanza, el último valor obtenido se pierde automáticamente. Lo que obtienes al final es el resultado de la búsqueda, ya sea que la última letra de la matriz esté presente en la lista o no.
Lo que debe hacer es inicializarlo para que sea verdadero (suponiendo que se conozca la palabra) y comenzar a buscar a través de la función. Tan pronto como escriba una carta que NO esté en la lista, imprima inmediatamente “No” y salga del ciclo usando una declaración de interrupción. Eso debería darte la salida correcta.

Además, su función de verificación también parece estar un poco apagada. La variable booleana l debe inicializarse como falsa. En el ciclo for, al buscar el carácter, si el carácter está ENCONTRADO (dentro de la instrucción if), cambie la variable l para que sea verdadera (lo que indica que está en la lista conocida) y salga del ciclo utilizando una instrucción break (opcional) . Fuera del ciclo for, simplemente devuelve la variable booleana l.

Echa un vistazo a mi código para el mismo problema. Aunque está un poco más optimizado y hecho con un paquete diferente, la lógica principal debería ser comprensible.
Avísame si te ayudó.