Опубликован: 12.07.2013 | Доступ: свободный | Студентов: 735 / 20 | Длительность: 37:41:00
Теги:
Лекция 9:

# Hangman

Аннотация: In this chapter, we will actually write out the code for Hangman.

### Topics Covered In This Chapter:

• Methods
• The append() list method
• The lower() and upper() string methods
• The reverse() list method
• The split() string method
• The range() function
• The list() function
• for loops
• elif statements
• The startswith() and endswith() string methods.
• The dictionary data type.
• key-value pairs
• The keys() and values() dictionary methods
• Multiple variable assignment, such as a, b, c = [1, 2, 3]

This game introduces many new concepts. But don't worry; we'll experiment with these programming concepts in the interactive shell first. Some data types such as strings and lists have functions that are associated with their values called methods. We will learn several different methods that can manipulate strings and lists for us. We will also learn about a new type of loop called a for loop and a new type of data type called a dictionary. Once you understand these concepts, it will be much easier to understand the game in this chapter: Hangman.

#### Hangman's Source Code

This chapter's game is a bit longer than our previous games. You can either type in the code below directly into the file editor (which I recommend) or you can obtain the code from this book's website. To grab the code from the web, in a web browser go to the URL http://inventwithpython.com/chapter9 and follow the instructions for downloading the source code.

hangman.py

If you get errors after typing this code in, compare it to the book's code with the online

diff tool at http://inventwithpython.com/diff or email the author at

al@inventwithpython.com

```1.  import random
2.  HANGMANPICS = [ ' ' '
3.
4.    +---+
5.    |   |
6.        |
7.        |
8.        |
9.        |
10. =========''', '''
11.
12.   +---+
13.   |   |
14.   O   |
15.       |
16.       |
17.       |
18. =========''', '''
19.
20.   +---+
21.   |   |
22.   O   |
23.   |   |
24.       |
25.       |
26. =========''', '''
27.
28.   +---+
29.   |   |
30.   O   |
31.  /|   |
32.       |
33.       |
34. =========''', '''
35.
36.   +---+
37.   |   |
38.   O   |
39.  /|\  |
40.       |
41.       |
42. =========''', '''
43.
44.   +---+
45.   |   |
46.   O   |
47.  /|\  |
48.  /    |
49.       |
50. =========''', '''
51.
52.   +---+
53.   |   |
54.   O   |
55.  /|\  |
56.  / \  |
57.       |
58. =========''']
59. words = 'ant baboon badger bat bear beaver camel cat clam cobra cougar coyote crow deer
dog donkey duck eagle ferret fox frog goat goose hawk lion lizard llama mole monkey
moose mouse mule newt otter owl panda parrot pigeon python rabbit ram rat raven rhino
salmon seal shark sheep skunk sloth snake spider stork swan tiger toad trout turkey
turtle weasel whale wolf wombat zebra'.split()
60.
61. def getRandomWord(wordList):
62.     # This function returns a random string from the passed list of strings.
63.     wordIndex = random.randint(0, len(wordList) - 1)
64.     return wordList[wordIndex]
65.
66. def displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord):
67.     print(HANGMANPICS[len(missedLetters)])
68.     print()
69.
70.     print('Missed letters:', end=' ')
71.     for letter in missedLetters:
72.         print(letter, end=' ')
73.     print()
74.
75.     blanks = '_' * len(secretWord)
76.
77.     for i in range(len(secretWord)): # replace blanks with correctly guessed letters
78.         if secretWord[i] in correctLetters:
79.             blanks = blanks[:i] + secretWord[i] + blanks [i+1:]
80.
81.     for letter in blanks: # show the secret word with spaces in between each letter
82.                      print(letter, end=' ')
83.            print() 84.
86.     # Returns the letter the player entered. This function makes sure the player
entered a single letter, and not something else.
87.     while True:
88.         print('Guess a letter.')
89.         guess = input()
90.         guess = guess.lower()
91.         if len(guess) != 1:
92.             print('Please enter a single letter.')
94.             print('You have already guessed that letter. Choose again.')
95.         elif guess not in 'abcdefghijklmnopqrstuvwxyz':
97.         else:
98.             return guess 99.
100. def playAgain():
101.     # This function returns True if the player wants to play again, otherwise it returns False.
102.     print('Do you want to play again? (yes or no)')
103.     return input().lower().startswith('y')
104.
105.
106. print('H A N G M A N')
107. missedLetters = ''
108. correctLetters = ''
109. secretWord = getRandomWord(words)
110. gameIsDone = False 111.
112. while True:
113.     displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord)
114.
115.     # Let the player type in a letter.
116.     guess = getGuess(missedLetters + correctLetters)
117.
118.     if guess in secretWord:
119.         correctLetters = correctLetters + guess
120.
121.         # Check if the player has won
122.         foundAllLetters = True
123.         for i in range(len(secretWord)):
124.             if secretWord[i] not in correctLetters:
125.                 foundAllLetters = False
126.                 break
127.         if foundAllLetters:
128.             print('Yes! The secret word is "' + secretWord + '"! You have won!')
129.             gameIsDone = True
130.    else:
131.        missedLetters = missedLetters + guess
132.
133.         # Check if player has guessed too many times and lost
134.          if len(missedLetters) == len(HANGMANPICS) - 1:
135.             displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord)
136.             print('You have run out of guesses!\nAfter ' + str(len(missedLetters)) + ' missed guesses and ' +
str(len (correctLetters)) + ' correct guesses, the word was "' + secretWord + '"')
137.             gameIsDone = True
138 .
139.     # Ask the player if they want to play again (but only if the game is done).
140.      if gameIsDone:
141.          if playAgain() :
142.             missedLetters = ''
143.             correctLetters = ''
144.             gameIsDone = False
145.              secretWord = getRandomWord(words)
146.        else:
147.                             break
```

#### How the Code Works

```1. import random
```

The Hangman program is going to randomly select a secret word from a list of secret words. This means we will need the random module imported.

```2.  HANGMANPICS = [ ' ' '
3.
4.    +---+
5.    |   |
6.        |
7.        |
8.        |
9.        |
10. =========''', '''
```

...the rest of the code is too big to show here...

This "line" of code a simple variable assignment, but it actually stretches over several real lines in the source code. The actual "line" doesn't end until line 58. To help you understand what this code means, you should learn about multi-line strings and lists:

Μаксим Εфремов
 Россия