Python实现的简单hangman游戏实例


Posted in Python onJune 28, 2015

本文实例讲述了Python实现的简单hangman游戏。分享给大家供大家参考。具体如下:

#!/usr/bin/env python
import random 
import cPickle 
class Hangman(object):
  '''A simple hangman game that tries to improve your vocabulary a bit '''
  def __init__(self):
    # the variables used, this is not necessary
    self.dumpfile = ''    #the dictionary file
    self.dictionary = {}   #the pickled dict
    self.words = []     #list of words used
    self.secret_word = ''  #the 'key'
    self.length = 0     #length of the 'key'
    self.keys = []      #inputs that match the 'key'
    self.used_keys = []   #keys that are already used
    self.guess = ''     #player's guess
    self.mistakes = 0    #number of incorrect inputs
    return self.load_dict()
  #insert some random hints for the player
  def insert_random(self, length):
    randint = random.randint
    # 3 hints
    if length >= 7: hint = 3
    else: hint = 1
    for x in xrange(hint):
        a = randint(1, length - 1)
        self.keys[a-1] = self.secret_word[a-1]
  def test_input(self):
    #if the guessed letter matches
    if self.guess in self.secret_word:
      indexes = [i for i, item in enumerate(self.secret_word) if item == self.guess]
      for index in indexes:
        self.keys[index] = self.guess
        self.used_keys.append(self.guess)
        print "used letters ",set(self.used_keys),'\n'
    #if the guessed letter didn't match
    else:
      self.used_keys.append(self.guess)
      self.mistakes += 1
      print "used letters ",set(self.used_keys),'\n'
  # load the pickled word dictionary and unpickle them  
  def load_dict(self):
    try :
      self.dumpfile = open("~/python/hangman/wordsdict.pkl", "r")
    except IOError:
      print "Couldn't find the file 'wordsdict.pkl'"
      quit()
    self.dictionary = cPickle.load(self.dumpfile)
    self.words = self.dictionary.keys()
    self.dumpfile.close()
    return self.prepare_word()
  #randomly choose a word for the challenge
  def prepare_word(self):
    self.secret_word = random.choice(self.words)
    #don't count trailing spaces
    self.length = len(self.secret_word.rstrip())
    self.keys = ['_' for x in xrange(self.length)]
    self.insert_random(self.length)
    return self.ask()
  #display the challenge
  def ask(self):
    print ' '.join(self.keys), ":", self.dictionary[self.secret_word] 
    print 
    return self.input_loop()
  #take input from the player
  def input_loop(self):
    #four self.mistakes are allowed
    chances = len(set(self.secret_word)) + 4     
    while chances != 0 and self.mistakes < 5:
      try:
        self.guess = raw_input("> ")
      except EOFError:
        exit(1)
      self.test_input()
      print ' '.join(self.keys)
      if '_' not in self.keys:
        print 'well done!'
        break
      chances -= 1
    if self.mistakes > 4: print 'the word was', ''.join(self.secret_word).upper()
    return self.quit_message()
  def quit_message(self):
    print "\n"
    print "Press 'c' to continue, or any other key to quit the game. "
    print "You can always quit the game by pressing 'Ctrl+D'"
    try:
      command = raw_input('> ')
      if command == 'c': return self.__init__() #loopback
      else : exit(0)
    except EOFError: exit(1)
if __name__ == '__main__':
  game = Hangman()
  game.__init__()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中的闭包实例详解
Aug 29 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python判断两个对象相等的原理
Dec 12 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
Python 如何实现访问者模式
Jul 28 Python
python实现矩阵乘法的方法
Jun 28 #Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 #Python
python实现简单ftp客户端的方法
Jun 28 #Python
基于进程内通讯的python聊天室实现方法
Jun 28 #Python
python实现的简单RPG游戏流程实例
Jun 28 #Python
python实现自动登录人人网并采集信息的方法
Jun 28 #Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 #Python
You might like
解析php时间戳与日期的转换
2013/06/06 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
Vue组件开发初探
2017/02/14 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python实现银行实战系统
2020/02/26 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
程序员岗位职责
2013/11/11 职场文书
个人公开承诺书
2014/03/28 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
学校捐书倡议书
2015/04/27 职场文书
如何写通讯稿
2015/07/22 职场文书
体育教师研修感悟
2015/11/18 职场文书
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS