第七课:你知道如何用python做个整蛊朋友的小病毒吗?看这里!
各位热衷于刷抖音的同学一定在前几个月刷到过一条风靡全抖音的视频:哦泡果奶病毒。
基于好奇,我特地跨过山和大海,也穿越人山人海,最终搞到了这个程序的安装包。程序的功能其实也很简单,就是将代码打包成apk文件后,让人将其当成安装包安装在手机上,然后运行后,手机就会自动播放90后的童年回忆,哦泡果奶主题曲。并且这个程序在安装的时候会自动申请打开控制手机音量键,否则不通过这个权限程序根本无法运行。所以说如果你打开这个程序,手机的音量就不受你控制了,除非关机,不然你的手机配置再好,也逃脱不了被哦泡果奶主题曲冲击的命运。
那有的同学一下子腰板就坐直了,嗯?要搞事情了?图片图片,搞肯定是要搞滴,但是捏,不是哦泡果奶,是另外一个小程序,具体效果如何呢?点击下面视频看效果:
(视频单独放)
可以看到上面的视频里面这个程序完全是脱离python环境运行的,也就是说不论你的电脑有没有安装python或者是Pycharm他都可以运行。
实际上这个程序的功能也很简单------让运行这个程序的人说我像吴彦祖,否则他只能关机,除非他点击:’简直就是一个人‘。
那么如果要做这个小病毒怎么做呢?看下面
while循环
首先我们要知道,如果要做出让某句话不断重复的效果,肯定是需要循环的,让某段程序重复不断地去执行,这就需要用到我们今天学的新知识------while循环了。
在讲while循环之前,我们先给大家来一段程序:
while True:
print('迪迦奥特曼是我最好的朋友')
我们再来看看这段程序的运行效果:
(视频单独放)
那么短短两行代码,却让’迪迦奥特曼是我最好的朋友‘这句话不断的运行,如果我不用pycharm的强制关闭功能的话,那根本就无法关闭。
那接下来我们来看看这两行代码的意思:
while True:
print('迪迦奥特曼是我最好的朋友')
while循环后的判断语句
我们知道while在python当中是循环的意思,那么这个时候问题来了,True加在while后面是什么意思?我们之前在第三节课讲数据类型的时候讲过True属于布尔类型,这种数据类型就两个关键字,一个True 一个False。True 代表真,也就是我们大白话说的正确,对的意思。而False代表假,大白话说错误的意思。
这个时候就必须要再讲讲while的特性了,while的这个特性跟if和elif有点像,那就是在他们后面必须加判断语句。我们平常用if或者elif的话一定会在后面加上判断语句,比如说像我们上次做的那个肥胖测试仪。同样的,while后面也必须加判断语句,那么False跟True同样的也属于判断条件,while True实际上就相当于让print('迪迦奥特曼是我最好的朋友')这行代码做了一个无限运行,无限循环。如果运行后不强制关闭这个程序,他就会一直运行下去,直到你的电脑没电或者冒烟。
那么这样一来就很好理解while True:的意思了,加上True的话就相当于加上了一个判断条件,但True就相当于一个万能令牌一样,不论是谁都可以用True自由出入各个场所。如果符合这个判断条件,那就执行print('迪迦奥特曼是我最好的朋友'),如果不符合那就不执行。但很明显,True的意思相当于直接让你执行下面的print('迪迦奥特曼是我最好的朋友'),基本上相当于走了个过场,但是该加还得加,因为我们说while的特性就是必须在他的屁股后面加判断条件。
空格
说完判断语句接下来我们再讲讲空格,其实我刚才就说过,while循环跟if语句很像,像到什么地步呢?他只比if语句多了个循环的作用,剩下的基本差不多。就像我们接下来要说的空格,现在旁边有电脑的同学可以试试,把print('迪迦奥特曼是我最好的朋友')这行代码的空格取消掉,让他跟while True对齐,会发现什么都运行不了。因为我们说print('迪迦奥特曼是我最好的朋友')这行代码是需要循环的,既然需要让他循环,那就必须让他在while True语句下空四格,当然如果我们不需要他循环,那也就没必要让这句话空四格了。甚至没必要加while True.
停止循环
那有的同学说,唉?那让他无限循环怎么停啊,别做个程序自己把自己坑了,到时候把自己电脑弄得中病毒了。安啦,既然有’制毒之法‘,那也一定有’解毒之法‘。如何让无限循环停下来呢?两种方式!
第一种方式:在while语句后面加上判断条件
刚刚我们其实已经知道,True也是一种判断条件,只不过他就像一个永远都不会被拒绝的通行证一样,不论while下面的是什么操作,都会进行无条件执行,并且一直执行。
那么实际上除了True以外,我们还可以去加其他的判断条件,例如下面这段代码:
可以看到运行结果里'迪迦奥特曼是我最好的朋友'这句话只运行了一次,为什么?我们逐行来分析一下这段程序,首先第一行我们定义了一个a的整型变量,给他赋值为0。
那么再看第二行,第二行大家都知道就是让第二行以下带空格的代码都循环起来,但是大家仔细看第二行代码,这行代码说:我可以让你们带空格的代码去进行循环,但我有一个条件,那就是a必须小于1,你符合这个条件才能循环的说'迪迦奥特曼是我最好的朋友',否则如果不符合a<1这个条件的话就不让你循环了。
那么接下来程序就去进行判断了,首先他知道a目前是0,那么接下来他就让a去跟1作比较,让a跟1作比较说白了就是让0跟1作比较,换句话说,如果0<1才能让我们想循环的内容执行。很明显的,0确实是小于1的,这毫无争议。
因此我们的运行结果里出现了一句,'迪迦奥特曼是我最好的朋友',然而奇怪的是为什么只出现了一次这句话,难道0第二次再进行循环的时候就大于1了吗?非也非也,我们再看第四行代码。
第四行代码对第三行代码说,好的,你执行完了你的任务,已经说了一次'迪迦奥特曼是我最好的朋友'了,那么接下来该我上台表演了,我的任务就是给a加个1,我们之前说过a+=1展开就是a=a+1,相当于a给自己加了个1,那么原来的a=0,执行完第四行代码以后,a就不再是0,而是1了,因为第四行代码给a加了个1.
加完1以后的a觉得自己十分牛逼,打算再上循环那儿去跟1比比,看谁更大,可惜的是,这个时候程序再运行到第二行的时候,一判断,程序说,嗯?a变成1了?1跟1一比,两个一边儿大。得嘞,既然不符合a<1的规则,那我就不让你三四行代码运行了,因为你三四行都是带了空格的需要循环的,不合规矩我就让你不弄了,收拾收拾回家吧。然后程序接着再往下走,一看,嗯?没代码了,得嘞,任务干完了,回家睡觉。
第二种方式:break语句
先看代码:
while True:
a = input('我是全世界最帅的男人吗?')
if a=='是':
print('你是我最好的朋友')
break
else:
print('哦')
再看看运行效果:
(视频单独放)
其实相信大部分同学除了break这块儿其他基本上已经明白了,那这个break在英文当中是破碎的意思,但在我们的python里面他是专门用来终止循环的一个保留字。这也就意味着,无论while后面加了什么样的判断条件,哪怕是True这个无限循环,只要break一出来,那么当前的循环就被终止了。
这么一说,是不是上面的这个程序就好理解了,第一行代码先来个无限循环,第二行代码进行询问,如果用户输入的是‘是’,那就说你是我最好的朋友,并且说完后直接终止循环。否则就一直说哦然后继续循环到开头继续问直到用户回答是。
完整病毒程序
这个程序延续了我们上节课学习的easygui库,所以我们必须先导入这个库,然后把所有的input换成buttonbox(),print()换成msgbox()。这个程序我们就不讲了,代码放下面大家自己琢磨琢磨
from easygui import *
while True:
a = enterbox('我是全世界最帅的男人吗?')
if a=='是':
msgbox('你是我最好的朋友')
break
else:
msgbox('哦')
将程序打包成安装包
将程序打包这个命令实际上挺多的,但是我们就根据今天我们做的程序敲打包命令。如果有兴趣的同学可以百度一下其他打包命令。
pyinstaller库
首先我们要知道,pyinstaller这个库的作用是专门用来打包程序的,并且这是一个第三方库,需要我们自己去下载,不会下载第三方库的第六篇文章,里面有专门的下载链接命令和方法。
这个库有个特殊点,就是在文件中不用导入这个库名,只要下载好这个库,然后直接敲命令就可以了。具体怎么操作看下面:
1.先打开需要打包的文件然后在下面找Terminal键,找到后单击打开。
2.敲命令:pyinstaller -w -F 文件名.py,敲完后单击回车。
3.在你的文件所存在的文件夹里找一个叫dist的文件夹,这是打包命令自动生成的。
4.打开dist文件夹,找到你的文件名但后缀是exe的那个软件,就是我们刚才生成的软件。直接发给你的好基友就可以了。
好啦,这期就到这里啦,我们下期见,拜拜!