Hangman 猜字游戏使用列表List实现

Hangman,猜字游戏,计算机随机选取一个单词,玩家想办法把它一个字母一个字母地猜出来。

如果玩家没能及时猜出单词,火柴小人就会被吊死。

使用到了字符串、元组和列表,以及 while循环、for循环,和 if... else ...逻辑判断

回忆字符串

获如何获取单个字符

name = "python"

name0 ---> p

name3 ---> h

如何转换为大写字母

name = name.upper()---> 一定要注意将转换后的值用= 赋值给name,不然不生效

如何连续创建多个一样的字符

initial_flag = "-" * 5 ---> 字符 * 数字,即可创建出连续的字符

回忆元组Tuple

如何创建一个元组?

words = ("a","b") ----> 使用圆括号

如何向元组中添加元素?

阿偶,元组是不可变的序列,所以无法直接向元组内添加内容,但是可以通过拼接的方式添加,注意被拼接元组中若果只有一个元素需要包含分割符",",否则会被识别为str,无法拼接到元组

回忆range()函数的用法

参数如果是一个正数n,会返回一个[0, n)的序列

以五为单位进行计数: rang(0, 50, 5), rang(起始点,结束点,计数单位),

所以rang(0, 50, 5)会在0, 50)中以5为计数单位返回序列\[0,5,10,15,30,35,40,45

python 复制代码
'''
Hangman Game

猜字游戏,计算机随机选取一个单词,玩家想办法把它一个字母一个字母地猜出来。
如果玩家没能及时猜出单词,火柴小人就会被吊死

'''
import random

# 常量, 火柴人的绞刑架。越后面字符串所表示的图像越完整。
#玩家每猜错一次,就显示下一条字符串,猜错八次后,图片显示完整,火柴人也就挂了,玩家输,游戏结束
HANGMAN = (
	"""
	 -----
	 |	 |
	 |
	 |
	 |
	 |
	 |
	 |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 |
	 |
	 |
	 |
	 |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 |  -+- 
	 |
	 |
	 |
	 |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 | /-+- 
	 |
	 |
	 |
	 |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 | /-+-/ 
	 |
	 |
	 |
	 |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 | /-+-/ 
	 |   |
	 |
	 |
	 |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 | /-+-/ 
	 |   |
	 |   |
	 |  |
	 |  |
	 |
	 ----------
	""",
	"""
	 -----
	 |	 |
	 |	 O
	 | /-+-/ 
	 |   |
	 |   |
	 |  | |
	 |  | |
	 |
	 ----------
	""",)

# 最多猜错次数,第一张空绞刑架,在用户开始猜之前就展示,所以-1,用户只有七次猜词机会
MAX_WRONG = len(HANGMAN) - 1

# 供玩家猜测的词汇
WORDS = ("VIGOROUS","RIGOROUS","GORGEOUS","SPLENDID","MAGNIFICENT")

# 随机选取一个词作为本轮待猜词汇
word = random.choice(WORDS)

# 用户一猜出部分,没有猜出部分用-表示,每个横线表示word中的一个字母
so_far = "-" * len(word)

# 猜错次数
wrong = 0

# 玩家猜过的所有字母
used = []

print("Welcome to Hangman. Good Luck")

# 循环如果用户猜错次数未已达上线而且用户未完全猜出单词,就打印火柴人图案
while wrong < MAX_WRONG and so_far != word:
	# 根据猜错次数展示HANGMAN元组中不用的图案
	print(HANGMAN[wrong])
	print("\nYou've used th following letters:\n", used)
	print("\nSo far, the word is:\n", so_far)

	# 获取用户的答案,并转为大写,为了方面与机密次比较
	guess = input("\n\nEnter your guess: ")
	guess = guess.upper()

	# 如果字母用户已经猜过了就让用户重新输入一次
	while guess in used:
		print("You've already guessed the letter", guess)
		guess = input("Enter your guess: ")
		guess = guess.upper()

	# 将用户猜测的字母添加到used集合中
	used.append(guess)

	# 判断猜测结果
	if guess in word:
		print("\nYes!", guess, "is in the word!")

		#创建一个新的so_far,包含本次猜的guess
		new = ""
		for i in range(len(word)):
			if guess == word[i]:
				new += guess
			else:
				new += so_far[i] 
		so_far = new 
	else:
		print("\nSorry,", guess, "isn't in the word.")
		wrong += 1

# 如果玩家猜错次数达到最大值,玩家就输了,打印最后一张图片
if wrong == MAX_WRONG:
	print(HANGMAN[wrong])
	print("\nYou've been hanged!")
else:
	print("\nYou guessed it ")

print("\nThe wrod was", word)

input("\nPress the enter key to exit.")
相关推荐
东莞市云毅网络有限公司5 小时前
用 SQLite FTS5 给企业文档建本地全文索引:中文分词与权重调优
python·数据清洗·rag·企业知识库·文档解析
钱栈up5 小时前
health从200变000:一次差点引发双端口冲突的后端巡检复盘
python
正经教主5 小时前
【FDE系列】阶段2:Day 22:变量、数据类型、条件判断 — Python 的“记忆“和“判断“
人工智能·python·fde
Brilliantwxx6 小时前
【STM32】 SPI阻塞式通信与HAL源码(串口读ID实战)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
打工仔折腾 AI6 小时前
Pascal Editor 本地部署实战:Bun 启动 WebGPU 3D 编辑器并解决公网访问报错
人工智能·后端·python·性能优化
m0_547486666 小时前
《Python从入门到数据分析应用》全套PPT课件2026
python·数据分析
All for pursuit.6 小时前
FastAPI+Ollama 部署本地AI大模型对话助手
python·github·aigc·ollama
吠品6 小时前
Nginx负载均衡配置与线上故障排查的一些经验
java·开发语言·数据库
边境悍匪6 小时前
蜗牛学苑 Java 智能体学习 Day44|Vue 前端项目搭建 思维导图复盘
java·开发语言·spring boot·学习·阿里云
Python图像识别6 小时前
10-【2027毕设】YOLO11PCB缺陷检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·深度学习·yolo·毕业设计·毕设