Age-Calculator Program
I don't have much time for the review so I'll focus on regular expressions for the time being.

About re


You should probably be using match instead of search because you want the pattern to be at the beginning of the string. Read more
If you are re-using the same regexp multiple times like you are doing here, it might be worth compile-ing it.
You could use the logic used for matching to split your result as well. If you do so, you do not need to change things in multiple places if the format changes;


Like this :

&gt;&gt;&gt; date = "14/07/1789"
&gt;&gt;&gt; m = re.match(r'(\d{1,2})/(\d{1,2})/(\d{4})', date)
&gt;&gt;&gt; m.groups()
('14', '07', '1789')



Even better, you could use named elements. If the format changes (because your code is used in a different country where dates have a different format for instance), only the regexp will change, the code will still be ok because it will be accessing elements by their name and not by their position.


Like this :

&gt;&gt;&gt; date = "14/07/1789"
&gt;&gt;&gt; m = re.match(r'(?P&lt;day&gt;\d{1,2})/(?P&lt;month&gt;\d{1,2})/(?P&lt;year&gt;\d{4})', date)
&gt;&gt;&gt; m.groups()
('14', '07', '1789')
&gt;&gt;&gt; m.groupdict()
{'month': '07', 'day': '14', 'year': '1789'}


Also, the whole logic converting strings to dates (or to triples (day, month, year)) could be extracted in a function on its own.

You might also decide that you want to reuse already existing tools for this such as datetime.strptime

Better user experience

When I input 2 dates which is usually quite painful, I'd rather have my program to fail if the first date is incorrect rather than having to input the second date to know it.