【白手起家】Python教程02——需求分析与流程图

1.前言

这篇教程会主要讲解需求分析与流程图。在生活中,需求分析与流程图能有助于您解决问题,而在简单程序编写中,它们则有助于您更快的编写出更有条理性的程序,如果是复杂的程序,它们则是必须的

2.一个情景

大家在工作或学习之余是否玩过这样一个游戏:每位玩家各获得一个词语,游戏的内容是聊天,聊天中的任何一句话都不能含有自己获得的词语,如果说出就会被淘汰,同时玩家需要通过聊天推测其他玩家获得的词语,如果成功推测出一位玩家获得的词语则被推测的玩家就会被淘汰,同时请小心其他玩家也在推测你获得的词语。当仅剩最后一个玩家是,判定该玩家胜利。
玩家一“神明请你喝茶”和玩家二“茶喝你请明神”现在想要玩这个游戏,但他们只有两个人,为了保证公平性二人都不能书写所有可选定的词语,此处也许就是部分读者学习计算机程序的一个原因吧

3.需求分析

因为需要确保公平性,如果其中一个人书写了可选定的所有词语,则他很容易猜出对方获得的词语(一个一个猜就行了),所以其中任何一个人都不能书写可选定的所有词语,但是没有第三个人参与这场游戏。于是经过分析,他们的需求就是一个可以在指定词库中随机选取不重复的两个词并以互相不可见的方式传达给两人的程序

4.流程构思

根据需求分析的结果,我们需要先制定一个词库,词库可以用各语言中的列表来实现。以Python为例,Python的列表语法是:

words=["啊这","不是","聊天","玩","<当前时间>","好的","什么","谢谢","你","嗯"]

正如上面我们选定了十个词汇并把它们加入了词库“words”,其中“<当前时间>”是指游戏时的时间。
然后我们需要编写一个随机指定器,这点我对其他语言并不了解,如果您选用的语言不是Python,请参见其他教程。在Python中编写一个随机指定器需要Random库!Python实例如下:

import random as rd
choose0=rd.randint(0,9)

Python标准库没有随机功能,所以需要先导入随机库import random as rd,“as”后面实际上是任意的,这只是你为了方便给库起的别名,导入后我们使用randint函数随机生成0-9的一个整数,并把生成的数赋给“choose0”变量,choose0变量将会作为玩家1的词语指定;接下来使用同样的方法再生成一个数并赋给“choose1”变量,choose1变量将作为玩家2的词语指定
注:如果您像作者那样导入库,使用该库中函数时一定要“你给库起的别名.函数”,并且您给库起的别名不要和其他库的名重复,只能由字母、数字、下划线组成,且不能以数字开头

但是随机是有重复的可能的,避免方法就是验证随机指定器生成的数是否重复,在Python中可以使用布尔值来验证:

test=choose0==choose1

如果是重复的,则test的值是True,如果不重复,则test的值是False

重复是不可取的,所以一旦重复就需要重新生成,直到不重复为止。在Python中有条件的重复做一件事可以用到循环-while

import random as rd
choose0=rd.randint(0,9)
test=True
while test==True:
	choose1=rd.randint(0,9)
	test=choose0==choose1

test的初始值是True,也就是说这个循环至少会进行一次,因为choose1是在循环中定义的,并且我们始终在循环的结尾验证他们是否重复,如果依然重复,循环则会再次进行

确认不重复后,我们就需要按照随机生成的数检索相应的词,Python的列表也有检索功能,语法是:

word0=words[choose0]
word1=words[choose1]

我们分别按照choose0和choose1在words词库中检索词语,并将结果分别赋给word0和word1

接下来就是最后一步了——用互相不可见的方式传达给两人,这可以通过将两个词语分别写入两个文件实现,Python的标准库能实现文件读写,需要用到open

file0=open('./玩家1.txt','w',encoding='UTF-8')
file1=open('./玩家2.txt','w',encoding='UTF-8')
file0.write(word0)
file1.write(word1)
file0.close()
file1.close()

文件读写在这里就不解释了,作者会在后面的教程里详细讲解

整合后的完整代码:

import random as rd
words=["啊这","不是","聊天","玩","<当前时间>","好的","什么","谢谢","你","嗯"]
choose0=rd.randint(0,9)
test=True
while test==True:
	choose1=rd.randint(0,9)
	test=choose0==choose1
word0=words[choose0]
word1=words[choose1]
file0=open('./玩家1.txt','w',encoding='UTF-8')
file1=open('./玩家2.txt','w',encoding='UTF-8')
file0.write(word0)
file1.write(word1)
file0.close()
file1.close()

以上内容的代码如果您没有理解也没关系,这些作者都会在以后的教程里详细讲解,这篇教程需要您理解的主要是如何构思流程

5.绘制流程图

下面是上述程序的流程图
此处应该是流程图
事实上绘制流程图不是必要的,只要您进行了流程分析就可以顺利的编写出程序

流程图中常见图形含义

图形含义
圆角矩形程序的开始与结束
矩形普通工作环节
菱形判定
平行四边形输入与输出
箭头工作流方向

Python的专项内容将从下一篇教程开始

The End

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值