【Python教程】小练习,写一个“谁在哪儿干什么”的小游戏

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

室长记得小时候经常和同学玩一个叫“谁在哪儿干什么”的游戏。这个游戏由三个人来玩,一个人负责写几个“谁”,即人物,一个人负责写几个“在哪儿”,即地点,一个人负责写几个“干什么”,即事件。写的内容分别做成阄,最后分类抓阄,组成一个“谁在哪儿干什么”的句子。因为结果过于随机,句子读出来常常令人喷饭,所以小的时候常常对这个游戏乐此不疲。

今天我们就运用之前学习到的知识来用Python编写这样一个小游戏,作为我们阶段性的小练习。

这个实例的主要知识点:

列表方法、字符串操作、random模块使用、len函数、int函数、if条件语句、while循环、字典的使用。

首先我们分析一下这个程序,该如何划分它的功能呢?

很简单,分成两个部分,第一部分:做阄。而做阄又分为两个过程,一个是写阄,一个是装阄。

写阄可以有两种方式,一种是提前在代码里写好,另一种是用input函数在程序运行时再输入。当然我们也可以把两种方式结合一下,先在代码里输入一部分,如果运行程序时需要补充再使用input函数。我们就采用这种方式。

至于装阄,我们就可以声明三个列表,一个列表装“谁”,一个装“在哪儿”,一个装“干什么”。

那这一部分的思路就很明确了。我们先声明三个列表,在列表里先填好我们初始的素材。然后使用while循环来实现连续地输入内容,并且要告诉这个内容是属于“谁”还是“在哪儿”还是“干什么”。同时要告诉while循环什么时候停止循环。想想给某些机构打电话时总要用某些数字键去进入对应系统(业务咨询请按1,业务受理请按2,返回上级菜单请按#),我们也可以模仿这一套机制:

首先定义一下初始的素材内容:

然后我们可以定义一个字典,字典的键是我们选择列表需要按的数字,值可以是一个列表,列表的第一个位置是这个列表的中文名字,第二个位置是列表的变量名。这是方便程序打印提示语句,如果不需要的话值也可以只设置为变量名。

接下来就可以进行while循环了,我们希望while循环在遇到我们输入值为0的时候停止,但我们需要考虑第一次循环它能不能进入。因为第一次循环的时候我们并没有输入值,所以输入值没法作为while循环的判据,除非我们先随便定义一个值:

这里注意,input函数的返回值都是字符串,所以做判断的时候不能写 while menu != 0。

输入之后我们就可以进入菜单了,但我们还需要注意一下,如果我们输入0,按照后边的程序走的话肯定是会报错的,因为字典里没有'0'这个键,所以我们需要做个if判断,如果输入0那后边的程序就不进行了,直接进入下一个循环,而到下一个循环进行while条件判断时条件不符合,就可以跳出while循环了:

字典里的列表的变量怎么调用?现在字典是menu_dict,键是menu,那menu的值就是menu_dict[menu],这个值是一个列表,第一位是素材列表的中文名,第二位是相应列表的变量名,那我们就可以把刚才menu_dict[menu]视为一个整体,就好像这个列表的名字就是这个,再去使用索引值去获取第二位的变量,即menu_dict[menu][1].

下边就是要输入素材内容了,基本方法和刚才的菜单方法是一样的。

但是有一处不同是,输入素材是向列表里添加东西,我们需要判断添加的内容是否有重复:

这下我们第一部分功能算是基本完成了,接下来我们搞第二部分。

第二部分就相对容易了,因为无非是组一个句子,学会使用字符串f前缀的同学能够非常轻松地写出来。

但我们不想用for循环来生成句子,我们需要的是随机性。但这个随机性也不是随机让程序生成,而要带一些仪式感:让我们在各个素材范围内各选一个数,而且我们还不能通过记住这个数来记住对应的内容。

那可以怎样实现呢?我们在每次游戏之前都要把列表打乱,这样我们就没法通过记住数字来记住内容。要实现这种方法我们可以使用random模块的shuffle函数:

至于选数的过程,我们仍然可以使用while循环:

随后我们要按顺序输入“谁”“在哪儿”“干什么”的索引值,但我们不想生成三个变量,那我们可以声明一个列表,每次输入索引值都添加到列表里,我们可以使用什么方法?

没错,append方法。

与此同时,我们需要知道索引值的大小应该在什么范围内。因此我们需要知道列表的长度,0到列表长度-1就是索引值可以取值的范围。我们可以使用len函数来获取一个列表的长度。

另外,刚才说过,使用input函数输入的都是字符串,我们还需要把字符串转换成整数。这时候可以使用int函数。

有了这些方法和函数,编程就变得很顺利了:

现在我们两大部分都已经写好了,可以再用一个while循环把这两个部分整合到一起,使用if语句去选择进入到哪个系统:

把代码套到代码块里需要缩进,但是之前已经写好的还要一行一行地去缩进吗?不用,在PyCharm里你可以选中所有需要调整缩进的代码行,然后按tab就可以整体缩进了。同时如果想要减少缩进,可以选中然后按Shift + tab。

那我们来运行一下吧:

我们先直奔主题,不去补充素材,直接开启游戏:

运行着没有问题,只是这结果,emmm……

喜羊羊这是怕被火锅店宰客吗?还是跑完步肉质更紧致?

我们再新输入素材看看:

程序的运行没有问题。

但其实这个程序并不严谨,因为总会有人不听话,乱输内容,就会超出程序的判断范围,所以我们在以后的编程中要注意添加对输入内容的判断。

另外我们后输入的素材也仅限于这次运行中使用,一旦退出就什么都没有了,因此我们需要把这些内容存到文件中的功能。这些功能我们后期会添加。

这一次的实例涉及了很多方面的内容,是一个小综合。大家也可以按照这些思路去开发开发自己曾经玩过的小游戏。如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!

你用程序生成了什么样的句子?欢迎在文章下方留言!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值