A while ago I had a problem to solve:
Write a program to guess a number between 1 and 1,000,000 in python.
This is a simple learning program, done in high school or university, particularly when learning a programming language.
The Problem
The problem can be translated in the following parts:
-
Generate a number between 0 and 1,000,000
-
When the user enters a number do one of the following:
- If the number is the one above, notify the user and terminate the program
- Otherwise, display a hint to the user if the entered number is lower or higher than the generated one and repeat the cycle (allow user to enter another number)
-
Allow user to play the game again
The Solution
A Game
Let's write the code allowing the user to play one game. First step is to generate the number to be guessed:
x = random.randint(1,1000000)
Once we have that, we create the loop that allows user to enter a number:
n = x + 1 # make sure we get into the loop
while n != x:
n = input(str("Input Number 'n': "))
We check the entered result against x and display the notifications (still in the loop):
if n < x:
print("Too Low, Try Again")
elif n > x:
print("Too High, Try Again")
We also check the equality (via an else to the same if statement):
else:
print("Congrats")
break
Here we also exit the loop.
Multiple Games
If we wrap all of the above code in a function:
def guess():
x = random.randint(1,1000000)
n = x + 1 # make sure we get into the loop
while n != x:
n = input(str("Input Number 'n': "))
if n < x:
print("Too Low, Try Again")
elif n > x:
print("Too High, Try Again")
else:
print("Congrats")
break
we can then just call it in a loop off the main code:
if __name__ == '__main__':
while True:
guess()
again = input(str("Play Again Y/N?: ") == 'N'
# Exit the program if we don't want to try the game again
#
if not again:
break
The while loop is quite simple; loop until the user types N and then break out of it.
The if name == 'main': line ensures the code underneath is executed only when the script it's written in is called. This allows us to call the guess() function from other scripts/modules without worrying that the loop is executed.
The Full Code
import random
def guess():
x = random.randint(1,1000000)
n = x + 1 # make sure we get into the loop
while n != x:
n = input(str("Input Number 'n': "))
if n < x:
print("Too Low, Try Again")
elif n > x:
print("Too High, Try Again")
else:
print("Congrats")
break
if __name__ == '__main__':
while True:
guess()
again = input(str("Play Again Y/N?: ") == 'N'
if not again:
break
HTH,
Member discussion: