import random# 单词库文件名,请注意words.txt文件中的单词全部为小写格式
WORDLIST_FILENAME = "words.txt"def load_words():"""返回值:一个由有效单词(string类型)构成的列表(list)根据单词列表的长度,该函数的执行可能需要消耗一定时间。"""print("Loading word list from file...")# inFile:fileinFile = open(WORDLIST_FILENAME, 'r')# line:stringline = inFile.readline()# wordlist:list of stringswordlist = line.split()print("  ", len(wordlist), "words loaded.")return wordlistdef 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"删除,然后补充函数的实现代码# passcount_1 = 0 #用count_1计数,计算secret_word中的单词在letters_guessed中的个数for i in secret_word: # 遍历secret_word中每一个单词if i in letters_guessed:count_1 += 1if count_1 == len(secret_word):return Trueelse:return Falsedef get_guessed_word(secret_word, letters_guessed):'''secret_word:string类型,谜底单词,即用户正在猜的单词letters_guessed:字母构成的list,其中包含用户已经猜中的字母,字母全部为小写返回值:string类型,由用户已经猜中的字母,以及尚未猜中的字母(以*表示)组成。该string的字母排列顺序与谜底单词保持一致,如:谜底单词为study,猜测过程中的返回值的可能形式为s*u*y'''# 请将以下"pass"删除,然后补充函数的实现代码# passsecret_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_worddef get_available_letters(letters_guessed):'''letters_guessed:字母构成的list,其中包含用户已经猜中的字母,字母全部为小写返回值:string类型,由用户尚未猜中的字母组成'''# 请将以下"pass"删除,然后补充函数的实现代码# passimport stringall_letter = string.ascii_lowercase # 所有小写字母# list_2 = list_1[:]  列表复制方法    all_letter_list = list(all_letter) # 列表化all_letter_listall_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 = 0for i in secret_word:if i in recive_get_guessed_word:num_guessed_right += 1return num_guessed_rightdef match_with_gaps(my_word, other_word):'''my_word:string类型,当前的谜底单词,其中尚未猜中的字母以*表示。other_word:string类型,常规英文单词返回值:boolean类型,如果my_word与other_word长度相同,且my_word中已猜出的字母与other_word中对应位置的字母全部匹配,返回True;否则返回False。 '''# 请将以下"pass"删除,然后补充函数的实现代码# passn = 0if len(my_word) != len(other_word):return Falsefor i in range(len(my_word)):if my_word[i] == "*":n += 1else:my_word[i] == other_word[i]n += 1if n == len(my_word):return Truedef show_possible_matches(my_word):'''my_word:string类型,当前的谜底单词,其中尚未猜中的字母以*表示。返回值:无(无需返回值)功能:用print()函数打印出worldlist中所有与my_word匹配的单词。'''# 请将以下"pass"删除,然后补充函数的实现代码# passcount = 0 # 计数打了几个icount_right = 0 # rve_i = [] # 用列表接收成功的ifor i in wordlist: # 遍历wordlist 中所有单词if match_with_gaps(my_word, i): # 控制长度相同for j in range(len(i)): # 单词中的字母进行比较if my_word[j] == "*":count_right += 1if i[j] == my_word[j]:count_right += 1if count_right == len(my_word):count += 1rve_i.append(i)count_right = 0 # 更新它的值if count == 0:print("没有相匹配的单词")else:print(' '.join(rve_i))def hangman_with_hints(secret_word):'''secret_word:string类型,谜底单词,即用户正在猜的单词该函数除了包含Hangman()函数的所有功能,还提供以下功能:    - 如果用户输入"*",则打印wordlist中与当前猜想结果相匹配的所有单词'''# 请将以下"pass"删除,然后补充函数的实现代码# passprint("欢迎来玩这个游戏呀(*^▽^*), Hangman!")# print("您要猜的单词有"+str(len(secret_word))+"个字母\n""您共有6次猜测机会")rascal = 0 # 防捣蛋鬼alphabet = "abcdefghijklmnopqrstuvwxyz" # 因为判断单词用的get_guessed_word这个函数无法判断重复,故创建这个做判断重复num_guess = 6num_guessed_right_last = 0letters_guessed = [] # 建立空列表,再往里面放东西available_letters = []available_letters.append(get_available_letters(letters_guessed)) # 建立可供使用的单词防止其他情况print("您现在有" + str(num_guess) + "次失败的机会\n"+ "提示:该单词有"+str(len(secret_word))+ "个字母\n"+"可以使用*来点提示哦")while(True):if is_word_guessed(secret_word, letters_guessed): # 判断是否猜完print("恭喜你,猜对了O(∩_∩)O~ 答案是:" + secret_word)breakif 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 recive_word == "*":show_possible_matches(get_guessed_word(secret_word, letters_guessed))print(get_guessed_word(secret_word, letters_guessed))continueif 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)breakelse: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 -= 1if num_guess == 0:print("糟糕,你失败了呢ε=(´ο`*)))答案是:"+ secret_word)breakelse:rascal += 1if recive_word in alphabet:print("不要重复单词!![○・`Д´・ ○]")elif recive_word.lower() in get_available_letters(letters_guessed):print("请输入小写[○・`Д´・ ○]")else:print("不要输入别的什么东西[○・`Д´・ ○]")else:print("是一个,是一个呀╭(╯^╰)╮,请重来")rascal += 1if __name__ == "__main__":secret_word = choose_word(wordlist)hangman_with_hints(secret_word)

