1- try :
2- # Get boy's name
3- boyName = input ("Boy Name : " )
4- if not boyName or not boyName .strip ():
5- raise ValueError ("Boy name cannot be empty" )
6- if not boyName .replace (" " , "" ).isalpha ():
7- raise TypeError ("Boy name must contain only alphabetic characters" )
8-
9- # Get boy's age
10- boyAgeInput = input ("Boy age : " )
11- if not boyAgeInput .strip ():
12- raise ValueError ("Boy age cannot be empty" )
13- try :
14- boyAge = int (boyAgeInput )
15- if boyAge <= 0 :
16- raise ValueError ("Boy age must be a positive number" )
17- except ValueError as e :
18- if "invalid literal" in str (e ):
19- raise TypeError ("Boy age must be a valid integer" )
20- raise
21-
22- # Get girl's name
23- girlName = input ("Girl Name : " )
24- if not girlName or not girlName .strip ():
25- raise ValueError ("Girl name cannot be empty" )
26- if not girlName .replace (" " , "" ).isalpha ():
27- raise TypeError ("Girl name must contain only alphabetic characters" )
28-
29- # Get girl's age
30- girlAgeInput = input ("Girl age : " )
31- if not girlAgeInput .strip ():
32- raise ValueError ("Girl age cannot be empty" )
1+ """
2+ Algorithm to calculate age difference and display a message with safe input handling.
3+
4+ Wikipedia: https://en.wikipedia.org/wiki/Chronological_age
5+ """
6+
7+ def age_difference (boy_age : int , girl_age : int ) -> int :
8+ """
9+ Returns the absolute age difference between two people.
10+
11+ >>> age_difference(22, 20)
12+ 2
13+ >>> age_difference(20, 22)
14+ 2
15+ >>> age_difference(30, 30)
16+ 0
17+ """
18+ return abs (boy_age - girl_age )
19+
20+
21+ def get_valid_age (prompt : str ) -> int :
22+ """Prompt the user until a valid non-negative integer age is entered."""
23+ while True :
24+ try :
25+ age = int (input (prompt ))
26+ if age < 0 :
27+ raise ValueError ("Age cannot be negative." )
28+ return age
29+ except ValueError as e :
30+ print (f"Invalid input: { e } . Please enter a valid positive integer age.\n " )
31+
32+
33+ if __name__ == "__main__" :
3334 try :
34- girlAge = int (girlAgeInput )
35- if girlAge <= 0 :
36- raise ValueError ("Girl age must be a positive number" )
37- except ValueError as e :
38- if "invalid literal" in str (e ):
39- raise TypeError ("Girl age must be a valid integer" )
40- raise
41-
42- # Calculate and display result
43- print (boyName , "loves" , girlName , ". Age difference is" , abs (boyAge - girlAge ))
44-
45- except TypeError as e :
46- print (f"Type Mismatch Error: { e } " )
47- except ValueError as e :
48- print (f"Value Error: { e } " )
49- except Exception as e :
50- print (f"An unexpected error occurred: { e } " )
35+ boy_name = input ("Boy Name: " ).strip ().capitalize ()
36+ boy_age = get_valid_age ("Boy age: " )
37+ girl_name = input ("Girl Name: " ).strip ().capitalize ()
38+ girl_age = get_valid_age ("Girl age: " )
39+
40+ diff = age_difference (boy_age , girl_age )
41+ print (f"{ boy_name } loves { girl_name } . Age difference is { diff } \n " )
42+
43+ except KeyboardInterrupt :
44+ print ("\n Program interrupted by user. Exiting safely..." )
0 commit comments