hangman小游戏【Python】

本文介绍了如何使用Python实现经典的文字冒险游戏Hangman,包括加载单词列表、随机选择单词、检查用户猜测、更新显示和计算剩余机会等功能。通过一步步的代码解析,读者将学会利用基本的列表操作和条件判断进行游戏开发。
摘要由CSDN通过智能技术生成

import random

# 单词库文件名,请注意words.txt文件中的单词全部为小写格式
WORDLIST_FILENAME = "words.txt"


def load_words():
    """
    返回值:一个由有效单词(string类型)构成的列表(list)
    
    根据单词列表的长度,该函数的执行可能需要消耗一定时间。
    """
    print("Loading word list from file...")
    # inFile:file
    inFile = open(WORDLIST_FILENAME, 'r')
    # line:string
    line = inFile.readline()
    # wordlist:list of strings
    wordlist = line.split()
    print("  ", len(wordlist), "words loaded.")
    return wordlist

def choose_word(wordlist):
    """
    wordlist:一个由有效单词(string类型)构成的列表(list)
    
    返回值:从wordlist中随机选取的一个单词
    """
    return random.choice(wordlist)

# 调用load_words()函数,将words.txt中的单词读取至变量wordlist中,
# 后续代码将可以直接从wordlist变量中读取任意单词
wordlist = load_words()
def is_word_guessed(secret_word, letters_guessed):
    '''
    secret_word:string类型,谜底单词,用户正在猜的单词,该单词全部由小写字母构成
    letters_guessed:字母构成的list,其中包含用户已经猜中的字母,字母全部为小写
    
    返回值:boolean类型,如果secret_word的所有字母都已存在于letters_guessed中,
    返回True;否则返回False
    '''
    # 请将以下"pass"删除,然后补充函数的实现代码
    # pass
    count_1 = 0 #用count_1计数,计算secret_word中的单词在letters_guessed中的个数
    for i in secret_word: # 遍历secret_word中每一个单词
        if i in letters_guessed:
            count_1 += 1
    if count_1 == len(secret_word):
        return True
    else:
        return False
    
def get_guessed_word(secret_word, letters_guessed):
    '''
    secret_word:string类型,谜底单词,即用户正在猜的单词
    letters_guessed:字母构成的list,其中包含用户已经猜中的字母,字母全部为小写
    
    返回值:string类型,由用户已经猜中的字母,以及尚未猜中的字母(以*表示)组成。该string的
    字母排列顺序与谜底单词保持一致,如:谜底单词为study,猜测过程中的返回值的可能形式为s*u*y
    '''
    # 请将以下"pass"删除,然后补充函数的实现代码
    # pass
    secret_word = list(secret_word) # 字符串转化成列表,再改变列表
    for i in range(len(secret_word)):
        if secret_word[i] not in letters_guessed:
            secret_word[i] = '*'
    secret_word = ''.join(secret_word) # 用join函数将列表转化成字符串
    return secret_word

def get_available_letters(letters_guessed):
    '''
    letters_guessed:字母构成的list,其中包含用户已经猜中的字母,字母全部为小写
    
    返回值:string类型,由用户尚未猜中的字母组成
    '''
    # 请将以下"pass"删除,然后补充函数的实现代码
    # pass
    import string
    all_letter = string.ascii_lowercase # 所有小写字母
    # list_2 = list_1[:]  列表复制方法    
    all_letter_list = list(all_letter) # 列表化all_letter_list
    all_letter_list_copy = all_letter_list[:]
    for i in all_letter_list:
        if i in letters_guessed:
            all_letter_list_copy.remove(i) # x.remove(x[i])
    return ','.join(all_letter_list_copy) # 转化为str 

def is_guessed_it(recive_get_guessed_word,secret_word):
    num_guessed_right = 0
    for i in secret_word:
        if i in recive_get_guessed_word:
            num_guessed_right += 1
    return num_guessed_right

