Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def get_secret_word():
- '''
- This function gets a valid secret word from the user and returns it.
- The word is valid if it does not contain question marks and whitespace.
- '''
- while True:
- try:
- secret_word = input(('Please enter a word to be guessed\n'
- 'that does not contain ? or white space: ')).lower()
- except:
- pass
- if any([i == '?' or i == ' ' or i == '\t' or i == '\n' for i in secret_word]):
- continue
- break
- print('\n'*30)
- return secret_word
- #end get_secret_word
- def is_game_over(display_guesses, num_of_incorrect_guesses, turns, guesses, secret_word, hidden_str):
- '''
- @returns: True if the game is over
- and false otherwise
- '''
- if correct_guess(hidden_str, secret_word):
- return True
- elif max_guesses_reached(num_of_incorrect_guesses, secret_word):
- return True
- else:
- return False
- #end is_game_over
- def correct_guess(hidden_str, secret_word):
- hidden_word = list(hidden_str)
- for i, letter in enumerate(hidden_word):
- if letter is not '?':
- print('You correctly guessed the secret word:', secret_word)
- return True
- else:
- return False
- #end correct_guess
- def max_guesses_reached(num_of_incorrect_guesses, secret_word):
- if int(num_of_incorrect_guesses) == 7:
- print('You failed to guess the secret word:', secret_word)
- return True
- else:
- return False
- #end max_guesses_reached
- def display_hangman(num_of_incorrect_guesses):
- '''
- displays the current figure of hangman
- first wrong guess corresponds to the rope
- @returns: body part
- '''
- num_of_incorrect_guesses = int(num_of_incorrect_guesses)
- if num_of_incorrect_guesses == 0:
- print('\n')
- if num_of_incorrect_guesses >= 1:
- print(' | ', end = '\n')
- if num_of_incorrect_guesses >= 2:
- print(' 0 ', end = '\n')
- if num_of_incorrect_guesses >= 3:
- print('/',end = '')
- if num_of_incorrect_guesses >= 4:
- print('|', end = '')
- if num_of_incorrect_guesses >= 5:
- print('\\', end = '\n')
- if num_of_incorrect_guesses >= 6:
- print('/',end = ' ')
- if num_of_incorrect_guesses >= 7:
- print('\\', end = '\n')
- else:
- pass
- #end display_hangman
- def display_guesses(guesses):
- '''
- displays the guesses the user has made in alphabetical order
- @returns: guessed letters
- '''
- sorted_guesses = sorted(guesses)
- print('So far you have guessed:', ', '.join(sorted_guesses))
- #end display_guesses
- def check_guess(guesses, secret_word, hidden_str, num_of_incorrect_guesses):
- '''
- checks whether a guess is right or wrong
- returns True when right
- false otherwise
- '''
- hidden_word = list(secret_word)
- while 0 <= int(num_of_incorrect_guesses) <= 7:
- for i, letter in enumerate(hidden_word):
- if letter in guesses:
- return True
- if letter not in guesses:
- return False
- #end check_guess
- def hidden_word(check_guess, secret_word, guesses):
- '''
- displays the word with letters and/or ?'s as needed
- '''
- hidden_word = list(secret_word)
- if check_guess is True:
- for i, letter in enumerate(hidden_word):
- if letter in guesses:
- hidden_word[i] = secret_word[i]
- hidden_str = ''.join(hidden_word)
- else:
- for i, letter in enumerate(hidden_word):
- if letter not in guesses:
- hidden_word[i] = '?'
- hidden_str = ''.join(hidden_word)
- print('\n'+hidden_str)
- #end hidden_word
- def num_of_wrong_guesses(check_guess, num_of_incorrect_guesses):
- '''
- counts the number of wrong guesses
- '''
- if check_guess is False:
- return num_of_incorrect_guesses + 1
- #end num_of_wrong_guesses
- def get_guess(secret_word, guesses, turns):
- '''
- get a valid guess from the user
- '''
- while True:
- try:
- guess = input('Please enter your next guess: ').lower().strip()
- except:
- pass
- if any([i == '?' for i in secret_word]):
- print('You must enter a guess.')
- continue
- if guess in guesses:
- print('You already guessed the character:', guess)
- continue
- if len(guess) > 1:
- print('You can only guess a single character.')
- continue
- else:
- guesses = guesses.append(guess)
- break
- return guesses
- #end get_guess
- def main():
- guesses = []
- turns = 1
- num_of_incorrect_guesses = 0
- secret_word = get_secret_word()
- hidden_str = []
- while not is_game_over(display_guesses, num_of_incorrect_guesses, turns, guesses, secret_word, hidden_str):
- check_guess(guesses, secret_word, hidden_str, num_of_incorrect_guesses)
- num_of_wrong_guesses(check_guess, num_of_incorrect_guesses)
- display_hangman(num_of_incorrect_guesses)
- hidden_word(check_guess, secret_word, guesses)
- display_guesses(guesses)
- print(num_of_incorrect_guesses)
- get_guess(secret_word, guesses, turns)
- turns += 1
- #end main
- if __name__ == '__main__': #if this is the main program run
- main() #run the main function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement