Funkcja jest dobrze zapisana, poza kilkoma mankamentami:
zmienna Q nie jest nigdzie zdefiniowana.
else nie jest potrzebny. Jeżeli warunek będzie nieprawdziwy, to kod wewnątrz ifa się nie wykona i pętla rozpocznie kolejny przebieg. Dbajmy o krótki i czytelny zapis.
Poza tym wygląda okej :-)