Welcome to Python :) **Readability** Firstly, Python doesn't require parentheses (`(..)`) around conditionals. So you can just say: while replay == 1: Secondly, too many comments make the code look messy and the reader learns to ignore them. Avoid commenting obvious code, for example: random = randint(0, max_value) #Generates a random int between 0 and max_value The comment is unnecessary. The code is self-explanatory enough, and if the reader doesn't know what `randint` does, it's time he/she learns it by themselves anyway. Assume the reader knows the language. Thirdly, logical separation of code into paragraphs greatly helps readability. A 'paragraph' should make a single 'point', and then you should have a blank line before the next paragraph. **Handling unwelcome scenarios** You should handle corner cases in your code. > "Any fool can write code that a computer can understand. > Good programmers write code that humans can understand." Martin Fowler For example, a possible corner case in your program is invalid user input. What happens when the user types 'bla' as a guessed number? A `ValueError` is raised and crashes your program. You can handle these situations using one of two approaches. Preferable approach: try: number = int(input()) except ValueError: print('Enter a valid integer.') else: # ... rest of the code. runs if the try block succeeded. Less preferable: number = input() if not isinstance(number, int): print('Enter a valid integer.') else: # ... rest of the code Even better, this could be put into a loop to allow the user to retry. It can even be made into a handy function! def get_user_int(message='Type a number: '): while True: try: print(message) return int(input()) # breaks out of the loop except ValueError: print('Enter a valid integer.') Than you can safely use `get_user_int` anywhere in your code. You can pass into it a custom message. **Result** Combining everything I mentioned, here's a possible outcome: # In this program, the user must try to guess a random number generated by the computer from random import randint def guess_game(): replay = 1 # Replay allows a user to replay the game without having to call the function again. # The values are: 1 = Replay, any other character = End while replay == 1: lives = get_user_int("How many lives would you like? ") max_value = get_user_int("Please choose the largest number that can be generated: ") rand_num = randint(0, max_value) num_of_guesses = 1 #keeps track of the number of guesses made by the user while num_of_guesses <= lives: guess = get_user_int("Please enter your guess: ") if guess == rand_num: print("Good guess, that is correct! You got the right answer on guess number", num_of_guesses, ", well done!\n") break else: print("Unlucky, that guess was incorrect. You have", (lives-num_of_guesses), "lives remaining.\n") num_of_guesses += 1 if num_of_guesses > lives: print("You have run out of guesses. The correct answer was:", rand_num) replay = int( input("\nWould you like to play again? Enter 1 for yes, any other character for no: ") ) if replay != 1: print("Thank you for playing. See you next time") def get_user_int(message='Enter a number: '): while True: try: return int(input(message)) except ValueError: print('Enter a valid number.') guess_game() Good luck :)