rettifica: il controllo iniziale dovrebbe essere:
if (((mm < 1) or (mm > 12)) or ((gg < 1) or (gg > 31)))

...

altrimenti sarebbe valido un valore minore o uguale a 0 per mesi e/o giorni...