跟老齐学Python之做一个小游戏


Posted in Python onSeptember 28, 2014

在讲述有关list的时候,提到做游戏的事情,后来这个事情一直没有接续。不是忘记了,是在想在哪个阶段做最合适。经过一段时间学习,看官已经不是纯粹小白了,已经属于python初级者了。现在就是开始做那个游戏的时候了。

游戏内容:猜数字游戏

太简单了吧。是的,游戏难度不大,不过这个游戏中蕴含的东西可是值得玩味的。

游戏过程描述

程序运行起来,随机在某个范围内选择一个整数。
提示用户输入数字,也就是猜程序随即选的那个数字。
程序将用户输入的数字与自己选定的对比,一样则用户完成游戏,否则继续猜。
使用次数少的用户得胜.
分析

在任何形式的程序开发之前,不管是大还是小,都要进行分析。即根据功能需求,将不同功能点进行分解。从而确定开发过程。我们现在做一个很小的程序,也是这样来做。

随机选择一个数

要实现随机选择一个数字,可以使用python中的一个随机函数:random。下面对这个函数做简要介绍,除了针对本次应用之外,还扩展点,也许别处看官能用上。

还是要首先强化一种学习方法,就是要学会查看帮助文档。

>>> import random  #这个是必须的,因为不是内置函数

>>> dir(random)

['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', 'WichmannHill', '_BuiltinMethodType', '_MethodType', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_acos', '_ceil', '_cos', '_e', '_exp', '_hashlib', '_hexlify', '_inst', '_log', '_pi', '_random', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'division', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'jumpahead', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>> help(random.randint)
Help on method randint in module random:
randint(self, a, b) method of random.Random instance

    Return random integer in range [a, b], including both end points.

耐心地看文档,就明白怎么用了。不过,还是把主要的东西列出来,但仍然建议看官在看每个函数的使用之前,在交互模式下通过help来查看文档。

随机整数:

>>> import random

>>> random.randint(0,99)

21

随机选取0到100间的偶数:

>>> import random

>>> random.randrange(0, 101, 2)

42

随机浮点数:

>>> import random

>>> random.random() 

0.85415370477785668

>>> random.uniform(1, 10)

5.4221167969800881

随机字符:

>>> import random

>>> random.choice('qiwsir.github.io')

'g'

多个字符中选取特定数量的字符:

>>> import random

random.sample('qiwsir.github.io',3) 

['w', 's', 'b']

随机选取字符串:

>>> import random

>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )

'lemon'

洗牌:把原有的顺序打乱,按照随机顺序排列

>>> import random

>>> items = [1, 2, 3, 4, 5, 6]

>>> random.shuffle(items)

>>> items

[3, 2, 5, 6, 4, 1]

有点多了。不过,本次实验中,值用到了random.randint()即可。多出来是买一送一的(哦。忘记了,没有人买呢,本课程全是白送的)。

关键技术点之一已经突破。可以编程了。再梳理一下流程。画个图展示:

(备注:这里我先懒惰一下吧,看官能不能画出这个程序的流程图呢?特别是如果是一个初学者,流程图一定要自己画哦。刚才看到网上一个朋友说自己学编程,但是逻辑思维差,所以没有学好。其实,画流程图就是帮助提高逻辑思维的一种好方式,请画图吧。)

图画好了,按照直观的理解,下面的代码是一个初学者常常写出来的(老鸟们不要喷,因为是代表初学者的)。

#!/usr/bin/env python

#coding:utf-8
import random
number = random.randint(1,100)
print "请输入一个100以内的自然数:"
input_number = raw_input()
if number == int(input_number):

    print "猜对了,这个数是:"

    print number

else:

    print "错了。"

上面的程序已经能够基本走通,但是,还有很多缺陷。

最明显的就是只能让人猜一次,不能多次。怎么修改,能够多次猜呢?动动脑筋之后看代码,或者看官在自己的代码上改改,能不能实现多次猜测?

另外,能不能增强一些友好性呢,让用户知道自己输入的数是大了,还是小了。

根据上述修改想法,新代码如下:

#!/usr/bin/env python

#coding:utf-8
import random
number = random.randint(1,100)
print "请输入一个100以内的自然数:"
input_number = raw_input()
if number == int(input_number):

    print "猜对了,这个数是:"

    print number

elif number > int(input_number):

    print "小了"

    input_number = raw_input()

elif number < int(input_number):

    print "大了"

    input_number = raw_input()

else:

    print "错了。"

嗯,似乎比原来进步一点点,因为允许用户输入第二次了。同时也告诉用户输入的是大还是小了。但,这也不行呀。应该能够输入很多次,直到正确为止。

是的。这就要用到一个新的东西:循环。如果看官心急,可以google一下while或者for循环,来进一步完善这个游戏,如果不着急,可以等等,随后我也会讲到这部分。

这个游戏还没有完呢,即使用了循环,后面还会继续。

Python 相关文章推荐
详细解析Python中__init__()方法的高级应用
May 11 Python
深入理解python函数递归和生成器
Jun 06 Python
JSON Web Tokens的实现原理
Apr 02 Python
Python实现的计数排序算法示例
Nov 29 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
pycharm新建一个python工程步骤
Jul 16 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
ASP.NET Core中的配置详解
Feb 05 Python
跟老齐学Python之坑爹的字符编码
Sep 28 #Python
python自动化测试之setUp与tearDown实例
Sep 28 #Python
python自动化测试实例解析
Sep 28 #Python
python实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 #Python
python格式化字符串实例总结
Sep 28 #Python
python中文编码问题小结
Sep 28 #Python
python多重继承新算法C3介绍
Sep 28 #Python
You might like
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
Node.js编码规范
2014/07/14 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
几种响应式文字详解
2017/05/19 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
老生常谈Python基础之字符编码
2017/06/14 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
财经学院自荐信范文
2014/02/02 职场文书
商场促销活动策划方案
2014/08/18 职场文书
实验心得体会
2014/09/05 职场文书
初级党校心得体会
2014/09/11 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
婚内房产协议书范本
2014/10/02 职场文书
教师党员个人总结
2015/02/10 职场文书
个人年终总结范文
2015/03/09 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
MySQL锁机制
2021/04/05 MySQL
Nginx反向代理学习实例教程
2021/10/24 Servers
Python Django项目和应用的创建详解
2021/11/27 Python