Welcome, guest | Sign In | My Account | Store | Cart

Here is my version of the Game of Hangman in Python. I worte for my blog Captain DeadBones Chronicles

Python, 80 lines
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 import random board = [ ' +---+ \n | | \n | \n | \n | \n | \n========= \n', ' +---+ \n | | \n 0 | \n | \n | \n | \n========= \n', ' +---+ \n | | \n 0 | \n | | \n | \n | \n========= \n', ' +---+ \n | | \n 0 | \n /| | \n | \n | \n========= \n', ' +---+ \n | | \n 0 | \n /|\\ | \n | \n | \n========= \n', ' +---+ \n | | \n 0 | \n /|\\ | \n / | \n | \n========= \n', ' +---+ \n | | \n 0 | \n /|\\ | \n / \\ | \n | \n========= \n' ] class Hangman: def __init__(self,word): self.word = word self.missed_letters = [] self.guessed_letters = [] def guess(self,letter): if letter in self.word and letter not in self.guessed_letters: self.guessed_letters.append(letter) elif letter not in self.word and letter not in self.missed_letters: self.missed_letters.append(letter) else: return False return True def hangman_over(self): return self.hangman_won() or (len(self.missed_letters) == 6) def hangman_won(self): if '_' not in self.hide_word(): return True return False def hide_word(self): rtn = '' for letter in self.word: if letter not in self.guessed_letters: rtn += '_' else: rtn += letter return rtn def print_game_status(self): print board[len(self.missed_letters)] print 'Word: ' + self.hide_word() print 'Letters Missed: ', for letter in self.missed_letters: print letter, print print 'Letters Guessed: ', for letter in self.guessed_letters: print letter, print def rand_word(): bank = ['the','living','pearl','.com','captain','deadbones'] return bank[random.randint(0,len(bank))] def main(): game = Hangman(rand_word()) while not game.hangman_over(): game.print_game_status() user_input = raw_input('\nEnter a letter: ') game.guess(user_input) game.print_game_status() if game.hangman_won(): print '\nCongratulations! You are the winner of Hangman!' else: print '\nSorry, you have lost in the game of Hangman...' print 'The word was ' + game.word print '\nGoodbye!\n' if __name__ == "__main__": main()

jay 10 years, 10 months ago

As a beginner i find your chronicles and code a good resource. One could learn alot from you. Thank you i look forward to more of your articles and code.

regards jay.

Fan Risun 10 years, 10 months ago

I have error in line 60,it says:list index out of range. And I check the help about random.randint(a, b) : Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).

So should I use the (0,(len(bank)-1)) #means (0,5) instead (0,len(bank)) #means(0,6) because use the latter, it may appear the integer 6, but it is not allowed in bank[i]

neftas 10 years, 10 months ago

Hey there! I read your script and ran it a few times, enjoyed it. I noticed that you can enter any amount of characters you want, so user_imput 'random amount of characters' also gets added to self.missed_letters. So I added a few lines of code to fix that.

def main():

game = Hangman(rand_word())
while not game.hangman_over():
game.print_game_status()
user_input = raw_input('\nEnter a letter: ')
if len(user_input) >= 2:
while True:
print "\nEnter only ONE letter at a time!\n"
try_again = raw_input('Try again: ')
if len(try_again) == 1:
game.guess(try_again)
break
else:
continue
else:
game.guess(user_input)
Captain DeadBones (author) 10 years, 10 months ago

Thank you all for your comments. I am glad you are downloading the code and modifying it. I try to keep everything as simple as I can so you can get a chance to better understand what is going on and tweak things yourself.

Kaneki ken 8 years, 10 months ago

i have an error on line 67. The variable raw_input isn't defined. im not that good at python so i dont really know what to put :(

 Created by Captain DeadBones on Thu, 6 Jun 2013 (MIT)