各位熱衷于刷抖音的同學(xué)一定在前幾個月刷到過一條風(fēng)靡全抖音的視頻:哦泡果奶病毒。
基于好奇撵颊,我特地跨過山和大海宇攻,也穿越人山人海,最終搞到了這個程序的安裝包倡勇。程序的功能其實也很簡單逞刷,就是將代碼打包成apk文件后,讓人將其當(dāng)成安裝包安裝在手機(jī)上妻熊,然后運行后夸浅,手機(jī)就會自動播放90后的童年回憶,哦泡果奶主題曲扔役。并且這個程序在安裝的時候會自動申請打開控制手機(jī)音量鍵帆喇,否則不通過這個權(quán)限程序根本無法運行。所以說如果你打開這個程序亿胸,手機(jī)的音量就不受你控制了番枚,除非關(guān)機(jī),不然你的手機(jī)配置再好损敷,也逃脫不了被哦泡果奶主題曲沖擊的命運葫笼。
那有的同學(xué)一下子腰板就坐直了,嗯拗馒?要搞事情了路星?圖片圖片,搞肯定是要搞滴,但是捏洋丐,不是哦泡果奶呈昔,是另外一個小程序,具體效果如何呢友绝?點擊下面視頻看效果:
(視頻單獨放)
可以看到上面的視頻里面這個程序完全是脫離python環(huán)境運行的堤尾,也就是說不論你的電腦有沒有安裝python或者是Pycharm他都可以運行。
實際上這個程序的功能也很簡單------讓運行這個程序的人說我像吳彥祖迁客,否則他只能關(guān)機(jī)郭宝,除非他點擊:’簡直就是一個人‘。
那么如果要做這個小病毒怎么做呢掷漱?看下面
while循環(huán)
首先我們要知道粘室,如果要做出讓某句話不斷重復(fù)的效果,肯定是需要循環(huán)的卜范,讓某段程序重復(fù)不斷地去執(zhí)行衔统,這就需要用到我們今天學(xué)的新知識------while循環(huán)了。
在講while循環(huán)之前海雪,我們先給大家來一段程序:
while True:
? print('迪迦奧特曼是我最好的朋友')
我們再來看看這段程序的運行效果:
(視頻單獨放)
那么短短兩行代碼锦爵,卻讓’迪迦奧特曼是我最好的朋友‘這句話不斷的運行,如果我不用pycharm的強(qiáng)制關(guān)閉功能的話奥裸,那根本就無法關(guān)閉险掀。
那接下來我們來看看這兩行代碼的意思:
while True:
? print('迪迦奧特曼是我最好的朋友')
while循環(huán)后的判斷語句
我們知道while在python當(dāng)中是循環(huán)的意思,那么這個時候問題來了刺彩,True加在while后面是什么意思迷郑?我們之前在第三節(jié)課講數(shù)據(jù)類型的時候講過True屬于布爾類型,這種數(shù)據(jù)類型就兩個關(guān)鍵字创倔,一個True 一個False嗡害。True 代表真,也就是我們大白話說的正確畦攘,對的意思霸妹。而False代表假,大白話說錯誤的意思知押。
這個時候就必須要再講講while的特性了叹螟,while的這個特性跟if和elif有點像,那就是在他們后面必須加判斷語句台盯。我們平常用if或者elif的話一定會在后面加上判斷語句罢绽,比如說像我們上次做的那個肥胖測試儀。同樣的静盅,while后面也必須加判斷語句良价,那么False跟True同樣的也屬于判斷條件,while True實際上就相當(dāng)于讓print('迪迦奧特曼是我最好的朋友')這行代碼做了一個無限運行,無限循環(huán)明垢。如果運行后不強(qiáng)制關(guān)閉這個程序蚣常,他就會一直運行下去,直到你的電腦沒電或者冒煙痊银。
那么這樣一來就很好理解while True:的意思了抵蚊,加上True的話就相當(dāng)于加上了一個判斷條件,但True就相當(dāng)于一個萬能令牌一樣溯革,不論是誰都可以用True自由出入各個場所贞绳。如果符合這個判斷條件,那就執(zhí)行print('迪迦奧特曼是我最好的朋友')鬓照,如果不符合那就不執(zhí)行熔酷。但很明顯孤紧,True的意思相當(dāng)于直接讓你執(zhí)行下面的print('迪迦奧特曼是我最好的朋友')豺裆,基本上相當(dāng)于走了個過場,但是該加還得加号显,因為我們說while的特性就是必須在他的屁股后面加判斷條件臭猜。
空格
說完判斷語句接下來我們再講講空格,其實我剛才就說過押蚤,while循環(huán)跟if語句很像蔑歌,像到什么地步呢?他只比if語句多了個循環(huán)的作用,剩下的基本差不多揽碘。就像我們接下來要說的空格次屠,現(xiàn)在旁邊有電腦的同學(xué)可以試試,把print('迪迦奧特曼是我最好的朋友')這行代碼的空格取消掉雳刺,讓他跟while True對齊劫灶,會發(fā)現(xiàn)什么都運行不了。因為我們說print('迪迦奧特曼是我最好的朋友')這行代碼是需要循環(huán)的掖桦,既然需要讓他循環(huán)本昏,那就必須讓他在while True語句下空四格,當(dāng)然如果我們不需要他循環(huán)枪汪,那也就沒必要讓這句話空四格了涌穆。甚至沒必要加while True.
停止循環(huán)
那有的同學(xué)說,唉雀久?那讓他無限循環(huán)怎么停啊宿稀,別做個程序自己把自己坑了,到時候把自己電腦弄得中病毒了赖捌。安啦祝沸,既然有’制毒之法‘,那也一定有’解毒之法‘。如何讓無限循環(huán)停下來呢奋隶?兩種方式擂送!
第一種方式:在while語句后面加上判斷條件
剛剛我們其實已經(jīng)知道,True也是一種判斷條件唯欣,只不過他就像一個永遠(yuǎn)都不會被拒絕的通行證一樣嘹吨,不論while下面的是什么操作,都會進(jìn)行無條件執(zhí)行境氢,并且一直執(zhí)行蟀拷。
那么實際上除了True以外,我們還可以去加其他的判斷條件萍聊,例如下面這段代碼:
可以看到運行結(jié)果里'迪迦奧特曼是我最好的朋友'這句話只運行了一次问芬,為什么?我們逐行來分析一下這段程序寿桨,首先第一行我們定義了一個a的整型變量此衅,給他賦值為0。
那么再看第二行亭螟,第二行大家都知道就是讓第二行以下帶空格的代碼都循環(huán)起來挡鞍,但是大家仔細(xì)看第二行代碼,這行代碼說:我可以讓你們帶空格的代碼去進(jìn)行循環(huán)预烙,但我有一個條件墨微,那就是a必須小于1,你符合這個條件才能循環(huán)的說'迪迦奧特曼是我最好的朋友'扁掸,否則如果不符合a<1這個條件的話就不讓你循環(huán)了翘县。
那么接下來程序就去進(jìn)行判斷了,首先他知道a目前是0谴分,那么接下來他就讓a去跟1作比較锈麸,讓a跟1作比較說白了就是讓0跟1作比較,換句話說狸剃,如果0<1才能讓我們想循環(huán)的內(nèi)容執(zhí)行掐隐。很明顯的,0確實是小于1的钞馁,這毫無爭議虑省。
因此我們的運行結(jié)果里出現(xiàn)了一句,'迪迦奧特曼是我最好的朋友'僧凰,然而奇怪的是為什么只出現(xiàn)了一次這句話探颈,難道0第二次再進(jìn)行循環(huán)的時候就大于1了嗎?非也非也训措,我們再看第四行代碼伪节。
第四行代碼對第三行代碼說光羞,好的,你執(zhí)行完了你的任務(wù)怀大,已經(jīng)說了一次'迪迦奧特曼是我最好的朋友'了纱兑,那么接下來該我上臺表演了,我的任務(wù)就是給a加個1化借,我們之前說過a+=1展開就是a=a+1,相當(dāng)于a給自己加了個1潜慎,那么原來的a=0,執(zhí)行完第四行代碼以后蓖康,a就不再是0铐炫,而是1了,因為第四行代碼給a加了個1.
加完1以后的a覺得自己十分牛逼蒜焊,打算再上循環(huán)那兒去跟1比比倒信,看誰更大,可惜的是泳梆,這個時候程序再運行到第二行的時候鳖悠,一判斷,程序說鸭丛,嗯竞穷?a變成1了唐责?1跟1一比鳞溉,兩個一邊兒大。得嘞鼠哥,既然不符合a<1的規(guī)則熟菲,那我就不讓你三四行代碼運行了,因為你三四行都是帶了空格的需要循環(huán)的朴恳,不合規(guī)矩我就讓你不弄了抄罕,收拾收拾回家吧。然后程序接著再往下走于颖,一看呆贿,嗯?沒代碼了森渐,得嘞做入,任務(wù)干完了,回家睡覺同衣。
第二種方式:break語句
先看代碼:
while True:
? ? a = input('我是全世界最帥的男人嗎竟块?')
? ? if a=='是':
? ? ? ? print('你是我最好的朋友')
? ? ? ? break
? ? else:
? ? ? ? print('哦')
再看看運行效果:
(視頻單獨放)
其實相信大部分同學(xué)除了break這塊兒其他基本上已經(jīng)明白了,那這個break在英文當(dāng)中是破碎的意思耐齐,但在我們的python里面他是專門用來終止循環(huán)的一個保留字浪秘。這也就意味著蒋情,無論while后面加了什么樣的判斷條件,哪怕是True這個無限循環(huán)耸携,只要break一出來棵癣,那么當(dāng)前的循環(huán)就被終止了。
這么一說夺衍,是不是上面的這個程序就好理解了浙巫,第一行代碼先來個無限循環(huán),第二行代碼進(jìn)行詢問刷后,如果用戶輸入的是‘是’的畴,那就說你是我最好的朋友,并且說完后直接終止循環(huán)尝胆。否則就一直說哦然后繼續(xù)循環(huán)到開頭繼續(xù)問直到用戶回答是丧裁。
完整病毒程序
這個程序延續(xù)了我們上節(jié)課學(xué)習(xí)的easygui庫,所以我們必須先導(dǎo)入這個庫含衔,然后把所有的input換成buttonbox()煎娇,print()換成msgbox()。這個程序我們就不講了贪染,代碼放下面大家自己琢磨琢磨
from easygui import? *
while True:
? ? a = enterbox('我是全世界最帥的男人嗎缓呛?')
? ? if a=='是':
? ? ? ? msgbox('你是我最好的朋友')
? ? ? ? break
? ? else:
? ? ? ? msgbox('哦')
將程序打包成安裝包
將程序打包這個命令實際上挺多的,但是我們就根據(jù)今天我們做的程序敲打包命令杭隙。如果有興趣的同學(xué)可以百度一下其他打包命令哟绊。
pyinstaller庫
首先我們要知道,pyinstaller這個庫的作用是專門用來打包程序的痰憎,并且這是一個第三方庫票髓,需要我們自己去下載,不會下載第三方庫的第六篇文章铣耘,里面有專門的下載鏈接命令和方法洽沟。
這個庫有個特殊點,就是在文件中不用導(dǎo)入這個庫名,只要下載好這個庫蜗细,然后直接敲命令就可以了裆操。具體怎么操作看下面:
1.先打開需要打包的文件然后在下面找Terminal鍵,找到后單擊打開炉媒。
2.敲命令:pyinstaller -w -F 文件名.py,敲完后單擊回車踪区。
3.在你的文件所存在的文件夾里找一個叫dist的文件夾,這是打包命令自動生成的橱野。
4.打開dist文件夾朽缴,找到你的文件名但后綴是exe的那個軟件,就是我們剛才生成的軟件水援。直接發(fā)給你的好基友就可以了密强。
好啦茅郎,這期就到這里啦,我們下期見或渤,拜拜系冗!