Hangman是一个双人游戏,通常用纸和铅笔来玩。一个玩家想好一个单词,然在纸上为单词的每个字母画一个空格。然后第二个玩家猜测这个单词中可能包含的字母。
如果第二个玩家猜测对了,第一个玩家就在正确的空格处填写这个字母。如果没有猜对,第一个玩家就画出火柴人的身体的一部分。第二个玩家必须在火柴人画好之前,就猜对单词中所有的字母,只有这样他才能获胜。

主要内容:

  • 列表;
  • in操作符;
  • 方法;
  • 字符串方法lower()、upper()、split()、startswith()和endswith();
  • elif语句;

源代码:

import random
HANGMAN_PICS = ['''+---+|||===''','''+---+0    |||===''','''      +---+0    ||    ||===''','''      +---+0    |/|   ||===''','''      +---+0    |/|\   ||===''','''      +---+0    |/|\   |/     |===''','''      +---+0    |/|\   |/ \   |===''']
words = '''ant baboon badger bat beer beaver camle cat clam cobra cougarcoyote crow deer dog donkey duck eagleferret fox frog goat goose hawk'''.split()def getRandomWord(wordList):#This function returns a random string from the passed list of string.wordIndex = random.randint(0, len(wordList) - 1)return wordList[wordIndex]def displayBoard(missedLetters, correctLetters, secretWord):print(HANGMAN_PICS[len(missedLetters)])print()print('Missed letters:', end=' ')for letter in missedLetters:print(letter, end=' ')print()blanks = '_'*len(secretWord)for i in range(len(secretWord)):#Replace blanks with correctly guessed letters.if secretWord[i] in correctLetters:blanks = blanks[:i] + secretWord[i] + blanks[i + 1:]#Show the secret word with spaces in betweeen each letter.    for letter in blanks:print(letter, end=' ')print()def getGuess(alreadyGuessed):#Return the letter the player entered. This function makes sure the #player entered asingle letter and not something else.while True:print('Guess a letter.')guess = input()guess = guess.lower()if len(guess) != 1:print('Please enter a single letter.')elif guess in alreadyGuessed:print('you have already guessed that letter. Choose again.')elif guess not in 'abcdefghizklmnopqrstuvwxyz':print('Please enter a LETTER.')else:return guessdef playAgain():#This function returns True if the player wants to play agains;#otherwise, it returns False.print('Do you want to play again ? (yes or no)')return input().lower().startswith('y')print('H A N G M A N')
missedLetters = ' '
correctLetters = ' '
secretWord = getRandomWord(words)
gameIsDone = Falsewhile True:displayBoard(missedLetters, correctLetters, secretWord)guess = getGuess(missedLetters + correctLetters)if guess in secretWord:correctLetters = correctLetters + guessfoundAllLetters = Truefor i in range(len(secretWord)):if secretWord[i] not in correctLetters:foundAllLetters = Falsebreakif foundAllLetters == True:print('Yes! The secret word is "' + secretWord + '"! You have won!')gameIsDone = Trueelse:missedLetters = missedLetters + guess#Check if player has guessed too many times and lost.if len(missedLetters) == len(HANGMAN_PICS) - 1:displayBoard(missedLetters, correctLetters, secretWord)print('You have run out of guesses!\nAfter ' + str(len(missedLetters)) + ' missed guesses and '+str(len(correctLetters)) + ' correct guesses, the word was "'+ secretWord +' " ')gameIsDone = True#Ask the player if they want to play again(but only if the game is done.)if gameIsDone:if playAgain():missedLetters = ''correctLetters = ''gameIsDone = FalsesecretWord = getRandomWord(words)else:break

常量:

变量HANGMAN_PICS的名称全部是大写的,这是表示常量的惯例。常量(constsnt)是在第一次赋值之后其值就不在变化的量。

列表数据类型

HANGMAN_PICS包含了几个多行字符串。逗号隔开的列表中的各个值,这些值也叫做元素(item)。HANGMAN_PICS中的每一个元素都是一个多行字符串,列表使得你能够存储多个值,而不需要为每个值都使用一个变量。

列表可以通过索引进行访问,记住列表索引值是从0开始的,就是说0是表示列表中的第一个元素。

列表连接

列表使用 + 号连接,如下例:

