Skip to content

Commit c991542

Browse files
committed
added age_difference algorithm as issue #13489
1 parent 9407d88 commit c991542

File tree

1 file changed

+43
-49
lines changed

1 file changed

+43
-49
lines changed

Age_difference/main.py

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,44 @@
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("\nProgram interrupted by user. Exiting safely...")

0 commit comments

Comments
 (0)