1+ """Number Guessing Game.
2+
3+ A simple game where the user guesses a randomly generated number
4+ within a user-defined range.
5+
6+ Reference: https://en.wikipedia.org/wiki/Guessing_game
7+ """
8+
9+ import random
10+
11+
12+ def get_top_of_range () -> int :
13+ """
14+ Get the upper bound of the guessing range from the user.
15+
16+ >>> isinstance(get_top_of_range(), int)
17+ True
18+ """
19+ top_of_range = input ("Enter the upper bound number: " )
20+ if top_of_range .isdigit ():
21+ top_of_range = int (top_of_range )
22+ if top_of_range <= 0 :
23+ print ("Please enter a number larger than 0." )
24+ quit ()
25+ else :
26+ print ("Please enter a valid digit." )
27+ quit ()
28+ return top_of_range
29+
30+
31+ def get_guess () -> int :
32+ """
33+ Get a valid integer guess from the user.
34+
35+ >>> isinstance(get_guess(), int)
36+ True
37+ """
38+ while True :
39+ guess = input ("Please make a guess: " )
40+ if guess .isdigit ():
41+ return int (guess )
42+ print ("Please type a number next time." )
43+
44+
45+ def play_game (top_of_range : int ) -> int :
46+ """
47+ Play the number guessing game and return the number of guesses.
48+
49+ >>> import random
50+ >>> random.seed(42)
51+ >>> play_game(1)
52+ Whoa! You got it.
53+ 1
54+ """
55+ random_number = random .randint (0 , top_of_range )
56+ guesses = 0
57+
58+ while True :
59+ guesses += 1
60+ guess = get_guess ()
61+
62+ if guess == random_number :
63+ print ("Whoa! You got it." )
64+ break
65+ elif guess < random_number :
66+ print ("Too low! Try higher." )
67+ else :
68+ print ("Too high! Try lower." )
69+
70+ return guesses
71+
72+
73+ if __name__ == "__main__" :
74+ top = get_top_of_range ()
75+ total_guesses = play_game (top )
76+ print (f"You got it in { total_guesses } guesses!" )
0 commit comments