在-Python-中实现猜字游戏
在 Python 中实现猜字游戏
原文:
towardsdatascience.com/implementing-the-hangman-game-in-python/
在这篇文章中,我们将通过在 Python 中实现猜字游戏来探讨这个游戏。这是一个适合初学者的项目,我们将学习 Python 语言的基础知识,例如定义变量、常用函数、循环和条件语句。
理解项目
首先,我们将理解游戏并深入探讨我们的代码应该如何工作。
在典型的两人猜字游戏(Hangman Game)中,玩家 1 选择一个单词,将其隐藏起来不让玩家 2 看到,并生成与所选单词字母数量相对应的空格。玩家 2 需要逐个猜测字母来猜出单词。玩家 2 在游戏开始时拥有一定数量的生命值,每次猜错字母就会失去一个生命值(直到人被绞死)。每次猜对字母,生命值保持不变。如果玩家 2 在猜出单词之前失去所有生命值,游戏结束,他们失败。如果他们成功猜出单词,他们赢得游戏。这就是传统意义上游戏的概述。
在这个项目中,计算机将扮演玩家 1 的角色,生成需要猜测的单词,而我们,作为用户,将是玩家 2。让我们用一个流程图来实现上述功能,以便更好地理解。

图片由作者提供
绘制流程图并定义每个步骤有助于将我们的思维过程转化为代码,因此绘制流程图总是一个好习惯。现在让我们开始编写代码来解决这个问题!
第 1 步:单词列表和随机模块
在这个项目的第一步中,计算机需要选择一个用户需要猜测的随机单词。为此,我们需要一个单词列表,计算机从中随机选择一个单词进行猜测,以及一个名为 random 的 Python 函数,它将从给定的列表中随机选择该单词。
为了生成列表,我在谷歌上搜索了英语中最常用的 100 个名词,并找到了一个列表。我使用了这些单词,并创建了一个 Python 列表,用于本项目。
如其名所示,Python 列表是一种数据类型,它本身存储了一个项目集合。在 Python 中定义颜色列表为colors = ["red", "yellow", "green", "blue", "pink"]。您可以从 Python 官方页面上的列表检查列表语法和附加信息。
word_list = [
"time",
"year",
"people",
"way",
"day",
"man",
"thing",
...
]
您可以从我的GitHub仓库访问项目文件。hangman_words.py是包含电脑将从中随机选择一个单词进行游戏的单词列表的 Python 文件。
现在,一旦我们创建了列表,我们需要电脑从给定的单词列表word_list中随机选择一个单词。Python 有一个专门用于此目的的模块,称为“random”。我们将导入该模块,并使用它来允许电脑从列表words_list中随机选择一个单词word_to_guess。您可以在编码项目时打印出word_to_guess以增强理解,当与电脑玩游戏时将其注释掉!
import random
word_to_guess = random.choice(word_list)
print(word_to_guess)
更多关于random.choice()函数的信息,请点击这里。
第 2 步:生成空白
下一步是生成与word_to_guess中字母数量相等的空白,以便用户了解他需要猜测的单词中的字母数量。为此,我们将定义一个名为blanks的变量,它将作为单词未猜测字母的容器。它将包含与word_to_guess中字母数量相同的下划线。
为了计算电脑从words_list中随机选择的word_to_guess中的字母数量,我们将使用 Python 函数len(),该函数计算字符串的长度。更多关于这个内置函数的信息可以通过这个链接获取。
blanks = ""
word_length = len(word_to_guess)
如我们现在所知,word_to_guess中的字母数量,我们将使用这个数字在变量blanks中添加相同数量的“_”。为此,我们将使用for循环,这是 Python 的一个功能,允许我们遍历序列中的项目,在我们的情况下,是存储在变量word_to_guess中的字符串。点击这里了解更多关于for循环及其语法的详细信息。
for i in range(word_length):
blanks = blanks + " _"
print("Word to guess: " + blanks)
上述代码块将遍历word_to_guess字符串中的字母数量,并为每个字母生成一个空白。它将打印出与字母数量相同数量的下划线,每个空白作为猜测单词中字母的占位符。所以对于单词“time”,屏幕上打印的输出将是:
猜测的单词:_ _ _
第 3 步:提示用户猜测一个字母
现在游戏实际上开始了!电脑已经选择了一个单词,并为该单词中的字母生成了空白占位符。现在轮到用户开始逐个猜测单词了。
要让用户输入一个字母,我们将使用 Python 中的input函数,并将其存储在变量guess中:
guess = input("Guess a letter").lower()
点击这里了解更多关于 Python 内置函数input()的信息。
第 4 步:检查字母是否在单词中
一旦用户猜测了一个字母,我们将检查用户是否猜对了,并检查它是否在word_to_guess中。
要做到这一点,我们将使用一个for循环。此外,我们还将创建另一个变量your_word,它将随着猜测的字母而更新,并创建一个名为letters_guessed的空列表,用于存储用户正确猜测的字母(这将在后面很有用)。
例如,如果电脑选择了单词“cheesecake”,随着游戏的进行,用户猜测了字母“c”、“e”和“a”,那么your_word和letters_guessed将如下所示:
your_word = c_ee_eca_e
letters_guessed = [“c”, “e”, “a”]
letters_guessed = []
your_word = ""
for letter in word_to_guess:
if letter == guess:
your_word = your_word + letter
letters_guessed.append(guess)
elif letter in letters_guessed:
your_word = your_word + letter
else:
your_word = your_word + "_"
所以,基本上上述循环所做的是逐个字母遍历word_to_guess,并检查:
-
如果用户猜测的字母
guess在word_to_guess中,代码将更新变量your_word,在适当的位置添加猜测的字母。我们需要理解,在 Python 中,字符串实际上是一系列字符的序列,许多列表函数也适用于字符串。此外,我们还将把这个猜对的字母添加到列表letters_guessed中。 -
如果用户猜测的字母
guess已经在letters_guessed中,这意味着用户之前已经建议过这个字母,那么我们不需要将其添加到letters_guessed中,只需在your_word的适当位置添加这个字母即可。 -
否则,如果用户猜测的字母不在
word_to_guess中,因此也不会在letters_guessed中,我们将简单地在这些位置生成空格。
如果上面的代码看起来有点令人不知所措,您可以在定义变量并打印每个变量(word_to_guess、guess、guessed_letters和your_word)的同时运行上面的 for 循环,并打印变量在它们被更改的地方。

