在上一篇《手把手陪您学Python》18——循环语句for中,我们学习了最后一种控制流语句,同时也结束了一个阶段的学习任务。
在这一篇中,我们将对之前18篇文章的内容进行个小结,方便大家了解其知识框架,掌握其中的重点内容。最后会再用一个较为复杂的实例,将我们之前学习的内容加以运用和实践。
1、Python的介绍
在第一篇文章中,我们通过Python的几个优势和特性,向大家介绍了Python这种语言。相信这些特点,在大家后面的学习中都或多或少有了一些体会。还没有学习的朋友们,可以通过点击下方链接直达。
2、软件的安装和配置
之后,我们用3篇文章,向大家介绍了Python、集成开发环境(IDE)——PyCharm,以及我们后面使用最多的Jupyter Notebook的安装、配置和使用方法。经过一段时间的学习,以及“石头剪刀布”游戏的编写,软件的使用应该已经不是大家学习的障碍了。但还请大家在后面的学习中,能够不断地去熟悉、挖掘软件的各类功能。
《手把手陪您学Python》3——PyCharm的安装和配置
《手把手陪您学Python》5——Jupyter Notebook
3、开启Python之门
通过学习print()函数,我们打印出了学习Python的第一句话“Hello World!”。因为print()函数是Python的最基础的输出方式,包括灵活调整其中的参数,都会对我们日后实现多样化的输出有所帮助。
4、字符串
在这个阶段中,占用篇幅最多的内容就是字符串的介绍了。从中大家不仅学到了字符串各种标识、检索、切片、运算、函数和格式化输出的方法,也感受到了Python的强大。仅仅一个小小的字符串,就能够衍生出这么强大的功能。可以说只有我们想不到的,没有Python做不到的!
5、数字和运算
数字和字符串都属于Python的标量类型,是我们在编写程序中必不可少的应用对象。通过算数运算、赋值运算、比较运算、逻辑运算、成员运算、身份运算、位运算等运算方式的学习,也为我们后面学习控制流语句奠定了基础。
6、交互式输入
除了第四篇文章中学习的输出,我们应用最多也是最广泛的方法就是输入了,也只有通过输入、执行、输出这样一个完整的循环,才能够让我们实现与计算机的交互。
7、控制流
在学习控制流语句之前,我们所有的程序都是按照从上到下的顺序执行的,而且每行语句也都只执行一遍,所以这不能称之为控制,只能叫做“流水”。而当我们学习了控制流语句之后,我们才能够真正对语句进行控制,通过条件去控制是否执行、循环或者终止。语言控制能力的提高,也必然会使我们的程序变得更加丰富、灵活和简化。
除了以上内容,我们还在控制流语句的几篇文章中,和大家一起利用PyCharm编写了一个好玩的Python游戏程序——石头剪刀布。目前游戏的版本已经更新到了V3.1,大家可以通过关注“亦说Python”公众号,回复关键词“手17”,就能够免费下载到这个游戏最新版本的PyCharm程序文件。
最后,我们用一个稍微复杂点的程序作为我们这一阶段的应用案例,帮助大家回顾过去所学的知识点,并将其应用到实践中。
这次我们要编写的程序也是一个游戏程序,叫做“猜数字”。这个游戏是我在上学时使用的文曲星里面自带的一个功能,不知道大家有没有玩过(是不是暴露年龄了。。。)。因为它的规则简单、易于理解,同时又不需要特别复杂的函数、方法就能够实现,因此,特别适合做我们的阶段总结案例。
下面,先介绍一下这个游戏的规则。
电脑随机产生0~9中4位不重复数字,游戏者同样输入4位0~9中的不重复数字作为竞猜数字,并与电脑产生的数字逐位进行比较:
如果数字相同、位置也相同,则记录1个A;
如果数字相同但位置不同,则记录1个B;
如果数字不同,则不记录。
游戏者每局输入数字后,由电脑根据上述规则对每位数字进行判定,并输出形如1A0B,2A2B的结果。如果游戏者输入的数字和位置,与电脑产生的数字和位置都完全相同,输出4A0B的结果,并取得胜利。
根据这个游戏规则,我们在编写程序时有如下几个重点步骤:
1、电脑产生4位不重复数字,难点在于“不重复”。如果是可以重复的,我们可以直接生成一个四位数字就好了。如果不能重复,就要利用随机函数在一个集合中不重复选取了。这里会使用一个我们之前没有接触到的随机函数,但建议大家先利用网络搜索一下,看是否能够找到实现这个功能的函数。
2、游戏者输入4位不重复数字。如果不考虑游戏者输入错误的情况,这个步骤非常简单,只要input()提示输入内容就可以了。但为了游戏的完整,我们在程序中设计了对输入内容的三个检测条件,如果不符合输入规则,就要重复输入。重复输入使用什么语句对大家来说很容易,但可以先想一想这三个规则是什么,又应该如何实现?
3、逐位比较数字,并输出结果。要完成这个步骤,大家要考虑好如何对数字及其位置进行比较。最终的程序语句是很简洁的,可以提醒大家一下,要利用字符串的功能。字符串?比较的不是数字么,为什么要用字符串?因为要“逐位”比较,而不是整个数字进行比较,所以字符串才是更好的处理方法。所以,前面几步如果一直思考的是用数字做比较,可能要稍微调整一下了。
4、为了增加游戏性,也为了让我们多练习使用循环,在游戏中增加了计数功能,这个应该并不难。
以上就是编写这个游戏程序的一些思路和重点,希望大家能够根据这些重点,自己想一想、试一试这个程序应该如何编写。即使开始有错误也没有关系,多修改、调整几遍就好了。实在不行,再看下面的代码示例,并与自己的程序进行比较。
为便于大家的阅读和理解,在下面的示例中,每段代码都用注释的方式进行了解释。最终的PyCharm文件,也可以通过关注“亦说Python”公众号,回复关键词“手19”免费下载。
# 因为要使用随机函数,需要先导入随机函数库
import random
# 使用sample()函数,随机生成4位不重复数字字符串组成的列表
computer_lst = random.sample(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 4)
# 使用join()函数,将列表元素连接成字符串
computer_num = str.join('', computer_lst)
# 为进入循环,设定的初始条件
result = '0A0B'
# 竞猜次数初始值
times = 0
# 如果答案不正确,通过循环连续竞猜
while result not in '4A0B':
# 记录竞猜次数
times += 1
# 为进入循环,设定的初始条件
user_input_isdigit, user_input_is4, user_input_isnotduplicate = False, False, False
# 如果游戏者的输入不符合要求,提示重新输入
while not (user_input_isdigit and user_input_is4 and user_input_isnotduplicate):
# 游戏者输入四位数字,并将其转换成字符串
user_input = str(input("请连续输入0~9中的4位不同数字:"))
# 1、检测游戏者输入内容是否都是数字
user_input_isdigit = user_input.isdigit()
# 2、检测游戏者输入内容是否是4位
user_input_is4 = len(user_input) == 4
# 3、检测游戏者输入内容是否不包含重复数字
user_input_isnotduplicate = True
# 如果存在任意一个重复的情况,user_input_isnotduplicate的值就为False
for i in range(3):
for j in range(i - 3, 0, 1):
if user_input[i] == user_input[j]:
user_input_isnotduplicate = False
# 如果存在输入不符合要求的情况,提示重新输入
if not (user_input_isdigit and user_input_is4 and user_input_isnotduplicate):
print("不符合输入规则,请重新输入。")
# 将A、B个数归零
A, B = 0, 0
# 逐位进行对比
for i in range(4):
# 如果位置和数字都一致,A的数量加1
if user_input[i] == computer_num[i]:
A += 1
# 如果输入的数字包括在内,B的数量加1
if user_input[i] in computer_num:
B += 1
# B - A得到数字正确但位置错误的数量,同时组合成结果字符串
result = str(A) + 'A' + str(B - A) + 'B'
# 如果判断正确,输出结果,循环结束,否则提示继续竞猜,使用else可以避免最后还输出继续竞猜的提示
if result == '4A0B':
print("这是您第{}次竞猜。您竞猜的数字是:{},竞猜结果为:{}。恭喜您!猜对了。".format(times, user_input, result))
print('\n', '*' * 65, '\n', sep='')
break
else:
print("这是您第{}次竞猜。您竞猜的数字是:{},竞猜结果为:{}。很遗憾,请继续竞猜。".format(times, user_input, result))
print('\n', '*' * 65, '\n', sep='')
怎么样,大家是否已经玩上这个游戏了?这个游戏和“石头剪刀布”的游戏可不一样,是需要考验智商的,有可能还会玩上瘾哦^^
玩的同时大家也不要忘了,我们的目标可是学Python啊,而且我们不是玩文曲星,我们可是程序的设计者!所以,在这里给大家再留一个思考题,如何才能够通过修改程序,让我们直接就能够看到答案,一次性猜对呢?答案同样会在下一篇文章中公布。
至此,我们已经完成了Python入门第一阶段的学习了,大家是否已经感觉到小有所成了?如果您觉得有所收获,希望能够多多转发分享,让更多朋友看到《手把手陪您学Python》这个系列的文章,让更多人加入到Python学习的队伍中,也算是对我一点点小小的支持吧。
在这里先谢谢大家啦!
从下一篇开始,我们将会学习Python的数据结构,包括列表、元组、字典和集合,敬请关注。
感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^
欢迎扫描下方二维码,关注“亦说Python”公众号,阅读《手把手陪您学Python》系列文章的其他篇目,或点击下方链接直达。
《手把手陪您学Python》3——PyCharm的安装和配置
《手把手陪您学Python》5——Jupyter Notebook
For Fans:关注“亦说Python”公众号,回复“手19”,即可免费下载本篇文章所用示例语句。
![](https://i-blog.csdnimg.cn/blog_migrate/980b7300694dfdd75e437926bf9aafa0.jpeg)