>>> [1,2,3] + [4,5,6] + [7,8,9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

in操作符

in操作符可以告诉我们一个值是否在列表中,使用in操作符的表达式会返回一个布尔值。如果该值在列表中,返回值是True;如果该值不在列表中,返回值是False。

[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 1 in [1,2,3]
True
>>> 4 in [1,2,3]
False

调用方法:
方法(method)是附加到一个值之上的函数。要调用一个方法,必须使用一个句点将其附加到一个具体的值上。

reverse()方法会把列表中的元素顺序反转。

>>> x = [1,2,3]
>>> x.reverse()
>>> x
[3, 2, 1]

append()方法会把作为参数传递给它的值添加到列表的末尾。

>>> x = [1,2,3]
>>> x.append(4)
>>> x
[1, 2, 3, 4]

split()方法返回多个字符串的一个列表

>>> y ='Hello Pyhton'
>>> y.split()
['Hello', 'Pyhton']

lower()方法返回一个字母都是小写的字符串
upper()方法返回一个字母都是大写的字符串

>>> y ='Hello Pyhton'
>>> y.split()
['Hello', 'Pyhton']
>>> y = 'Hello World'
>>> y.lower()
'hello world'
>>> y.upper()
'HELLO WORLD'

startswith()方法是以括号内开头的返回True,反之为False
endswith()方法是以括号内开头的返回Flase,繁殖为True

>>> 'hello'.startswith('h')
True
>>> 'python'.endswith('p')
False

参考:

  1. 《Python游戏编程快速上手》第四版,AI Sweigart著,李强 译

Python游戏编程(四)Hangman相关推荐

  1. 《Python游戏编程快速上手》第十四章----凯撒密码

    <Python游戏编程快速上手>的第十二章主要讲了笛卡尔坐标系的基本数学知识,我就不重现了:然后第十三章主要是一个笛卡尔坐标系的小应用,这个小应用也是非常简单的,所以我就不重现了. 今天主 ...

  2. 《Python游戏编程快速上手》第四章-讲笑话

    接着昨天的文章,今天实现<Python游戏编程快速上手>的第四章–讲笑话.这个小游戏的实现非常之简单.所以我就不说什么了,直接上代码 print("What do you get ...

  3. 《Python游戏编程快速上手》第八章--Hangman

    可能有的读者会觉得很奇怪,上一篇还是第五章,这一篇就是第八章了,中间的第六七章难道被博主吃掉了吗? 我想说明一下的是,在学习<Python游戏编程快速上手>一书的过程中,我越发觉得这本书更 ...

  4. python游戏编程快速上手pdf_Python游戏编程快速上手 (斯维加特著) 中文pdf完整版[18MB]...

    Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言.Python游戏编程快速上手通过编写一个个小巧.有趣的游戏来教授Python编程,并且采用直接展示了游戏 ...

  5. python游戏编程书_Python游戏编程快速上手 第4版 (斯维加特著) 中文pdf扫描版[41MB]...

    Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. Python游戏编程快速上手 (第4版)通过编写一个个小巧.有趣的游戏来教授Python编程,并且采用 ...

  6. 小学生python游戏编程arcade----基本知识1

    小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...

  7. 小学生python游戏编程arcade----坦克大战2

    小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...

  8. Python游戏编程快速上手pdf

    下载地址:网盘下载 内容简介  · · · · · · Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. 本书通过编写一个个小巧.有趣的游戏来教授Pyt ...

  9. 小学生python游戏编程arcade----坦克大战4

    小学生python游戏编程arcade----坦克大战4 前言 坦克大战4 1.1 每单元英语单词学完升级效果 1.2 单词调用及敌坦克随机问题 1.3 效果图 1.4 代码实现 源码获取 前言 接上 ...

最新文章

  1. 【问题】vs IIS破除文件上传限制最全版
  2. You have new mail
  3. html中滚动栏的样式
  4. linux服务器安装php7_CentOS 7 下 PHP 7.1.12 安装配置
  5. oracle数据库常用操作语句
  6. 希捷扩展PCIe产品组合 推出两款新闪存加速卡
  7. springcloud之Feign、ribbon设置超时时间和重试机制的总结
  8. bio linux 创建_[转载]biolinux包含软件
  9. 为什么我不推荐去SAP培训机构参加培训?
  10. JS And Vue代码调试——IDEA+JS+vue-devtools-dev+JetBrains IDE Support(Chrome插件)
  11. 交大『云观CD-ROMIII』直接由CD-ROM执行之安装法(转)
  12. 【C#上位机】西门子1200PLC实用定位控制程序案例
  13. mysql配置文件参数详解_MySQL配置文件mysql.ini参数详解
  14. 【3d游戏模型】女骑士制作指南:硬表面和纹理
  15. LED驱动电源不足,都有哪些原因
  16. 计算机一级基本操作题创建快捷方式,2018年3月计算机一级考试MSOffice模拟试题(4)...
  17. tensorflow one-hot独热编码
  18. 刘强东卸任京东集团CEO 徐雷接任
  19. HTML 版本声明 DOCTYPE 标签
  20. 天河计算机二级未来教育第几套,计算机二级考试的题目是从未来教育套题里抽的吗?...

热门文章

  1. 中国移动gprs上网设置
  2. 培养学生计算机绘画水平,电脑绘画教导方法
  3. matlab 全1矩阵,matlab全为1的矩阵
  4. 突破局域网对上网用户的限制
  5. 昨夜今天Tech圈:郭明錤预计苹果明年推两款5G iPhone 平井一夫正式退休
  6. 《我不是药神》明星见面会
  7. 什么是用戶调研?为什么我们在用户体验设计中需要它?
  8. 小工具——寻找节点的一二三阶邻居
  9. 如何打开远程办公桌面 三步轻松开启远程办公电脑
  10. CF985D Sand Fortress