def hangman(secret_word):
    '''
    secret_word:string类型,谜底单词,即用户正在猜的单词
    
    该函数实现Hangman游戏的交互功能。主要包含以下功能点:
    
    - 游戏开始时,提示用户谜底单词包含多少个字母,以及用户一共有几次猜测机会。
      
    - 在游戏开始时,为用户提供6次猜测机会(当然也可以提供更多,取决于你的设计)。

    - 在每个猜词回合开始之前,提示用户还剩多少次猜测机会,以及谜底单词还有哪些字母没有被猜出。
    
    - 请求用户在每个回合输入【一个字母】作为猜测值,同时确保用户输入的内容不为空。
    
    - 在用户完成每一次猜测之后,需要立即提示用户,当前猜测字母是否存在于谜底单词中。

    - 在每次猜词之后,提示用户,哪些字母已经被正确猜出,哪些字母还未被猜出。
    
    其他具体要求请参照本次实践练习的指导手册.
    '''
    # 请将以下"pass"删除,然后补充函数的实现代码
    # pass
    print("欢迎来玩这个游戏呀(*^▽^*), Hangman!")
    # print("您要猜的单词有"+str(len(secret_word))+"个字母\n""您共有6次猜测机会")
    rascal = 0
    alphabet = "abcdefghijklmnopqrstuvwxyz" # 因为判断单词用的get_guessed_word这个函数无法判断重复,故创建这个做判断重复
    num_guess = 6
    num_guessed_right_last = 0
    letters_guessed = [] # 建立空列表,再往里面放东西
    available_letters = []
    available_letters.append(get_available_letters(letters_guessed)) # 建立可供使用的单词防止其他情况
    print("您现在有" + str(num_guess) + "次失败的机会\n"+ "提示:该单词有"+str(len(secret_word))+ "个字母")
    while(True):

        if is_word_guessed(secret_word, letters_guessed): # 判断是否猜完
                    print("恭喜你,猜对了O(∩_∩)O~ 答案是:" + secret_word)
                    break
        if rascal == 3:
            print("不好好玩是吧,再见!Σ(☉▽☉")
            break
        #print("您现在有" + num_guess+ "次猜词机会\n"+ "提示:该单词有"+str(len(secret_word))+ "个字母")
        print("=============================")
        print("您现在有" + str(num_guess)+ "次猜词机会\n" + "可供选择的单词有: " + get_available_letters(letters_guessed))
        recive_word = input("请您输入一个单词٩( 'ω' )و :")
        
        if len(recive_word) == 1:
            if recive_word in get_available_letters(letters_guessed):
                letters_guessed.append(recive_word)
                if is_word_guessed(secret_word, letters_guessed): # 判断是否猜完
                    print("恭喜你,猜对了O(∩_∩)O~ 答案是:" + secret_word)
                    break
                else:
                    recive_get_guessed_word = get_guessed_word(secret_word, letters_guessed)
                    # 我想知道recive_get_guessed_word中的‘*’号个数
                    num_guessed_right = is_guessed_it(recive_get_guessed_word,secret_word)
                    # num_guessed_right_last = 0 # 接受上一次的num_guessed_right的个数,用于比较
                    if num_guessed_right > num_guessed_right_last:
                        num_guessed_right_last = num_guessed_right # 要求每次进来"*"数要比之前多!
                        print("猜对了呀!\n" + recive_get_guessed_word)
                    else:
                        print("猜错了(づ ̄3 ̄)づ╭❤~\n" +recive_get_guessed_word)
                        num_guess -= 1
                        if num_guess == 0:
                            print("糟糕,你失败了呢ε=(´ο`*)))答案是:"+ secret_word)
                            break
            else:
                rascal += 1
                if recive_word in alphabet:
                    print("不要重复单词!![○・`Д´・ ○]")
                elif recive_word.lower() in get_available_letters(letters_guessed):
                    print("请输入小写[○・`Д´・ ○]")
                else:
                    print("不要输入别的什么东西[○・`Д´・ ○]")
        else:
            print("是一个,是一个呀╭(╯^╰)╮,请重来")
            rascal += 1
  
 if __name__ == "__main__":

    # 以下为hangman()函数的测试代码,为了便于测试,可考虑将secret_word赋值为固定字符串
    
    secret_word = choose_word(wordlist)
    hangman(secret_word)