图片由 AltumCode 在Unsplash提供
第 5 步:创建一个运行直到游戏结束的 While 循环
让我们回顾一下我们创建的流程图,以帮助我们理解项目。为了编写这个项目,我们需要记住以下要点:
-
用户在开始时有一定的生命值
-
对于每个猜错的字母,生命值减少 1
-
如果用户的生命值耗尽,用户失败,游戏结束
-
如果用户还有生命值,电脑将要求用户猜测另一个字母
-
-
对于每个猜对的字母,生命值保持不变,占位符
blanks中的空格将被字母替换-
如果变量
your_word已经填满,用户赢得游戏,游戏结束 -
如果变量
<code>your_word还有空白空间,那么计算机将再次要求用户猜测下一个字母
-
由于我们之前已经创建了一个针对猜测字母的 for 循环,现在是时候将生命概念融入其中,并在用户猜错字母时减少它。
让我们用变量 number_of_lives 定义用户的生命值。用户有 6 次机会猜测错误的字母来猜出单词。
number_of_lives = 6
现在,考虑到上述提到的点,我们还需要一个变量或条件来告诉我们何时停止询问用户猜测,因为游戏已经结束。让我们用布尔变量来编写这段代码。
简而言之,布尔是 Python 中存储 True 或 False 的数据类型。我们将使用这个布尔变量在游戏为 False 时继续游戏,反之亦然。最初,当游戏开始时,这个变量将是 False,这意味着游戏没有结束。
game_over = False
现在我们将引入一个 while 循环,其条件是只要游戏没有结束,它就会运行,并且我们将上述提到的条件包含在这个 while 循环中。更多关于 while 循环的信息,请参阅 Python 官方文档这里。
while not game over:
print("\nYou have ", number_of_lives, " lives remaining!")
guess = input("Guess a letter: ").lower()
your_word = ""
for letter in word_to_guess:
if letter == guess:
your_word = your_word + letter
letters_guessed.append(guess)
elif letter in letters_guessed:
your_word = your_word + letter
else:
your_word = your_word + "_"
print("Word to guess: ", your_word)
在上述代码片段中,我们添加了输入语句以及打印语句,这将根据其在 word_to_guess 中的位置输出已猜测的字母。
第 6 步:处理情况
最后一步是处理不同的情况。如果用户猜测的字母已经被用户提出,或者字母不在单词中,会发生什么?还有,如果所有的字母都被猜测,your_word 中没有更多的空格,会怎样?这意味着用户已经猜出了单词,因此赢了。
我们将在以下行中添加这种情况:
if guess in letters_guessed:
print(f"\nYou've already guessed {guess}")
if "_" not in your_word:
game_over = True
print("\nYou have guessed the word! YOU WIN!")

图片由 Giorgio Trovato 在 Unsplash 提供
此外,如果用户猜测的字母不在 word_to_guess 中,用户的猜测是错误的,那么他们的生命值将减少 1,我们将通知用户他们猜测的字母不在单词中。如果通过错误猜测减少生命值用完了用户的所有生命,那么我们的布尔变量 game_over 将被设置为 True,游戏将结束,用户输掉游戏。
if guess not in word_to_guess:
number_of_lives -= 1
print(f"\nYou guessed {guess}, that's not in the word. You lose a life.")
if number_of_lives == 0:
game_over = True
print(f"\nIT WAS {word_to_guess}! YOU LOSE!")
记得将上述代码块添加到运行直到游戏结束的 while 循环中。一个完整的代码,包括有价值的注释,可以通过这个 GitHub 仓库获得更好的理解。链接
结论
上述编码项目是基于 Python 语言的基础完成的。我们遇到了一些内置函数,例如print()和input(),我们使用了random模块来生成随机单词进行猜测,并根据需要使用for和while循环进行各种迭代。我们还学习了条件语句if、elif和else。这些都是每个初学者在进入复杂编码之前必须了解的基本工具。我们也可以在这个程序中定义和调用函数,但这个项目的目的是为了提供一个面向初学者的 Python 语言入门介绍。如果你是 Python 的专家,请随意分享我们可以采取的其他各种方法来处理这个项目!

浙公网安备 33010602011771号