Hướng dẫn hangman python with functions - trăn hangman với các chức năng

8WRITING THE HANGMAN CODE

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

This chapter’s game introduces many new concepts, but don’t worry: you’ll experiment with them in the interactive shell before actually programming the game. You’ll learn about methods, which are functions attached to values. You’ll also learn about a new data type called a list. Once you understand these concepts, it will be much easier to program Hangman.

Source Code for Hangman

This chapter’s game is a bit longer than the previous games, but much of it is the ASCII art for the hanging man pictures. Enter the following into the file editor and save it as hangman.py. If you get errors after entering the following code, compare the code you typed to the book’s code with the online diff tool at https://www.nostarch.com/inventwithpython#diff.

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

hangman.py

  1. import random
  2. HANGMAN_PICS = ['''
  3.   +---+
  4.       |
  5.       |
  6.       |
  7.      ===''', '''
  8.   +---+
  9.   O   |
 10.       |
 11.       |
 12.      ===''', '''
 13.   +---+
 14.   O   |
 15.   |   |
 16.       |
 17.      ===''', '''
 18.   +---+
 19.   O   |
 20.  /|   |
 21.       |
 22.      ===''', '''
 23.   +---+
 24.   O   |
 25.  /|\  |
 26.       |
 27.      ===''', '''
 28.   +---+
 29.   O   |
 30.  /|\  |
 31.  /    |
 32.      ===''', '''
 33.   +---+
 34.   O   |
 35.  /|\  |
 36.  / \  |
 37.      ===''']
 38. 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()
 39.
 40. def getRandomWord(wordList):
 41.     # This function returns a random string from the passed list of
           strings.
 42.     wordIndex = random.randint(0, len(wordList) - 1)
 43.     return wordList[wordIndex]
 44.
 45. def displayBoard(missedLetters, correctLetters, secretWord):
 46.     print(HANGMAN_PICS[len(missedLetters)])
 47.     print()
 48.
 49.     print('Missed letters:', end=' ')
 50.     for letter in missedLetters:
 51.         print(letter, end=' ')
 52.     print()
 53.
 54.     blanks = '_' * len(secretWord)
 55.
 56.     for i in range(len(secretWord)): # Replace blanks with correctly
           guessed letters.
 57.         if secretWord[i] in correctLetters:
 58.             blanks = blanks[:i] + secretWord[i] + blanks[i+1:]
 59.
 60.     for letter in blanks: # Show the secret word with spaces in between
           each letter.
 61.         print(letter, end=' ')
 62.     print()
 63.
 64. def getGuess(alreadyGuessed):
 65.     # Returns the letter the player entered. This function makes sure the
           player entered a single letter and not something else.
 66.     while True:
 67.         print('Guess a letter.')
 68.         guess = input()
 69.         guess = guess.lower()
 70.         if len(guess) != 1:
 71.             print('Please enter a single letter.')
72.         elif guess in alreadyGuessed:
 73.             print('You have already guessed that letter. Choose again.')
 74.         elif guess not in 'abcdefghijklmnopqrstuvwxyz':
 75.             print('Please enter a LETTER.')
 76.         else:
 77.             return guess
 78.
 79. def playAgain():
 80.     # This function returns True if the player wants to play again;
           otherwise, it returns False.
 81.     print('Do you want to play again? (yes or no)')
 82.     return input().lower().startswith('y')
 83.
 84.
 85. print('H A N G M A N')
 86. missedLetters = ''
 87. correctLetters = ''
 88. secretWord = getRandomWord(words)
 89. gameIsDone = False
 90.
 91. while True:
 92.     displayBoard(missedLetters, correctLetters, secretWord)
 93.
 94.     # Let the player enter a letter.
 95.     guess = getGuess(missedLetters + correctLetters)
 96.
 97.     if guess in secretWord:
 98.         correctLetters = correctLetters + guess
 99.
100.         # Check if the player has won.
101.         foundAllLetters = True
102.         for i in range(len(secretWord)):
103.             if secretWord[i] not in correctLetters:
104.                 foundAllLetters = False
105.                 break
106.         if foundAllLetters:
107.             print('Yes! The secret word is "' + secretWord +
                   '"! You have won!')
108.             gameIsDone = True
109.     else:
110.         missedLetters = missedLetters + guess
111.
112.         # Check if player has guessed too many times and lost.
113.         if len(missedLetters) == len(HANGMAN_PICS) - 1:
114.             displayBoard(missedLetters, correctLetters, secretWord)
115.             print('You have run out of guesses!\nAfter ' +
                   str(len(missedLetters)) + ' missed guesses and ' +
                   str(len(correctLetters)) + ' correct guesses,
                   the word was "' + secretWord + '"')
116.             gameIsDone = True
117.
118.     # Ask the player if they want to play again (but only if the game is
           done).
119.     if gameIsDone:
120.         if playAgain():
121.             missedLetters = ''
122.             correctLetters = ''
123.             gameIsDone = False
124.             secretWord = getRandomWord(words)
125.         else:
126.             break

Nhập mô -đun ngẫu nhiên

Chương trình Hangman chọn ngẫu nhiên một từ bí mật để người chơi đoán từ danh sách các từ. Mô -đun ngẫu nhiên sẽ cung cấp khả năng này, vì vậy dòng 1 nhập nó.random module will provide this ability, so line 1 imports it.

1. Nhập ngẫu nhiên

Nhưng biến Hangman_Pics trên dòng 2 trông hơi khác so với các biến mà chúng tôi đã thấy cho đến nay. Để hiểu mã này có nghĩa là gì, chúng ta cần tìm hiểu về một vài khái niệm nữa.HANGMAN_PICS variable on line 2 looks a little different from the variables we’ve seen so far. In order to understand what this code means, we need to learn about a few more concepts.

Không biến đổi

Dòng 2 đến 37 là một câu lệnh gán dài cho biến Hangman_PICS.HANGMAN_PICS variable.