### 回答1: 好的,我可以帮你写一个简单的 Hangman 猜字游戏。以下是代码实现: ```python import random # 定义要猜的单词列表 word_list = ["apple", "banana", "cherry", "orange", "peach", "pear"] # 随机选择一个单词 word = random.choice(word_list) # 定义初始的猜测次数和猜测的字母集合 guesses = 6 letters_guessed = set() # 定义提示信息 print("Welcome to Hangman!") print(f"The word is {len(word)} letters long.") # 当还有猜测次数,且单词没有被猜中时,继续游戏 while guesses > 0 and set(word) != letters_guessed: # 显示当前已经猜对的字母 guessed_word = "".join([letter if letter in letters_guessed else "_" for letter in word]) print(f"You have {guesses} guesses left. The word is: {guessed_word}") # 用户输入猜测的字母 guess = input("Guess a letter: ").lower() # 检查猜测的字母是否已经猜过 if guess in letters_guessed: print("You already guessed that letter! Try again.") else: letters_guessed.add(guess) # 检查猜测的字母是否在单词中出现 if guess in word: print("Good guess!") else: print("Bad luck!") guesses -= 1 # 游戏结束,根据猜测次数和单词是否被猜中显示结果 if set(word) == letters_guessed: print("Congratulations, you guessed the word!") else: print(f"Sorry, you ran out of guesses. The word was {word}.") ``` 在这个实现中,我们首先定义了一个单词列表,然后从中随机选择一个单词作为要猜的单词。之后我们定义了初始的猜测次数和猜测的字母集合。在每一轮游戏中,我们先显示当前已经猜对的字母,让用户输入猜测的字母,然后检查猜测的字母是否已经猜过,如果没有猜过,则将其加入猜测的字母集合中。如果猜测的字母在单词中出现,则提示用户猜对了,否则提示用户猜错了,并将猜测次数减一。当猜测次数为零或者单词被猜中时,游戏结束,根据情况显示结果。 ### 回答2: "hangman"是一款经典的猜字游戏,在Python中可以轻松实现。该游戏的目标是猜出隐藏的单词,每次猜错都会向绞刑架添加一个部分,当绞刑架完成时,游戏失败。 要实现"hangman"游戏,首先需要准备一个单词列表,可以根据自己的喜好或需要,使用任何单词列表。然后,在游戏开始时,随机选择一个单词,并将其隐藏起来。 接下来,通过逐个猜测字母来猜测隐藏的单词。每次猜测之后,都需要检查猜测的字母是否在隐藏的单词中出现。如果猜测正确,将其揭示在对应的位置上,如果猜测错误,则向绞刑架添加一个部分。 为了使游戏更有趣,可以添加一些额外的功能。例如,可以记录已经猜过的字母,以避免重复猜测相同的字母。还可以添加一些图形界面,以便更直观地显示绞刑架的状态。 当绞刑架完成时,即所有的部分都被添加完毕,则游戏失败。如果在绞刑架完成之前成功猜出隐藏的单词,则游戏胜利。 总之,通过使用Python,可以轻松实现"hangman"猜字游戏。这是一个很好的练习项目,可以锻炼编程技巧和逻辑思维。希望你能享受这个有趣的游戏! ### 回答3: Hangman猜字游戏是一种使用Python编程语言实现的经典游戏。这个游戏的目标是猜测一个隐藏的单词,并在猜错6次之前猜出该单词。 首先,我们从一个预定义的单词列表中随机选择一个单词作为答案。然后,我们将该单词的每个字母用下划线 "_" 表示,并显示在屏幕上。 接下来,玩家可以输入一个字母作为猜测。我们将按以下步骤检查玩家的猜测是否正确: 1. 检查玩家的输入是否是一个合法字母。 2. 检查这个字母是否已经被猜过,如果是,则提示玩家重新输入。 3. 检查这个字母是否在答案中。 4. 如果字母在答案中出现,我们将更新显示在屏幕上的单词,将正确猜测的字母替换掉对应的下划线。 5. 如果字母不在答案中,我们将计数器加1,并显示猜错的次数。 6. 重复上述步骤,直到玩家猜出整个单词或猜错6次。 如果玩家猜出整个单词,则游戏胜利;如果玩家猜错6次,则游戏失败。 除了基本的游戏逻辑,我们还可以添加一些附加功能,例如: - 显示已猜过的字母列表,以避免重复猜测; - 添加图形界面,使游戏更具吸引力; - 使用外部数据源来生成单词列表,并使游戏更具挑战性。 总之,Hangman猜字游戏是一个有趣且能够提高编程技能的项目,而Python编程语言的灵活性和易于学习的特点使其成为实现该游戏的理想选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值