hangman进阶版相关推荐

  1. 特朗普“模仿”奥巴马?进阶版换脸技术DeepFakes来了

    整理 | 费棋 出品 | AI科技大本营 DeepFakes,这种能够移花接木的技术,它能将图像或视频中把一张脸替换成另一张脸. 去年 12 月,一个名 Reddit 用户用 DeepFakes 技术 ...

  2. 移动端页面自适应解决方案—rem布局(进阶版)

    之前的一篇<手机端页面自适应解决方案-rem布局>随着时间的推移,该方案已然过时,故为大家介绍一个目前我极力推荐使用的,更加完美的方案--rem布局(进阶版) 该方案使用相当简单,把下面这 ...

  3. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  4. Tensorflow详解保存模型(进阶版一):如何有选择的保存变量

    当然掌握了基础版还不够,我们来看一下进阶版一:如何有选择的保存变量: 这里还要另外涉及两个函数: tf.variable_scope("xxx") 和 tf.get_variabl ...

  5. kaggle (02) - 房价预测案例(进阶版)

    房价预测案例(进阶版) 这是进阶版的notebook.主要是为了比较几种模型框架.所以前面的特征工程部分内容,我也并没有做任何改动,重点都在后面的模型建造section Step 1: 检视源数据集 ...

  6. c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...

    每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章 ...

  7. 蓝桥杯 入门训练 A+B问题进阶版(两个3000位数的加法)

    自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 问题描述 输入A.B,输出A+B ...

  8. python学习-- django 2.1.7 ajax 请求 进阶版

    #原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版  $.get(&qu ...

  9. 手机端页面自适应解决方案—rem布局进阶版

    旧版rem布局 <手机端页面自适应解决方案-rem布局>, 此方案仅适用于移动端web 文章底部常见问题说明第四条,笔者已给出一个相当便捷的解决方案,欢迎留言交流.(2017/9/9) 该 ...

最新文章

  1. maven错误The JAVA_HOME environment variable is not defined correctly
  2. 指定rviz的点启动_好消息!武汉已经启动新冠疫苗紧急接种工作
  3. 数字图像处理王伟强_深度学习主导下,还有必要学数字图像处理?
  4. java exec 关闭_如何正确关闭java ExecutorService
  5. 如下为利用Linux内核链表创建,Linux内核中链表的实现与应用
  6. linux 流函数,标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流
  7. #define c# 报错_c语言中#define的用法
  8. dede定义全局变量(include/common.inc.php)及调用方式
  9. Ansible Synchronize
  10. crash recovery mysql_MySQL · 源码分析 · binlog crash recovery
  11. git笔记之解决eclipse不能提交jar等文件的问题
  12. matlab 手工实现normalize函数 未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘normalize‘
  13. ECharts柱状图常见效果
  14. 瞬时功率与有功功率计算公式
  15. 麦卡锡问答:什么是人工智能?
  16. 使用RAK7268网关与RAK3172节点连接至TTN最新的服务器TTS上
  17. 虚拟机能ping主机,主机ping虚拟机请求超时
  18. 基于VU9P+C6678 的 4 路 FMC 接口基带信号处理板(支持 8 路 1G 瞬时带宽 AD+DA)
  19. 操作系统实验2——高响应比调度算法
  20. (7,4)汉明码在BPSK系统下的性能-MATLAB基带仿真

热门文章

  1. 校园共享自动售货机方案/案列/APP/小程序/网站
  2. 6S大气传输模型修改源码添加、自定义CASI传感器光谱响应
  3. CSS+JavaScript制作文字的LED跑马灯效果
  4. 当数字遇上奇思妙想:探究力扣“最小偶倍数”解题思路
  5. 【填坑】【多图】micro awtrix灯板
  6. 朋友圈广告助手进阶版v30.5.0
  7. ConvNeXt理论讲解
  8. 1489_人月神话阅读笔记_削足适履
  9. 显卡处理图像数据的过程
  10. [翻译]关于Adobe最新的Flash/HTML5策略的问答