2. Hangman_Pics = ['' '3. & nbsp; & nbsp; & nbsp;+---+4. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; | 6. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; -37. & Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; === '' '']]]
3.   +---+
4.       |
5.       |
6.       |
7.      ===''', '''
--snip--
37.     ===''']

Tên biến Hangman_Pics tên có trong tất cả các chữ cái chữ hoa. Đây là quy ước lập trình cho các biến không đổi. Hằng số là các biến có nghĩa là có các giá trị không bao giờ thay đổi từ câu lệnh gán đầu tiên của chúng. Mặc dù bạn có thể thay đổi giá trị trong Hangman_Pics giống như bạn có thể cho bất kỳ biến nào khác, tên tất cả các UPPERCase nhắc bạn không nên làm như vậy.HANGMAN_PICS variable’s name is in all uppercase letters. This is the programming convention for constant variables. Constants are variables meant to have values that never change from their first assignment statement. Although you can change the value in HANGMAN_PICS just as you can for any other variable, the all-uppercase name reminds you not to do so.

Như với tất cả các quy ước, bạn không cần phải tuân theo cái này. Nhưng làm như vậy giúp các lập trình viên khác dễ dàng đọc mã của bạn hơn. Họ sẽ biết rằng Hangman_pics sẽ luôn có giá trị được gán từ dòng 2 đến 37.HANGMAN_PICS will always have the value it was assigned from lines 2 to 37.

Danh sách loại dữ liệu

Hangman_Pics chứa một số chuỗi đa dòng. Nó có thể làm điều này bởi vì nó là một danh sách. Danh sách có giá trị danh sách có thể chứa một số giá trị khác. Nhập cái này vào vỏ tương tác: contains several multiline strings. It can do this because it’s a list. Lists have a list value that can contain several other values. Enter this into the interactive shell:

>>> Động vật = ['Aardvark', 'Anater', 'Antelope', 'Albert'] >>> Động vật ['Aardvark', 'Anater', 'Antelope', 'Albert']]animals = ['aardvark', 'anteater', 'antelope', 'albert']
>>> animals
['aardvark', 'anteater', 'antelope', 'albert']

Giá trị danh sách ở động vật chứa bốn giá trị. Danh sách các giá trị bắt đầu bằng một khung vuông bên trái, [và kết thúc bằng một khung vuông bên phải,]. Điều này giống như cách các chuỗi bắt đầu và kết thúc trong dấu ngoặc kép.animals contains four values. List values begin with a left square bracket, [, and end with a right square bracket, ]. This is like how strings begin and end in quotation marks.

Dấu phẩy tách các giá trị riêng lẻ bên trong danh sách. Các giá trị này cũng được gọi là các mục. Mỗi mục trong Hangman_Pics là một chuỗi đa dòng.HANGMAN_PICS is a multiline string.

Danh sách cho phép bạn lưu trữ một số giá trị mà không cần sử dụng một biến cho từng giá trị. Không có danh sách, mã sẽ trông như thế này:

>>> Động vật1 = 'Aardvark' >>> Động vật2 = 'Anater' >>> Động vật3 = 'Antelope' >>> Động vật4 = 'Albert'animals1 = 'aardvark'
>>> animals2 = 'anteater'
>>> animals3 = 'antelope'
>>> animals4 = 'albert'

Mã này sẽ khó quản lý nếu bạn có hàng trăm hoặc hàng ngàn chuỗi. Nhưng một danh sách có thể dễ dàng chứa bất kỳ số lượng giá trị nào.

Truy cập các mục với các chỉ mục

Bạn có thể truy cập một mục bên trong danh sách bằng cách thêm dấu ngoặc vuông vào cuối biến danh sách với một số giữa chúng. Số lượng giữa dấu ngoặc vuông là chỉ mục. Trong Python, chỉ số của mục đầu tiên trong danh sách là 0. Mục thứ hai là tại INDEX 1, mục thứ ba là tại Index 2, v.v. Bởi vì các chỉ mục bắt đầu ở 0 chứ không phải 1, chúng tôi nói rằng danh sách Python không được lập chỉ mục.0. The second item is at index 1, the third item is at index 2, and so on. Because the indexes begin at 0 and not 1, we say that Python lists are zero indexed.

Trong khi chúng tôi vẫn còn trong vỏ tương tác và làm việc với danh sách động vật, hãy nhập động vật [0], động vật [1], động vật [2] và động vật [3] để xem chúng đánh giá như thế nào:animals list, enter animals[0], animals[1], animals[2], and animals[3] to see how they evaluate:

>>> Động vật [0] 'Aardvark' >>> Động vật [1] 'Anater' >>> Động vật [2] 'Antelope' >>> Động vật [3] 'Albert'animals[0]
'aardvark'
>>> animals[1]
'anteater'
>>> animals[2]
'antelope'
>>> animals[3]
'albert'

Lưu ý rằng giá trị đầu tiên trong danh sách, 'AardVark', được lưu trữ trong INDEX 0 và không chỉ mục 1. Mỗi mục trong danh sách được đánh số theo thứ tự bắt đầu từ 0.'aardvark', is stored in index 0 and not index 1. Each item in the list is numbered in order starting from 0.

Sử dụng dấu ngoặc vuông, bạn có thể xử lý các mục trong danh sách giống như bất kỳ giá trị nào khác. Ví dụ, nhập động vật [0] + động vật [2] vào vỏ tương tác:animals[0] + animals[2] into the interactive shell:

>>> Động vật [0] + Động vật [2] 'Aardvarkantelope'animals[0] + animals[2]
'aardvarkantelope'

Cả hai biến tại các chỉ mục 0 và 2 của động vật là các chuỗi, do đó các giá trị được nối. Việc đánh giá trông như thế này:0 and 2 of animals are strings, so the values are concatenated. The evaluation looks like this:

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

Các chỉ mục ngoài phạm vi và IndexError

Nếu bạn thử truy cập một chỉ mục quá cao để nằm trong danh sách, bạn sẽ nhận được một indexError sẽ làm hỏng chương trình của bạn. Để xem ví dụ về lỗi này, hãy nhập phần sau vào vỏ tương tác:IndexError that will crash your program. To see an example of this error, enter the following into the interactive shell:

>>> Động vật = ['Aardvark', 'Anateater', 'Antelope', 'Albert'] >>> Động vật [9999] Traceback (cuộc gọi gần đây nhất) & nbsp; & nbsp; & nbsp; động vật [9999] IndexError: Danh sách chỉ mục ra khỏi phạm vianimals = ['aardvark', 'anteater', 'antelope', 'albert']
>>> animals[9999]
Traceback (most recent call last):
  File "", line 1, in
    animals[9999]
IndexError: list index out of range

Vì không có giá trị tại INDEX 9999, bạn gặp lỗi.9999, you get an error.

Thay đổi danh sách các mục bằng chỉ số phân công

Bạn cũng có thể thay đổi giá trị của một mục trong danh sách bằng cách sử dụng gán chỉ mục. Nhập phần sau vào vỏ tương tác:

>>> Động vật = ['Aardvark', 'Anater', 'Antelope', 'Albert'] >>> Động vật [1] = 'Anater' >>> Động vật ['Aardvark', 'Anateater', 'Antelope', 'Albert']animals = ['aardvark', 'anteater', 'antelope', 'albert']
>>> animals[1] = 'ANTEATER'
>>> animals
['aardvark', 'ANTEATER', 'antelope', 'albert']

Chuỗi 'Anteater' mới ghi đè vật phẩm thứ hai trong danh sách động vật. Vì vậy, việc gõ động vật [1] tự đánh giá mục thứ hai hiện tại của Danh sách, nhưng sử dụng nó ở phía bên trái của toán tử gán gán một giá trị mới cho mục thứ hai của danh sách.'ANTEATER' string overwrites the second item in the animals list. So typing animals[1] by itself evaluates to the list’s current second item, but using it on the left side of an assignment operator assigns a new value to the list’s second item.

Danh sách Concatenation

Bạn có thể tham gia một số danh sách vào một danh sách bằng toán tử +, giống như bạn có thể với các chuỗi. Làm như vậy được gọi là liên kết danh sách. Để xem điều này trong hành động, hãy nhập phần sau vào vỏ tương tác:+ operator, just as you can with strings. Doing so is called list concatenation. To see this in action, enter the following into the interactive shell:

>>> [1, 2, 3, 4] + ['Táo', 'Oranges'] + ['Alice', 'Bob'] [1, 2, 3, 4, 'Táo', 'Oranges', ' Alice ',' Bob '][1, 2, 3, 4] + ['apples', 'oranges'] + ['Alice', 'Bob']
[1, 2, 3, 4, 'apples', 'oranges', 'Alice', 'Bob']

['Táo'] + ['Oranges'] sẽ đánh giá thành ['Táo', 'Oranges']. Nhưng ['táo'] + 'cam' sẽ dẫn đến lỗi. Bạn có thể thêm giá trị danh sách và giá trị chuỗi với toán tử +. Nếu bạn muốn thêm các giá trị vào cuối danh sách mà không cần sử dụng danh sách Concatenation, hãy sử dụng phương thức append () (được mô tả trong các phương thức list () và append () Danh sách trên trang 95). will evaluate to ['apples', 'oranges']. But ['apples'] + 'oranges' will result in an error. You can’t add a list value and a string value with the + operator. If you want to add values to the end of a list without using list concatenation, use the append() method (described in “The reverse() and append() List Methods” on page 95).

Các nhà điều hành trong

Toán tử trong có thể cho bạn biết liệu một giá trị có nằm trong danh sách hay không. Các biểu thức sử dụng toán tử trong trả về giá trị boolean: true nếu giá trị nằm trong danh sách và sai nếu nó không phải là. Nhập phần sau vào vỏ tương tác:in operator can tell you whether a value is in a list or not. Expressions that use the in operator return a Boolean value: True if the value is in the list and False if it isn’t. Enter the following into the interactive shell:

>>> Động vật = ['Aardvark', 'Anater', 'Antelope', 'Albert'] >>> 'Antelope' ở động vật >>> '' Ant 'ở động vậtanimals = ['aardvark', 'anteater', 'antelope', 'albert']
>>> 'antelope' in animals
True
>>> 'ant' in animals
False

Biểu thức 'linh dương' ở động vật trở lại đúng vì chuỗi 'linh dương' là một trong những giá trị trong danh sách động vật. Nó được đặt tại Index 2. Nhưng khi bạn nhập biểu thức 'kiến' ở động vật, nó sẽ trả về sai vì chuỗi 'kiến' không tồn tại trong danh sách.'antelope' in animals returns True because the string 'antelope' is one of the values in the animals list. It is located at index 2. But when you enter the expression 'ant' in animals, it returns False because the string 'ant' doesn’t exist in the list.

Nhà điều hành trong cũng hoạt động cho các chuỗi, kiểm tra xem một chuỗi có tồn tại trong một chuỗi khác không. Nhập phần sau vào vỏ tương tác:in operator also works for strings, checking whether one string exists in another. Enter the following into the interactive shell:

>>> 'Xin chào' trong 'Alice nói xin chào với Bob.'true'hello' in 'Alice said hello to Bob.'
True

Lưu trữ một danh sách các chuỗi đa dòng trong biến Hangman_PICS bao gồm rất nhiều khái niệm. Ví dụ: bạn đã thấy rằng danh sách này rất hữu ích cho việc lưu trữ nhiều giá trị trong một biến duy nhất. Bạn cũng đã học được một số kỹ thuật để làm việc với các danh sách, chẳng hạn như gán chỉ mục và kết nối danh sách. Các phương pháp là một khái niệm mới khác mà bạn sẽ học cách sử dụng trong trò chơi Hangman; Chúng tôi sẽ khám phá chúng tiếp theo.HANGMAN_PICS variable covered a lot of concepts. For example, you saw that lists are useful for storing multiple values in a single variable. You also learned some techniques for working with lists, such as index assignment and list concatenation. Methods are another new concept you’ll learn how to use in the Hangman game; we’ll explore them next.

Phương thức gọi

Một phương thức là một hàm được gắn vào một giá trị. Để gọi một phương thức, bạn phải gắn nó vào một giá trị cụ thể bằng khoảng thời gian. Python có nhiều phương pháp hữu ích và chúng tôi sẽ sử dụng một số trong số chúng trong chương trình Hangman.

Nhưng trước tiên, hãy để Lôi nhìn vào một số phương thức danh sách và chuỗi.

Phương thức list () và append ()

Kiểu dữ liệu danh sách có một vài phương thức mà bạn có thể sử dụng rất nhiều: Reverse () và append (). Phương thức đảo ngược () sẽ đảo ngược thứ tự của các mục trong danh sách. Hãy thử nhập spam = [1, 2, 3, 4, 5, 6, 'meow', 'woof'], sau đó spam.reverse () để đảo ngược danh sách. Sau đó nhập thư rác để xem nội dung của biến.reverse() and append(). The reverse() method will reverse the order of the items in the list. Try entering spam = [1, 2, 3, 4, 5, 6, 'meow', 'woof'], and then spam.reverse() to reverse the list. Then enter spam to view the contents of the variable.

>>> spam = [1, 2, 3, 4, 5, 6, 'meow', 'woof'] >>> spam.reverse () >>> spam ['woof', 'meow', 6, 5 , 4, 3, 2, 1]spam = [1, 2, 3, 4, 5, 6, 'meow', 'woof']
>>> spam.reverse()
>>> spam
['woof', 'meow', 6, 5, 4, 3, 2, 1]

Phương thức danh sách phổ biến nhất mà bạn sẽ sử dụng là append (). Phương thức này sẽ thêm giá trị bạn chuyển làm đối số vào cuối danh sách. Hãy thử nhập phần sau vào vỏ tương tác:append(). This method will add the value you pass as an argument to the end of the list. Try entering the following into the interactive shell:

>>> trứng = [] >>> trứng. ]eggs = []
>>> eggs.append('hovercraft')
>>> eggs
['hovercraft']
>>> eggs.append('eels')
>>> eggs
['hovercraft', 'eels']

Các phương pháp này thay đổi danh sách chúng được gọi. Họ không trả lại một danh sách mới. Chúng tôi nói rằng các phương pháp này thay đổi danh sách tại chỗ.

Phương thức chuỗi chia ()

Kiểu dữ liệu chuỗi có phương thức chia (), trả về một danh sách các chuỗi được tạo từ một chuỗi đã được chia. Hãy thử sử dụng phương thức Split () bằng cách nhập phần sau vào vỏ tương tác:split() method, which returns a list of strings made from a string that has been split. Try using the split() method by entering the following into the interactive shell:

>>> câu = đầu vào () người mẹ rất năng lượng của tôi vừa phục vụ chúng tôi nachos. >>> câu.split () 'US', 'nachos.']sentence = input()
My very energetic mother just served us nachos.
>>> sentence.split()
['My', 'very', 'energetic', 'mother', 'just', 'served', 'us', 'nachos.']

Kết quả là danh sách tám chuỗi, một chuỗi cho mỗi từ trong chuỗi gốc. Việc chia tách xảy ra bất cứ nơi nào có một khoảng trống trong chuỗi. Các không gian không được bao gồm trong bất kỳ mục nào trong danh sách.

Dòng 38 của chương trình Hangman cũng sử dụng phương thức Split (), như được hiển thị tiếp theo. Mã này dài, nhưng nó thực sự chỉ là một câu lệnh gán đơn giản có một chuỗi dài các từ được phân tách bằng không gian, với một cuộc gọi phương thức chia () ở cuối. Phương thức Split () đánh giá thành một danh sách với mỗi từ trong chuỗi dưới dạng một mục danh sách duy nhất.split() method, as shown next. The code is long, but it’s really just a simple assignment statement that has one long string of words separated by spaces, with a split() method call at the end. The split() method evaluates to a list with each word in the string as a single list item.

38. ; Spider Stork Swan Tiger Toad Trout Thổ Nhĩ Kỳ Rùa & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
      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()

Nó dễ dàng hơn để viết chương trình này bằng cách sử dụng Split (). Nếu bạn tạo một danh sách để bắt đầu, bạn sẽ phải gõ ['Ant', 'Baboon', 'Badger', v.v., với các trích dẫn và dấu phẩy cho mỗi từ.split(). If you created a list to begin with, you would have to type ['ant', 'baboon', 'badger', and so on, with quotes and commas for every word.

Bạn cũng có thể thêm các từ của riêng bạn vào chuỗi trên dòng 38 hoặc xóa bất kỳ bạn nào bạn không muốn tham gia trò chơi. Chỉ cần đảm bảo rằng không gian tách các từ.

Nhận một từ bí mật từ danh sách từ

Dòng 40 xác định hàm getRandomword (). Một đối số danh sách sẽ được thông qua cho tham số danh sách từ của nó. Hàm này sẽ trả về một từ bí mật duy nhất từ ​​danh sách trong danh sách từ.getRandomWord() function. A list argument will be passed for its wordList parameter. This function will return a single secret word from the list in wordList.

40. ;
41.     # This function returns a random string from the passed list of
          strings.
42.     wordIndex = random.randint(0, len(wordList) - 1)
43.     return wordList[wordIndex]

Trong dòng 42, chúng tôi lưu trữ một chỉ mục ngẫu nhiên cho danh sách này trong biến WordIndex bằng cách gọi randint () với hai đối số. Đối số đầu tiên là 0 (đối với chỉ mục đầu tiên có thể) và thứ hai là giá trị mà biểu thức LEN (WordList) - 1 đánh giá (đối với chỉ mục cuối cùng có thể trong một danh sách từ).wordIndex variable by calling randint() with two arguments. The first argument is 0 (for the first possible index), and the second is the value that the expression len(wordList) - 1 evaluates to (for the last possible index in a wordList).

Hãy nhớ rằng các chỉ mục danh sách bắt đầu ở 0, không phải 1. Nếu bạn có danh sách ba mục, chỉ mục của mục đầu tiên là 0, chỉ mục của mục thứ hai là 1 và chỉ mục của mục thứ ba là 2. Độ dài Trong danh sách này là 3, nhưng chỉ mục 3 sẽ là sau chỉ mục cuối cùng. Đây là lý do tại sao dòng 42 trừ 1 từ độ dài của danh sách từ. Mã trên dòng 42 sẽ hoạt động bất kể kích thước của danh sách từ là gì. Bây giờ bạn có thể thêm hoặc xóa các chuỗi trong danh sách từ nếu bạn thích.0, not 1. If you have a list of three items, the index of the first item is 0, the index of the second item is 1, and the index of the third item is 2. The length of this list is 3, but index 3 would be after the last index. This is why line 42 subtracts 1 from the length of wordList. The code on line 42 will work no matter what the size of wordList is. Now you can add or remove strings in wordList if you like.

Biến WordIndex sẽ được đặt thành một chỉ mục ngẫu nhiên cho danh sách được truyền dưới dạng tham số WordList. Dòng 43 sẽ trả về phần tử trong danh sách từ tại số nguyên được lưu trữ trong WordIndex.wordIndex variable will be set to a random index for the list passed as the wordList parameter. Line 43 will return the element in wordList at the integer stored in wordIndex.

Hãy giả vờ ['Apple', 'Orange', nho '] đã được thông qua như là đối số cho GetRandomword () và Randint (0, 2) đã trả lại số nguyên 2. Điều đó có nghĩa là dòng 43 sẽ đánh giá để trả về danh sách từ [2] , và sau đó đánh giá để trả lại 'nho'. Đây là cách getRandOMword () trả về một chuỗi ngẫu nhiên trong danh sách từ.['apple', 'orange', grape'] was passed as the argument to getRandomWord() and that randint(0, 2) returned the integer 2. That would mean that line 43 would evaluate to return wordList[2], and then evaluate to return 'grape'. This is how getRandomWord() returns a random string in wordList.

Vì vậy, đầu vào của getRandomword () là một danh sách các chuỗi và đầu ra giá trị trả về là một chuỗi được chọn ngẫu nhiên từ danh sách đó. Trong trò chơi Hangman, đây là cách một từ bí mật được chọn cho người chơi đoán.getRandomWord() is a list of strings, and the return value output is a randomly selected string from that list. In the Hangman game, this is how a secret word is selected for the player to guess.

Hiển thị bảng cho người chơi

Tiếp theo, bạn cần một chức năng để in bảng treo trên màn hình. Nó cũng sẽ hiển thị số lượng chữ cái mà người chơi đã đoán chính xác (và không chính xác).

45. DET DISTILBOARD (MISTETLETTERS, SEVIELLETTERS, SECREETWORD): 46. & NBSP; & NBSP; & NBSP; & NBSP; & NBSP;
46.     print(HANGMAN_PICS[len(missedLetters)])
47.     print()

Mã này xác định một hàm mới có tên Displayboard (). Hàm này có ba tham số:displayBoard(). This function has three parameters:

bỏ lỡ một chuỗi các chữ cái mà người chơi đã đoán là không có trong từ bí mật A string of the letters the player has guessed that are not in the secret word

đúng một chuỗi các chữ cái mà người chơi đã đoán là trong từ bí mật A string of the letters the player has guessed that are in the secret word

Secretword Một chuỗi của từ bí mật mà người chơi đang cố gắng đoán A string of the secret word that the player is trying to guess

Cuộc gọi hàm in () đầu tiên sẽ hiển thị bảng. Biến toàn cầu Hangman_pics có một danh sách các chuỗi cho mỗi bảng có thể. (Hãy nhớ rằng các biến toàn cầu có thể được đọc từ bên trong một hàm.) Người chơi bỏ lỡ hai chữ cái), v.v. cho đến khi Hangman_pics [6], cho thấy người đàn ông treo đầy đủ.print() function call will display the board. The global variable HANGMAN_PICS has a list of strings for each possible board. (Remember that global variables can be read from inside a function.) HANGMAN_PICS[0] shows an empty gallows, HANGMAN_PICS[1] shows the head (when the player misses one letter), HANGMAN_PICS[2] shows the head and body (when the player misses two letters), and so on until HANGMAN_PICS[6], which shows the full hanging man.

Số lượng các chữ cái trong bỏ lỡ sẽ phản ánh số lượng người chơi đã thực hiện không chính xác. Gọi Len (bỏ lỡ) để tìm ra số này. Vì vậy, nếu bỏ lỡ là 'Aetr', thì Len ('Aetr') sẽ trả về 4. In Hangman_Pics [4] sẽ hiển thị hình ảnh người đàn ông treo thích hợp cho bốn lần bỏ lỡ. Đây là những gì Hangman_Pics [Len (bỏ lỡ)] trên dòng 46 đánh giá.missedLetters will reflect how many incorrect guesses the player has made. Call len(missedLetters) to find out this number. So, if missedLetters is 'aetr', then len('aetr') will return 4. Printing HANGMAN_PICS[4] will display the appropriate hanging man picture for four misses. This is what HANGMAN_PICS[len(missedLetters)] on line 46 evaluates to.

Dòng 49 in chuỗi 'Các chữ cái bị bỏ lỡ:' với một ký tự không gian ở cuối thay vì một dòng mới:'Missed letters:' with a space character at the end instead of a newline:

49. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; in (thư, end = '') 52.
50.     for letter in missedLetters:
51.         print(letter, end=' ')
52.     print()

Vòng lặp cho dòng 50 sẽ lặp lại trên mỗi ký tự trong chuỗi bị bỏ lỡ và in nó trên màn hình. Hãy nhớ rằng end = '' sẽ thay thế ký tự dòng mới được in sau chuỗi bằng một ký tự không gian. Ví dụ: nếu bỏ lỡ là 'ajtw', thì điều này cho vòng lặp sẽ hiển thị một j t w.for loop on line 50 will iterate over each character in the string missedLetters and print it on the screen. Remember that end=' ' will replace the newline character that is printed after the string with a single space character. For example, if missedLetters were 'ajtw', this for loop would display a j t w.

Phần còn lại của hàm DisplayBoard () (dòng 54 đến 62) hiển thị các chữ cái bị bỏ lỡ và tạo chuỗi từ bí mật với tất cả các chữ cái chưa được đoán là khoảng trống. Nó thực hiện điều này bằng cách sử dụng hàm phạm vi () và danh sách cắt.displayBoard() function (lines 54 to 62) displays the missed letters and creates the string of the secret word with all of the not-yet-guessed letters as blanks. It does this using the range() function and list slicing.

Các hàm danh sách () và phạm vi ()

Khi được gọi bằng một đối số, phạm vi () sẽ trả về một đối tượng phạm vi của số nguyên từ 0 đến (nhưng không bao gồm) đối số. Đối tượng phạm vi này được sử dụng trong các vòng lặp nhưng cũng có thể được chuyển đổi thành kiểu dữ liệu danh sách quen thuộc hơn với hàm danh sách (). Nhập danh sách (phạm vi (10)) vào vỏ tương tác:range() will return a range object of integers from 0 up to (but not including) the argument. This range object is used in for loops but can also be converted to the more familiar list data type with the list() function. Enter list(range(10)) into the interactive shell:

>>> Danh sách (phạm vi (10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> Danh sách ('Xin chào') ['H', 'E', ' l ',' l ',' o ']]list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list('Hello')
['H', 'e', 'l', 'l', 'o']

Hàm danh sách () tương tự như các hàm str () hoặc int (). Nó lấy giá trị mà nó đã vượt qua và trả lại một danh sách. Nó dễ dàng tạo ra danh sách lớn với hàm phạm vi (). Ví dụ: nhập danh sách (phạm vi (10000)) vào vỏ tương tác:list() function is similar to the str() or int() functions. It takes the value it’s passed and returns a list. It’s easy to generate huge lists with the range() function. For example, enter list(range(10000)) into the interactive shell:

>>> danh sách (phạm vi (10000)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ... & nbsp; & nbsp; & NBSP;list(range(10000))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,...
      --snip--
...9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999]

Danh sách này rất lớn, nó đã giành chiến thắng thậm chí phù hợp với màn hình. Nhưng bạn có thể lưu trữ danh sách trong một biến:

>>> spam = danh sách (phạm vi (10000))spam = list(range(10000))

Nếu bạn chuyển hai đối số số nguyên cho phạm vi (), đối tượng phạm vi mà nó trả về là từ đối số số nguyên đầu tiên lên đến (nhưng không bao gồm) đối số số nguyên thứ hai. Tiếp theo nhập danh sách (phạm vi (10, 20)) vào vỏ tương tác như sau:range(), the range object it returns is from the first integer argument up to (but not including) the second integer argument. Next enter list(range(10, 20)) into the interactive shell as follows:

>>> Danh sách (phạm vi (10, 20)) [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]list(range(10, 20))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

Như bạn có thể thấy, danh sách của chúng tôi chỉ lên tới 19 và không bao gồm 20.

Danh sách và cắt chuỗi

Danh sách cắt lát tạo ra một giá trị danh sách mới bằng cách sử dụng một tập hợp con của một danh sách khác. Để cắt một danh sách, chỉ định hai chỉ mục (đầu và kết thúc) với một dấu hai chấm trong khung vuông sau tên danh sách. Ví dụ: nhập phần sau vào vỏ tương tác:

>>> spam = ['táo', 'chuối', 'cà rốt', 'ngày'] >>> spam [1: 3] ['chuối', 'cà rốt']]]]spam = ['apples', 'bananas', 'carrots', 'dates']
>>> spam[1:3]
['bananas', 'carrots']

Biểu thức Spam [1: 3] đánh giá vào một danh sách với các mục trong thư rác từ chỉ mục 1 đến (nhưng không bao gồm) chỉ mục 3.spam[1:3] evaluates to a list with items in spam from index 1 up to (but not including) index 3.

Nếu bạn bỏ chỉ mục đầu tiên, Python sẽ tự động nghĩ rằng bạn muốn chỉ mục 0 cho chỉ mục đầu tiên:0 for the first index:

>>> spam = ['táo', 'chuối', 'cà rốt', 'ngày'] >>> spam [: 2] ['táo', 'chuối']]]]spam = ['apples', 'bananas', 'carrots', 'dates']
>>> spam[:2]
['apples', 'bananas']

Nếu bạn bỏ chỉ mục thứ hai, Python sẽ tự động nghĩ rằng bạn muốn phần còn lại của danh sách:

>>> spam = ['táo', 'chuối', 'cà rốt', 'ngày'] >>> spam [2:] ['cà rốt', 'ngày']]]spam = ['apples', 'bananas', 'carrots', 'dates']
>>> spam[2:]
['carrots', 'dates']

Bạn cũng có thể sử dụng các lát có chuỗi giống như cách bạn sử dụng chúng với danh sách. Mỗi ký tự trong chuỗi giống như một mục trong danh sách. Nhập phần sau vào vỏ tương tác:

>>> myname = 'zophie con mèo béo' >>> myname [4:12] 'tức là f' >>> myname [: 10] 'zophie the' >>> myname [7:] 'con mèo béo'myName = 'Zophie the Fat Cat'
>>> myName[4:12]
'ie the F'
>>> myName[:10]
'Zophie the'
>>> myName[7:]
'the Fat Cat'

Phần tiếp theo của mã Hangman sử dụng cắt.

Hiển thị từ bí mật với chỗ trống

Bây giờ bạn muốn in từ bí mật, nhưng với các dòng trống cho các chữ cái mà thiên đường đã được đoán. Bạn có thể sử dụng ký tự dấu gạch dưới (_) cho điều này. Đầu tiên tạo một chuỗi không có gì ngoài một dấu gạch dưới cho mỗi chữ cái trong từ bí mật. Sau đó thay thế các khoảng trống cho mỗi chữ cái trong chính xác._) for this. First create a string with nothing but one underscore for each letter in the secret word. Then replace the blanks for each letter in correctLetters.

Vì vậy, nếu từ bí mật là 'rái cá', thì chuỗi bị trống sẽ là '_____' (năm dấu gạch dưới). Nếu chính xác là chuỗi 'RT', bạn sẽ thay đổi chuỗi thành '_tt_r'. Dòng 54 đến 58 là một phần của mã thực hiện điều đó:'otter', then the blanked-out string would be '_____' (five underscores). If correctLetters were the string 'rt', you would change the string to '_tt_r'. Lines 54 to 58 are the part of the code that does that:

54. & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 58. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
55.
56.     for i in range(len(secretWord)): # Replace blanks with correctly
          guessed letters.
57.         if secretWord[i] in correctLetters:
58.             blanks = blanks[:i] + secretWord[i] + blanks[i+1:]

Dòng 54 tạo biến khoảng trống chứa đầy dấu gạch dưới bằng cách sao chép chuỗi. Hãy nhớ rằng toán tử * có thể được sử dụng trên một chuỗi và số nguyên, do đó, biểu thức '_' * 5 đánh giá thành '_____'. Điều này sẽ đảm bảo rằng chỗ trống có cùng số lượng gạch dưới như Secretword có chữ cái.blanks variable full of underscores using string replication. Remember that the * operator can be used on a string and an integer, so the expression '_' * 5 evaluates to '_____'. This will ensure that blanks has the same number of underscores as secretWord has letters.

Dòng 56 có một vòng lặp đi qua mỗi chữ cái trong Secretword và thay thế dấu gạch dưới bằng chữ cái thực tế nếu nó tồn tại trong chính xác.for loop that goes through each letter in secretWord and replaces the underscore with the actual letter if it exists in correctLetters.

Chúng ta hãy xem xét một cái nhìn khác về ví dụ trước, trong đó giá trị của Secretword là 'rái cá' và giá trị trong chính xác là 'tr'. Bạn sẽ muốn chuỗi '_TT_R' được hiển thị cho trình phát. Hãy để tìm ra cách tạo chuỗi này.secretWord is 'otter' and the value in correctLetters is 'tr'. You would want the string '_tt_r' displayed to the player. Let’s figure out how to create this string.

Cuộc gọi dòng 56 LEN LEN (Secretword) sẽ trả về 5. Cuộc gọi phạm vi (LEN (Secretword)) trở thành phạm vi (5), tạo ra vòng lặp For Loop trên 0, 1, 2, 3 và 4.len(secretWord) call would return 5. The range(len(secretWord)) call becomes range(5), which makes the for loop iterate over 0, 1, 2, 3, and 4.

Bởi vì giá trị của tôi sẽ nhận được mỗi giá trị trong [0, 1, 2, 3, 4], mã trong vòng lặp FOR trông như thế này:i will take on each value in [0, 1, 2, 3, 4], the code in the for loop looks like this:

Nếu Secretword [0] trong chính xác: & nbsp; & nbsp; & nbsp; & nbsp; blanks = blanks [: 0] + secretword [0] + blanks [1:]
    blanks = blanks[:0] + secretWord[0] + blanks[1:]

Nếu Secretword [1] trong chính xác: & nbsp; & nbsp; & nbsp; & nbsp; blanks = blanks [: 1]
    blanks = blanks[:1] + secretWord[1] + blanks[2:]
--snip--

Chúng tôi chỉ hiển thị hai lần lặp đầu tiên của vòng lặp cho vòng, nhưng bắt đầu với 0, tôi sẽ lấy giá trị của mỗi số trong phạm vi. Trong lần lặp đầu tiên, tôi lấy giá trị 0, vì vậy câu lệnh IF kiểm tra xem chữ cái trong Secretword tại Index 0 có ở đúng. Vòng lặp thực hiện điều này cho mỗi chữ cái trong từ bí mật, một chữ cái tại một thời điểm.for loop, but starting with 0, i will take the value of each number in the range. In the first iteration, i takes the value 0, so the if statement checks whether the letter in secretWord at index 0 is in correctLetters. The loop does this for every letter in the secretWord, one letter at a time.

Nếu bạn bối rối về giá trị của một cái gì đó như Secretword [0] hoặc Blanks [3:], hãy nhìn vào Hình 8-1. Nó hiển thị giá trị của các biến Secretword và Blanks và chỉ mục cho mỗi chữ cái trong chuỗi.secretWord[0] or blanks[3:], look at Figure 8-1. It shows the value of the secretWord and blanks variables and the index for each letter in the string.

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

Hình 8-1: Các chỉ số của Blanks và Secretword Stringblanks and secretWord strings

Nếu bạn thay thế các lát danh sách và chỉ mục danh sách bằng các giá trị mà chúng biểu diễn, mã vòng lặp trông như thế này:

Nếu 'o' trong 'tr': # false & nbsp; & nbsp; & nbsp; & nbsp; blanks = '' + 'o' + '____' # Dòng này bị bỏ qua .-- # True & nbsp; & nbsp; & nbsp; & nbsp; blanks = '_tt_' + 'r' + '' ' # Dòng này được thực thi.
    blanks = '' + 'o' + '____' # This line is skipped.
--snip--
if 'r' in 'tr': # True
    blanks = '_tt_' + 'r' + '' # This line is executed.

# Blanks bây giờ có giá trị '_TT_R'.

Tất cả các ví dụ mã trước đó đều làm điều tương tự khi Secretword là 'rái cá' và chính xác là 'tr'. Một vài dòng mã tiếp theo in giá trị mới của khoảng trống với khoảng trắng giữa mỗi chữ cái:secretWord is 'otter' and correctLetters is 'tr'. The next few lines of code print the new value of blanks with spaces between each letter:

60. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
          each letter.
61.         print(letter, end=' ')
62.     print()

Lưu ý rằng vòng lặp FOR trên dòng 60 không gọi hàm Range (). Thay vì lặp lại trên đối tượng phạm vi, cuộc gọi hàm này sẽ trả về, nó lặp lại trên giá trị chuỗi trong biến trống. Trên mỗi lần lặp, biến chữ cái có một ký tự mới từ chuỗi 'rái cá' trong khoảng trống.for loop on line 60 doesn’t call the range() function. Instead of iterating on the range object this function call would return, it iterates on the string value in the blanks variable. On each iteration, the letter variable takes on a new character from the 'otter' string in blanks.

Đầu ra in sau khi các khoảng trắng được thêm vào sẽ là '_ t t _ r'.'_ t t _ r'.

Nhận được người chơi đoán đoán

Hàm GETGUESS () sẽ được gọi để người chơi có thể nhập một chữ cái để đoán. Hàm trả về chữ cái mà người chơi đoán là một chuỗi. Hơn nữa, GETGUESS () sẽ đảm bảo rằng người chơi nhập một chữ cái hợp lệ trước khi nó trả lại từ hàm.getGuess() function will be called so that the player can enter a letter to guess. The function returns the letter the player guessed as a string. Further, getGuess() will make sure that the player types a valid letter before it returns from the function.

64. def GetGuess (đã được ghi nhận): 65. Hàm này đảm bảo & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
65.     # Returns the letter the player entered. This function makes sure the
          player entered a single letter and not something else.

Một chuỗi các chữ cái mà người chơi đã đoán được truyền như là đối số cho tham số đã được ghi chép. Sau đó, chức năng getGuess () yêu cầu người chơi đoán một chữ cái. Chữ đơn này sẽ được trả về giá trị trả về của GETGUESS (). Bây giờ, vì Python nhạy cảm với trường hợp, chúng ta cần đảm bảo người chơi đoán đoán là một chữ cái viết thường để chúng ta có thể kiểm tra nó so với từ bí mật. Đó là nơi mà phương thức thấp hơn () xuất hiện.alreadyGuessed parameter. Then the getGuess() function asks the player to guess a single letter. This single letter will be getGuess()’s return value. Now, because Python is case sensitive, we need to make sure the player’s guess is a lowercase letter so we can check it against the secret word. That’s where the lower() method comes in.

Các phương thức chuỗi dưới () và trên ()

Nhập 'Hello World!'. Hạ () vào vỏ tương tác để xem ví dụ về phương thức thấp hơn ():'Hello world!'.lower() into the interactive shell to see an example of the lower() method:

>>> 'Xin chào Thế giới!'. Hạ () 'Xin chào Thế giới!''Hello world!'.lower()
'hello world!'

Phương thức Hạ () trả về một chuỗi với tất cả các ký tự trong chữ thường. Ngoài ra còn có một phương thức trên () cho các chuỗi, trả về một chuỗi với tất cả các ký tự trong chữ hoa. Hãy thử nó bằng cách nhập 'Hello World!'. Upper () vào vỏ tương tác:lower() method returns a string with all the characters in lowercase. There is also an upper() method for strings, which returns a string with all the characters in uppercase. Try it out by entering 'Hello world!'.upper() into the interactive shell:

>>> 'Xin chào Thế giới!'. Thượng () 'Xin chào Thế giới!''Hello world!'.upper()
'HELLO WORLD!'

Vì phương thức trên () trả về một chuỗi, bạn cũng có thể gọi một phương thức trên chuỗi đó.upper() method returns a string, you can also call a method on that string.

Bây giờ nhập cái này vào vỏ tương tác:

>>> 'Xin chào Thế giới!'. Thượng (). Hạ () 'Xin chào Thế giới!''Hello world!'.upper().lower()
'hello world!'

'Hello World!'. Upper () đánh giá cho chuỗi 'Hello World!', Và sau đó phương thức chuỗi Lower () được gọi. Điều này trả về chuỗi 'Hello World!', Đó là giá trị cuối cùng trong đánh giá: evaluates to the string 'HELLO WORLD!', and then the string’s lower() method is called. This returns the string 'hello world!', which is the final value in the evaluation:

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

Thứ tự là quan trọng. 'Xin chào thế giới!'. Lower (). Upper () không giống như 'Hello World!'. Upper (). Lower ():'Hello world!'.lower().upper() isn’t the same as 'Hello world!'.upper().lower():

>>> 'Xin chào thế giới!'. Lower (). Upper () 'Xin chào Thế giới!''Hello world!'.lower().upper()
'HELLO WORLD!'

Đánh giá đó trông như thế này:

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

Nếu một chuỗi được lưu trữ trong một biến, bạn cũng có thể gọi một phương thức chuỗi trên biến đó:

>>> spam = 'Xin chào thế giới!' >>> spam.upper () 'xin chào thế giới!'spam = 'Hello world!'
>>> spam.upper()
'HELLO WORLD!'

Mã này không thay đổi giá trị trong thư rác. Biến Spam vẫn sẽ chứa 'Hello World!'.spam. The spam variable will still contain 'Hello world!'.

Quay trở lại chương trình Hangman, chúng tôi sử dụng Lower () khi chúng tôi yêu cầu người chơi đoán đoán:lower() when we ask for the player’s guess:

66. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; trong khi đúng: 67. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
67.         print('Guess a letter.')
68.         guess = input()
69.         guess = guess.lower()

Bây giờ, ngay cả khi người chơi nhập một chữ cái viết hoa như một dự đoán, hàm getGuess () sẽ trả về một chữ cái viết thường.getGuess() function will return a lowercase letter.

Rời khỏi vòng lặp trong khi

Dòng 66, trong khi Loop sẽ tiếp tục yêu cầu người chơi cho một lá thư cho đến khi họ nhập một lá thư đã được đoán trước đó.while loop will keep asking the player for a letter until they enter a single letter that hasn’t been guessed previously.

Điều kiện cho vòng lặp trong khi chỉ đơn giản là giá trị boolean đúng. Điều đó có nghĩa là cách duy nhất thực thi sẽ rời khỏi vòng lặp này là bằng cách thực hiện một câu lệnh break, rời khỏi vòng lặp hoặc một câu lệnh trả về, không chỉ còn lại vòng lặp mà toàn bộ hàm.while loop is simply the Boolean value True. That means the only way the execution will ever leave this loop is by executing a break statement, which leaves the loop, or a return statement, which leaves not just the loop but the entire function.

Mã bên trong vòng lặp yêu cầu người chơi nhập một chữ cái, được lưu trữ trong dự đoán biến. Nếu người chơi nhập chữ hoa, nó sẽ bị ghi đè bằng chữ thường trên dòng 69.guess. If the player entered an uppercase letter, it would be overwritten with a lowercase letter on line 69.

Tuyên bố của Elif

Phần tiếp theo của chương trình Hangman sử dụng các câu lệnh ELIF. Bạn có thể nghĩ về các tuyên bố của Elif hoặc khác nếu không có câu nói, nếu điều này là đúng, hãy làm điều này. Hoặc nếu điều kiện tiếp theo này là đúng, hãy làm điều đó. Hoặc nếu không nếu không ai trong số họ là sự thật, hãy làm điều cuối cùng này. Hãy xem mã sau:elif statements. You can think of elif or “else-if” statements as saying, “If this is true, do this. Or else if this next condition is true, do that. Or else if none of them is true, do this last thing.” Take a look at the following code:

Nếu catname == 'fuzzball': & nbsp; & nbsp; & nbsp; & nbsp; in ('con mèo của bạn là mờ.') ')
    print('Your cat is fuzzy.')
elif catName == 'Spots':
    print('Your cat is spotted.')
else:
    print('Your cat is not fuzzy or spotted.')

Nếu biến catname bằng với chuỗi 'fuzzball', thì điều kiện câu lệnh IF là đúng và khối IF cho người dùng biết rằng con mèo của họ bị mờ. Tuy nhiên, nếu điều kiện này là sai, thì Python sẽ thử điều kiện tuyên bố Elif tiếp theo. Nếu catname là 'điểm', thì chuỗi 'con mèo của bạn bị phát hiện.' được in lên màn hình. Nếu cả hai đều sai, thì mã sẽ cho người dùng biết con mèo của họ không bị mờ hoặc phát hiện.catName variable is equal to the string 'Fuzzball', then the if statement’s condition is True and the if block tells the user that their cat is fuzzy. However, if this condition is False, then Python tries the elif statement’s condition next. If catName is 'Spots', then the string 'Your cat is spotted.' is printed to the screen. If both are False, then the code tells the user their cat isn’t fuzzy or spotted.

Bạn có thể có nhiều câu lệnh Elif như bạn muốn:elif statements as you want:

Nếu catname == 'fuzzball': & nbsp; & nbsp; & nbsp; & nbsp; in ('con mèo của bạn là mờ.') ') Elif Catname ==' Chub ': & nbsp; & nbsp; & nbsp; & nbsp; in (' con mèo của bạn là mũm mĩ Buồn phồng. ')
    print('Your cat is fuzzy.')
elif catName == 'Spots':
    print('Your cat is spotted.')
elif catName == 'Chubs':
    print('Your cat is chubby.')
elif catName == 'Puff':
    print('Your cat is puffy.')
else:
    print('Your cat is neither fuzzy nor spotted nor chubby nor puffy.')

Khi một trong các điều kiện ELIF là đúng, mã của nó được thực thi và sau đó việc thực thi nhảy sang dòng đầu tiên qua khối khác. Vì vậy, một, và chỉ một, của các khối trong các câu lệnh if-elif-else sẽ được thực thi. Bạn cũng có thể rời khỏi khối khác nếu bạn không cần một và chỉ có các câu lệnh if-elif.elif conditions is True, its code is executed, and then the execution jumps to the first line past the else block. So one, and only one, of the blocks in the if-elif-else statements will be executed. You can also leave off the else block if you don’t need one and just have if-elif statements.

Đảm bảo người chơi đã nhập một phỏng đoán hợp lệ

Biến đoán có chứa thư của người chơi đoán đoán. Chương trình cần đảm bảo rằng họ đã nhập một phỏng đoán hợp lệ: một và chỉ một, thư chưa được đoán. Nếu họ đã làm, việc thực hiện sẽ lặp lại và hỏi họ một lần nữa.guess variable contains the player’s letter guess. The program needs to make sure they entered a valid guess: one, and only one, letter that has not yet been guessed. If they didn’t, the execution will loop back and ask them for a letter again.

70. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; in ('Vui lòng nhập một chữ cái.') ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ') 76. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; return Guess
71.             print('Please enter a single letter.')
72.         elif guess in alreadyGuessed:
73.             print('You have already guessed that letter. Choose again.')
74.         elif guess not in 'abcdefghijklmnopqrstuvwxyz':
75.             print('Please enter a LETTER.')
76.         else:
77.             return guess

Điều kiện dòng 70 kiểm tra xem liệu dự đoán có phải là một ký tự dài hay không, điều kiện dòng 72 có kiểm tra xem liệu dự đoán đã tồn tại bên trong biến đã được ghi chép hay không và điều kiện dòng 74 74 có kiểm tra xem liệu dự đoán không phải là chữ cái trong bảng chữ cái tiếng Anh tiêu chuẩn hay không. Nếu bất kỳ điều kiện nào trong số này là đúng, trò chơi sẽ nhắc người chơi nhập một phỏng đoán mới.guess is not one character long, line 72’s condition checks whether guess already exists inside the alreadyGuessed variable, and line 74’s condition checks whether guess is not a letter in the standard English alphabet. If any of these conditions are True, the game prompts the player to enter a new guess.

Nếu tất cả các điều kiện này là sai, thì câu lệnh khác Khối thực thi và getGuess () trả về giá trị trong Guess On Line 77.False, then the else statement’s block executes, and getGuess() returns the value in guess on line 77.

Hãy nhớ rằng, chỉ một trong các khối trong câu lệnh if-elif-else sẽ được thực thi.if-elif-else statement will be executed.

Yêu cầu người chơi chơi lại

Hàm playagain () chỉ có một gọi hàm in () và câu lệnh trả về:playAgain() function has just a print() function call and a return statement:

79. def playagain (): 80. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; nếu không, nó trả về false.81. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; input (). thấp hơn (). startswith ('y')
80.     # This function returns True if the player wants to play again;
          otherwise, it returns False.
81.     print('Do you want to play again? (yes or no)')
82.     return input().lower().startswith('y')

Câu lệnh trả về có một biểu thức trông phức tạp, nhưng bạn có thể phá vỡ nó. Dưới đây, một cái nhìn từng bước về cách Python đánh giá biểu thức này nếu người dùng nhập có:return statement has an expression that looks complicated, but you can break it down. Here’s a step-by-step look at how Python evaluates this expression if the user enters YES:

Hướng dẫn hangman python with functions - trăn hangman với các chức năng

Điểm của chức năng playagain () là để người chơi nhập có hoặc không để nói với chương trình nếu họ muốn chơi một vòng Hangman khác. Người chơi sẽ có thể gõ có, có, y hoặc bất cứ thứ gì khác bắt đầu bằng một y để có nghĩa là có. Nếu người chơi nhập có, thì giá trị trả về của đầu vào () là chuỗi 'có'. Và 'Có'.Lower () trả về phiên bản viết thường của chuỗi đính kèm. Vì vậy, giá trị trả về của 'Có'Lower () là' có '.playAgain() function is to let the player enter yes or no to tell the program if they want to play another round of Hangman. The player should be able to type YES, yes, Y, or anything else that begins with a y in order to mean “yes.” If the player enters YES, then the return value of input() is the string 'YES'. And 'YES'.lower() returns the lowercase version of the attached string. So the return value of 'YES'.lower() is 'yes'.

Nhưng có cuộc gọi phương thức thứ hai, StartSwith ('y'). Hàm này trả về true nếu chuỗi liên quan bắt đầu bằng tham số chuỗi giữa dấu ngoặc đơn và sai nếu nó không. Giá trị trả về của 'Có'StartSwith (' y ') là đúng.startswith('y'). This function returns True if the associated string begins with the string parameter between the parentheses and False if it doesn’t. The return value of 'yes'.startswith('y') is True.

Rằng nó, bạn đã đánh giá biểu thức này! Nó cho phép người chơi nhập phản hồi, đặt phản hồi bằng chữ thường, kiểm tra xem nó có bắt đầu bằng chữ Y hay không, sau đó trả về đúng nếu nó làm và sai nếu nó không.y, and then returns True if it does and False if it doesn’t.

Trên một lưu ý phụ, cũng có một phương thức chuỗi kết thúc (somestring) sẽ trả về true nếu chuỗi kết thúc bằng chuỗi trong somestring và false nếu nó không có. EndSwith () giống như đối diện với StartSwith ().endswith(someString) string method that will return True if the string ends with the string in someString and False if it doesn’t. endswith() is sort of like the opposite of startswith().

Đánh giá các chức năng Hangman

Đó là tất cả các chức năng mà chúng tôi tạo ra cho trò chơi này! Hãy để xem xét chúng:

GetRandomWord (WordList) lấy một danh sách các chuỗi được truyền cho nó và trả về một chuỗi từ nó. Đó là cách một từ được chọn để người chơi đoán. Takes a list of strings passed to it and returns one string from it. That is how a word is chosen for the player to guess.

Displayboard (bỏ lỡ, chính xác, Secretword) cho thấy trạng thái hiện tại của bảng, bao gồm bao nhiêu từ bí mật mà người chơi đã đoán cho đến nay và các chữ cái sai mà người chơi đã đoán. Hàm này cần ba tham số được truyền đến nó để hoạt động chính xác. Bản chính xác và bỏ lỡ là các chuỗi được tạo thành từ các chữ cái mà người chơi đã đoán lần lượt là trong và không phải trong từ bí mật. Và Secretword là từ bí mật mà người chơi đang cố gắng đoán. Hàm này không có giá trị trả về. Shows the current state of the board, including how much of the secret word the player has guessed so far and the wrong letters the player has guessed. This function needs three parameters passed to it to work correctly. correctLetters and missedLetters are strings made up of the letters that the player has guessed that are in and not in the secret word, respectively. And secretWord is the secret word the player is trying to guess. This function has no return value.

GETGUESS (đã được ghi nhận) lấy một chuỗi các chữ cái mà người chơi đã đoán và sẽ tiếp tục yêu cầu người chơi cho một lá thư không được ghi nhận. Hàm này trả về chuỗi của chữ cái hợp lệ mà người chơi đoán. Takes a string of letters the player has already guessed and will keep asking the player for a letter that isn’t in alreadyGuessed. This function returns the string of the valid letter the player guessed.

playagain () hỏi người chơi có muốn chơi một vòng Hangman khác không. Chức năng này trả về đúng nếu người chơi làm, sai nếu họ don. Asks if the player wants to play another round of Hangman. This function returns True if the player does, False if they don’t.

Sau các chức năng, mã cho phần chính của chương trình bắt đầu ở dòng 85. Mọi thứ cho đến thời điểm này chỉ là định nghĩa chức năng và một tuyên bố gán lớn cho Hangman_Pics.HANGMAN_PICS.

Vòng lặp trò chơi

Phần chính của chương trình Hangman hiển thị tên của trò chơi, thiết lập một số biến và thực hiện một vòng lặp trong thời gian. Phần này đi qua phần còn lại của chương trình từng bước.while loop. This section walks through the remainder of the program step by step.

85. In ('H a n g m a n') 86. bỏ lỡ = ''87. orporLetters = ''88. SecretWord = getRandomword (từ) 89. GameIsDone = Sai
86. missedLetters = ''
87. correctLetters = ''
88. secretWord = getRandomWord(words)
89. gameIsDone = False

Dòng 85 là cuộc gọi in () đầu tiên thực hiện khi trò chơi được chạy. Nó hiển thị tiêu đề của trò chơi. Tiếp theo, các chuỗi trống được gán cho các biến bị bỏ lỡ và chính xác vì người chơi đã đoán được bất kỳ chữ cái nào bị bỏ lỡ hoặc chính xác.print() call that executes when the game is run. It displays the title of the game. Next, blank strings are assigned to the variables missedLetters and correctLetters since the player hasn’t guessed any missed or correct letters yet.

Cuộc gọi getRandomword (từ) ở dòng 88 sẽ đánh giá một từ được chọn ngẫu nhiên từ danh sách từ.getRandomWord(words) call at line 88 will evaluate to a randomly selected word from the words list.

Dòng 89 đặt gameisdone thành sai. Mã sẽ đặt GameIsDone thành True khi nó muốn báo hiệu rằng trò chơi đã kết thúc và hỏi người chơi xem họ có muốn chơi lại không.gameIsDone to False. The code will set gameIsDone to True when it wants to signal that the game is over and ask the player whether they want to play again.

Gọi hàm DisplayBoard ()

Phần còn lại của chương trình bao gồm một vòng lặp. Điều kiện vòng lặp luôn luôn đúng, điều đó có nghĩa là nó sẽ lặp lại mãi mãi cho đến khi nó gặp phải một tuyên bố phá vỡ. (Điều này xảy ra sau này trên dòng 126.)while loop. The loop’s condition is always True, which means it will loop forever until it encounters a break statement. (This happens later on line 126.)

91. Trong khi đúng: 92.
92.     displayBoard(missedLetters, correctLetters, secretWord)

Dòng 92 gọi hàm DisplayBoard (), chuyển ba biến được đặt trên các dòng 86, 87 và 88. Dựa trên số lượng chữ cái mà người chơi đã đoán và bỏ lỡ chính xác, chức năng này hiển thị bảng treo phù hợp cho người chơi.displayBoard() function, passing it the three variables set on lines 86, 87, and 88. Based on how many letters the player has correctly guessed and missed, this function displays the appropriate Hangman board to the player.

Để người chơi nhập dự đoán của họ

Tiếp theo hàm getGuess () được gọi để người chơi có thể nhập dự đoán của họ.getGuess() function is called so the player can enter their guess.

94. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
95.     guess = getGuess(missedLetters + correctLetters)

Hàm getGuess () yêu cầu một tham số đã được ghi chép để nó có thể kiểm tra xem người chơi có nhập một chữ cái mà họ đã đoán được không. Dòng 95 liên kết các chuỗi trong các biến bị bỏ lỡ và chính xác và truyền kết quả là đối số cho tham số đã được ghi chép lại.getGuess() function requires an alreadyGuessed parameter so it can check whether the player enters a letter they’ve already guessed. Line 95 concatenates the strings in the missedLetters and correctLetters variables and passes the result as the argument for the alreadyGuessed parameter.

Kiểm tra xem chữ cái có trong từ bí mật không

Nếu chuỗi đoán tồn tại trong Secretword, thì mã này kết hợp đoán vào cuối chuỗi chính xác:guess string exists in secretWord, then this code concatenates guess to the end of the correctLetters string:

97. & nbsp; & nbsp; & nbsp; & nbsp;
98.         correctLetters = correctLetters + guess

Chuỗi này sẽ là giá trị mới của chính xác.correctLetters.

Kiểm tra xem người chơi có thắng không

Làm thế nào để chương trình biết liệu người chơi đã đoán từng chữ cái trong từ bí mật? Chà, chính xác có mỗi chữ cái mà người chơi đoán chính xác và Secretword là từ bí mật. Nhưng bạn có thể chỉ đơn giản là kiểm tra xem ormentletters == secretword. Nếu Secretword là chuỗi 'rái cá' và chính xác là chuỗi 'orte', thì rementletters == secretword sẽ sai mặc dù người chơi đã đoán từng chữ cái trong từ bí mật.correctLetters has each letter that the player correctly guessed, and secretWord is the secret word itself. But you can’t simply check whether correctLetters == secretWord. If secretWord were the string 'otter' and correctLetters were the string 'orte', then correctLetters == secretWord would be False even though the player has guessed each letter in the secret word.

Cách duy nhất bạn có thể chắc chắn rằng người chơi đã giành chiến thắng là lặp lại từng chữ cái trong Secretword và xem nó có tồn tại trong chính xác không. Nếu, và chỉ khi, mọi chữ cái trong Secretword tồn tại trong chính xác, người chơi đã giành chiến thắng.secretWord and see if it exists in correctLetters. If, and only if, every letter in secretWord exists in correctLetters has the player won.

100. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; True102. & Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; foundallletters = false105.
101.         foundAllLetters = True
102.         for i in range(len(secretWord)):
103.             if secretWord[i] not in correctLetters:
104.                 foundAllLetters = False
105.                 break

Nếu bạn tìm thấy một lá thư trong Secretword mà không tồn tại trong chính xác, bạn sẽ biết rằng người chơi đã không đoán tất cả các chữ cái. Biến mới FoundAlLletters được đặt thành True On Line 101 trước khi vòng lặp bắt đầu. Vòng lặp bắt đầu giả định rằng tất cả các chữ cái trong từ bí mật đã được tìm thấy. Nhưng mã Loop Loop trên dòng 104 sẽ thay đổi FoundAlLletters thành False ngay lần đầu tiên tìm thấy một lá thư trong Secretword không phải là chính xác.secretWord that doesn’t exist in correctLetters, you know that the player has not guessed all the letters. The new variable foundAllLetters is set to True on line 101 before the loop begins. The loop starts out assuming that all the letters in the secret word have been found. But the loop’s code on line 104 will change foundAllLetters to False the first time it finds a letter in secretWord that isn’t in correctLetters.

Nếu tất cả các chữ cái trong từ bí mật đã được tìm thấy, người chơi được thông báo rằng họ đã thắng và Gamesdone sẽ được đặt thành True:gameIsDone is set to True:

106. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; in ('Có! Từ bí mật là "' ; & nbsp; '"! Bạn đã thắng!') 108. & nbsp; & nbsp; & nbsp;
107.             print('Yes! The secret word is "' + secretWord +
                   '"! You have won!')
108.             gameIsDone = True

Xử lý một phỏng đoán không chính xác

Dòng 109 là khởi đầu của khối khác.else block.

109. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
110.         missedLetters = missedLetters + guess

Hãy nhớ rằng, mã trong khối này sẽ thực thi nếu điều kiện là sai. Nhưng điều kiện nào? Để tìm hiểu, chỉ ngón tay của bạn khi bắt đầu từ khóa khác và di chuyển thẳng lên. Bạn có thể thấy rằng thụt lề từ khóa khác giống như IF từ khóa thụt vào dòng 97:False. But which condition? To find out, point your finger at the start of the else keyword and move it straight up. You’ll see that the else keyword’s indentation is the same as the if keyword’s indentation on line 97:

97. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; misk
--snip--
109.     else:
110.         missedLetters = missedLetters + guess

Vì vậy, nếu điều kiện trên dòng 97 (đoán trong Secretword) là sai, thì việc thực thi sẽ chuyển sang khối khác.guess in secretWord) were False, then the execution would move into this else block.

Các chữ cái đoán sai được liên kết với chuỗi bị bỏ lỡ trên dòng 110. Đây giống như những gì dòng 98 đã làm cho các chữ cái mà người chơi đoán chính xác.missedLetters string on line 110. This is like what line 98 did for letters the player guessed correctly.

Kiểm tra xem người chơi có bị mất không

Mỗi lần người chơi đoán không chính xác, mã kết nối sai chữ cái cho chuỗi trong các điểm bị bỏ lỡ. Vì vậy, độ dài của các điểm bị bỏ lỡ, hoặc, trong mã, Len (bỏ lỡ) cũng là số lượng phỏng đoán sai.missedLetters. So the length of missedLetters—or, in code, len(missedLetters)—is also the number of wrong guesses.

112. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; nếu Len (bỏ lỡ) == Len (Hangman_Pics) - 1: 114. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Secretword) 115. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; gameisdone = true
113.         if len(missedLetters) == len(HANGMAN_PICS) - 1:
114.             displayBoard(missedLetters, correctLetters, secretWord)
115.             print('You have run out of guesses!\nAfter ' +
                   str(len(missedLetters)) + ' missed guesses and ' +
                   str(len(correctLetters)) + ' correct guesses,
                   the word was "' + secretWord + '"')
116.             gameIsDone = True

Danh sách Hangman_Pics có bảy chuỗi nghệ thuật ASCII. Vì vậy, khi độ dài của chuỗi bị bỏ lỡ bằng LEN (Hangman_Pics) - 1 (nghĩa là 6), người chơi đã hết phỏng đoán. Bạn biết người chơi đã thua vì hình ảnh người đàn ông treo cổ sẽ được hoàn thành. Hãy nhớ rằng, Hangman_Pics [0] là mục đầu tiên trong danh sách và Hangman_Pics [6] là cái cuối cùng.HANGMAN_PICS list has seven ASCII art strings. So when the length of the missedLetters string is equal to len(HANGMAN_PICS) - 1 (that is, 6), the player has run out of guesses. You know the player has lost because the hanging man picture will be finished. Remember, HANGMAN_PICS[0] is the first item in the list, and HANGMAN_PICS[6] is the last one.

Dòng 115 in từ bí mật và dòng 116 đặt biến GameIsDone thành True.gameIsDone variable to True.

118. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; đã thực hiện) .119. & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; chính xác = '' 123. & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
           done).
119.     if gameIsDone:
120.         if playAgain():
121.             missedLetters = ''
122.             correctLetters = ''
123.             gameIsDone = False
124.             secretWord = getRandomWord(words)

Kết thúc hoặc đặt lại trò chơi

Cho dù người chơi đã thắng hay thua sau khi đoán thư của họ, trò chơi nên hỏi người chơi nếu họ muốn chơi lại. Chức năng playagain () xử lý nhận được có hoặc không từ người chơi, vì vậy nó được gọi trên dòng 120.playAgain() function handles getting a yes or no from the player, so it is called on line 120.

Nếu người chơi muốn chơi lại, các giá trị trong các điểm bị bỏ lỡ và chính xác phải được đặt lại về các chuỗi trống, gameisdone đặt lại thành false và một từ bí mật mới được lưu trữ trong Secretword. Bằng cách này, khi việc thực hiện vòng lặp trở lại đầu của vòng lặp trong dòng 91, bảng sẽ được đặt lại về một trò chơi mới.missedLetters and correctLetters must be reset to blank strings, gameIsDone reset to False, and a new secret word stored in secretWord. This way, when the execution loops back to the beginning of the while loop on line 91, the board will be reset to a fresh game.

Nếu người chơi đã không nhập một cái gì đó bắt đầu với Y khi được hỏi liệu họ có muốn chơi lại hay không, thì điều kiện dòng 120 sẽ là sai và khối khác sẽ thực thi:y when asked whether they wanted to play again, then line 120’s condition would be False, and the else block would execute:

125. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; phá vỡ
126.             break

Tuyên bố Break khiến việc thực hiện nhảy sang hướng dẫn đầu tiên sau vòng lặp. Nhưng bởi vì không có thêm hướng dẫn sau vòng lặp, chương trình chấm dứt.break statement causes the execution to jump to the first instruction after the loop. But because there are no more instructions after the loop, the program terminates.

Bản tóm tắt

Hangman đã là trò chơi tiên tiến nhất của chúng tôi và bạn đã học được một số khái niệm mới trong khi thực hiện nó. Khi các trò chơi của bạn ngày càng phức tạp hơn, đó là một ý tưởng tốt để phác thảo một sơ đồ của những gì sẽ xảy ra trong chương trình của bạn.

Danh sách là các giá trị có thể chứa các giá trị khác. Phương pháp là các hàm được gắn vào một giá trị. Danh sách có một phương thức append (). Chuỗi có các phương thức thấp hơn (), trên (), split (), startSwith () và endswith (). Bạn sẽ tìm hiểu về nhiều loại dữ liệu và phương pháp trong phần còn lại của cuốn sách này.append() method. Strings have lower(), upper(), split(), startswith(), and endswith() methods. You’ll learn about many more data types and methods in the rest of this book.

Câu lệnh ELIF cho phép bạn thêm một mệnh đề khác hoặc khác-nếu vào giữa các câu lệnh if-else của bạn.elif statement lets you add an “or else-if” clause to the middle of your if-else statements.