Why ask to try a different number if player is out of tries?

It didn't make sense to me that after a player has exhausted their number of guesses the game would still print out "Try a higher/lower number" before also saying "Sorry, you didn't get it..."

In order to eliminate that I added an if statement in the same indentation as the first while loop, but is there an easier way to do this?

```import random

def game():
secret_num = random.randint(1, 10)
guesses = []

while len(guesses) < 2:
try:
guess = int(input("Guess a number between 1 and 10: "))
except ValueError:
print("Sorry, that is not a number!")
else:
if guess == secret_num:
print("You got it! The secret numer is " + str(secret_num))
break
if guess > 10:
print("""GAME RULES:
Please choose a number from 1 through 10.""")
if guess > secret_num:
print("Try a lower number.")
else:
print("Try a higher number.")
guesses.append(guess)
if len(guesses) == 2:
try:
guess = int(input("Guess a number between 1 and 10: "))
except ValueError:
print("Sorry, that is not a number!")
else:
if guess == secret_num:
print("You got it! The secret number is " + str(secret_num))
if guess != secret_num:
print("Sorry, you didn't get it. The secret number was {}.".format(secret_num))

play_again = input("Do you want to play again? Y/n ")
if play_again.lower() != 'n':
game()
else:
print("Bye!")

game()
```

[MOD: added ```python markdown formatting -cf]

It looks like a chunk of code got replicated. There shouldn't be two places in the loop asking the same question. Also, be aware that when you add a line with the same indentation as the while, that makes the previous line the end of the loop and your new line comes after the loop.

Here's a revised version with the replicated part removed (and a few minor fixups):

```import random

def game():
secret_num = random.randint(1, 10)
guesses = []

while len(guesses) < 2:
try:
guess = int(input("Guess a number between 1 and 10: "))
except ValueError:
print("Sorry, that is not a number!")
else:
if guess == secret_num:
print("You got it! The secret number is " + str(secret_num))
break
if guess > 10:
print("""GAME RULES:
Please choose a number from 1 through 10.""")
continue
if guess > secret_num:
print("Try a lower number.")
else:
print("Try a higher number.")
guesses.append(guess)
if guess != secret_num:
print("Sorry, you didn't get it. The secret number was {}.".format(secret_num))
play_again = input("Do you want to play again? Y/n ")
if play_again.lower() != 'n':
game()
else:
print("Bye!")

game()
```

Thanks for your answer Steven. However, this still doesn't solve my problem. On the last try, the response should skip asking you to try a lower/higher number, and instead just tell you that you didn't get it right.

Just append the guess into guesses right after the user input and put the if len(guesses) == 3 inside the guess comparison.

```    while len(guesses) < 3:
try:
guess = int(input("Guess a number between 1 and 10: "))
except ValueError:
print("Sorry, that is not a number!")
else:
guesses.append(guess)
if guess == secret_num:
print("You got it! The secret numer is " + str(secret_num))
break
if guess > 10:
print("""GAME RULES:
Please choose a number from 1 through 10.""")
if guess > secret_num:
if len(guesses) == 3:
continue
else:
print("Try a lower number.")
elif guess < secret_num:
if len(guesses) == 3:
continue
else:
print("Try a higher number.")
else:
print("Sorry, you didn't get it. The secret number was {}.".format(secret_num))
```

My solution is similar to Kiko's, but I created a tries variable so that if you wanted to change the number of tries the player had, you would only have to change the number once in your code.

I append guess to guesses after testing to see if guess == secret_num; the lower or higher suggestions will only print out if the player has any remaining tries. If not, the else block will run, telling the player they did not guess correctly. I tried pretty hard to break the program after this addition, and I couldn't, so I think it's solid.

```import random

def game():
# generate a random number between 1 and 10
secret_num = random.randint(1, 10)
guesses = []
tries = 5

while len(guesses) < tries:
guess = input("Guess a number between 1 and 10: ")
try:
# get a number guess from the player
guess = int(guess)
except ValueError:
print("{} isn't a number!".format(guess))
else:
# compare guess to secret number
if guess == secret_num:
# print hit/miss
print("You got it! My number was {}.".format(secret_num))
break
guesses.append(guess)
if len(guesses) < tries:
if guess < secret_num:
print("My number is higher than {}.".format(guess))
elif guess > secret_num:
print("My number is lower than {}.".format(guess))
else:
print("You didn't guess it! My number was {}.".format(secret_num))

play_again = input("Do you want to play again? Y/n ")
if play_again.lower() != 'n':
game()
else:
print("Bye!")
game()
```