Python學習之路【第一篇】-Python簡介和基礎入門
1.Python簡介? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1.1 Python是什么
? ? ? 相信混跡IT界的很多朋友都知道,Python是近年來最火的一個熱點档礁,沒有之一吝沫。從性質(zhì)上來講它和我們熟知的C惨险、java、php等沒有什么本質(zhì)的區(qū)別栅受,也是一種開發(fā)語言恭朗,而且已經(jīng)進階到主流的二十多種開發(fā)語言的top 5(數(shù)據(jù)源自最新的TIOBE排行榜)痰腮。
? ? ? 來頭不小啊棍丐!二十多種主流的開發(fā)語言沧踏,我該從哪一個開始呢悦冀?人生苦短睛琳,let‘s python踏烙!
1.2 Python的由來和發(fā)展趨勢
? ? ? Python的前世源自鼻祖“龜叔”讨惩。1989年荐捻,吉多·范羅蘇姆(Guido van Rossum)在阿姆斯特丹為了打發(fā)無聊的圣誕節(jié)寡夹,決心開發(fā)一個新的腳本解釋程序,自此Python和創(chuàng)始人“龜叔”開始進入公眾視野魂角。他希望這個新的叫做Python的語言智绸,能符合他的理想:創(chuàng)造一種C和shell之間瞧栗,功能全面迹恐,易學易用,可拓展的語言通熄。
? ? ? 1991年找都,第一個Python編譯器誕生能耻。它基于C語言實現(xiàn)晓猛,并能夠調(diào)用C語言的庫文件。后面歷經(jīng)版本的不斷換代革新栗恩,Python走到了非常具有里程碑意義的一個節(jié)點洪燥,即2004的2.4版本誕生了目前最流行的WEB框架Django!六年后Python發(fā)展到2.7版本汉操,這是目前為止2.x版本中最新且較為廣泛使用版本磷瘤。
? ? ? 2.7版本的誕生不同于以往2.x版本的垂直換代邏輯搜变,它是2.x版本和3.x版本之間過渡的一個橋梁挠他,以便最大程度上繼承3.x版本的新特性,同時盡量保持對2.x的兼容性摔蓝。
? ? ? 因此3.x版本在2.7版本之前就已經(jīng)問世贮尉,從2008年的3.0版本開始朴沿,python3.x系呈迅猛發(fā)展之勢纲岭,版本更新活躍坚芜,一直發(fā)展到現(xiàn)在最新的3.5.2版本。3.5版本也是目前3.x系列中主流且廣泛使用的版本沧竟,后續(xù)相關程序的demo缚忧,默認均基于3.5版本展開闪水。
1.3 Python 2 VS Python 3
? ? ? 許多初學者會糾結(jié)于從2.x版本還是3.x版本開始python學習之路。這里簡要對比下個人學習了解到的兩者的差異:
? ? ? ? ? ? ? 3.x版本中 PRINT IS A FUNCTION禁筏,使用起來更簡單方便鞠呈;
? ? ? ? ? ? ? 3.x版本中默認使用unicode編碼蚁吝,媽媽再也不用擔心你的程序編碼問題了舀射;
? ? ? ? ? ? ? 3.x版本中某些庫進行了改名脆烟,具體還有待在后續(xù)學習中深入展開邢羔;
? ? ? ? ? ? ? 目前3.x版本還不能完全支持Twisted module,這恐怕是3.x版本中最大的遺憾框冀。也不要過于糾結(jié)這點明也,據(jù)說官方正在彌補這個不足惯裕,同時也相信能有辦法解決的:)
? ? ? In summary : Python 2.x is legacy, Python 3.x is the present and future of the language. 長江后浪推前浪蜻势,python的未來是屬于3.x系列的握玛,官方宣布2020年之后不再支持2.x系列中最nb的2.7版本败许,2.x版本將逐漸壽終正寢,最終被銘刻在開發(fā)語言的豐碑上愕撰。
? ? ? 所以學習3.x版本沒錯的搞挣!? ? ? ?
1.4 Python的優(yōu)缺點
? ? ? 二十多種主流開發(fā)語言,python何以能在20多年間以如此迅猛之勢橫掃七大洲八大洋呢仓犬?這都是它自身優(yōu)良的特性決定的.
? ? ? Python優(yōu)點:
1.“優(yōu)雅”搀继、“明確”翠语、“簡單”
? ? ? 這是python的定位肌括,使得python程序看上去簡單易懂谍夭,初學者容易入門,學習成本更低紧索。但隨著學習的不但深入齐板,python一樣可以滿足勝任復雜場景的開發(fā)需求甘磨。引用一個說法,Python的哲學是就是簡單優(yōu)雅卿泽,盡量寫容易看明白的代碼签夭,盡量寫少的代碼第租。
2.? 開發(fā)效率高
? ? python作為一種高級語言我纪,具有豐富的第三方庫,官方庫中也有相應的功能模塊支持券犁,覆蓋了網(wǎng)絡粘衬、文件咳促、GUI等缀、數(shù)據(jù)庫尺迂、文本等大量內(nèi)容冒掌。因此開發(fā)者無需事必躬親股毫,遇到主流的功能需求時可以直接調(diào)用铃诬,在基礎庫的基礎上施展拳腳趣席,可以節(jié)省你很多功力和時間成本,大大降低開發(fā)周期想罕。
3.? 無需關注底層細節(jié)
? ? Python作為一種高級開發(fā)語言按价,在編程時無需關注底層細節(jié)(如內(nèi)存管理等)楼镐。
4.? 功能強大
? ? Python是一種前端后端通吃的綜合性語言鸠蚪,功能強大,php能勝任的角色它都能做盾舌,至于后端如何勝任妖谴,需要在后續(xù)學習中逐步領悟膝舅。
5.? 可移植性
? ? Python可以在多種主流的平臺上運行窑多,開發(fā)程序時只要繞開對系統(tǒng)平臺的依賴性埂息,則可以在無需修改的前提下運行在多種系統(tǒng)平臺上千康,具體有待后續(xù)學習中深入展開拾弃。其他優(yōu)點有待繼續(xù)發(fā)掘。
? ? 一個硬幣總有兩面奔坟,那么Python有缺點嗎咳秉?答案是肯定的滴某,總結(jié)如下:
? ? ? Python缺點:
1. 代碼運行速度慢
? ? 因為Python是一種高級開發(fā)語言霎奢,不像c語言一樣可以深入底層硬件最大程度上挖掘榨取硬件的性能饼灿,因此它的運行速度要遠遠慢于c語言碍彭。另外一個原因是,Python是解釋型語言舰褪,你的代碼在執(zhí)行時會一行一行地翻譯成CPU能理解的機器碼占拍,這個翻譯過程非常耗時晃酒,所以很慢窄绒。而C程序是運行前直接編譯成CPU能執(zhí)行的機器碼彰导,所以非陈荽粒快倔幼。
? ? 但需要注意的是损同,這種慢對于不需要追求硬件高性能的應用場合來講根本不是問題鸟款,因為它們比較的數(shù)量級根本不是用戶能直觀感受到的何什!想想程序執(zhí)行所需的時間數(shù)量級处渣?例如開發(fā)一個下載MP3的網(wǎng)絡應用程序罐栈,C程序的運行時間需要0.001秒荠诬,而Python程序的運行時間需要0.1秒位仁,慢了100倍聂抢,但由于網(wǎng)絡更慢涛浙,需要等待1秒轿亮,用戶體驗幾乎沒有差別我注,除非你用非常精確的計時器來計時但骨。
2.? 發(fā)布程序時必須公開源代碼
? ? 什么智袭?有沒有搞錯吼野?是的瞳步,發(fā)布程序時我們必須公開源代碼单起!還是因為Python是一種解釋性語言嘀倒,沒有編譯打包的過程(據(jù)說最新的python可以打包测蘑,但本質(zhì)上還是把源代碼和解釋器打在一起帮寻,沒有太大實際意義)固逗。想想我們的shell腳本是不是也是這個情況,你能在不發(fā)布源代碼的情況下發(fā)布一個黑盒子程序來讓別人正常使用么洽故?
? ? 這個缺點僅限于你想單純靠賣開發(fā)出來的軟件產(chǎn)品掙錢的時候时甚。但在這個開發(fā)互聯(lián)的時代荒适,不靠賣產(chǎn)品本身來賺錢的商業(yè)模式越來越主流了刀诬,所以問題也不是沒法解決陕壹。
? ? 總結(jié)起來树埠,Python的優(yōu)點多于缺點怎憋,而且缺點在多數(shù)它能勝任的情況下不是根本性問題盛霎,瑕不掩瑜愤炸,盡情享受它給我們帶來的樂趣和便利吧规个!? ? ? ? ? ? ? ?
1.5 Python的適用領域
? ? Python典型的適用領域如下:
1. 云計算開發(fā)
? ? 云計算領域最火的語言,典型代表openstack速兔。
2. web開發(fā)
? ? 眾多優(yōu)秀的web框架涣狗,眾多優(yōu)秀的大型web站點(Youtube,instagrm,豆瓣等)均基于python開發(fā)。
3. 系統(tǒng)運維
? ? 各種自動化工具的開發(fā)镀迂,CMDB探遵、監(jiān)控告警系統(tǒng)箱季、堡壘機、配置管理&批量分發(fā)工具等均可以搞定塌衰。這是自己需要重點學習的領域。
4. 科學計算最疆、人工智能
? ? 據(jù)網(wǎng)上了解用于圍棋大戰(zhàn)的谷歌阿發(fā)狗就使用了python開發(fā)(但估計只是部分而已)杯巨。
5. 圖形GUI處理
? ? 暫時沒多少體會,后續(xù)領悟吧努酸。
6. 網(wǎng)絡爬蟲
? ? 不知道給網(wǎng)絡爬蟲單獨歸類是否合適服爷,姑且這樣吧。這年頭網(wǎng)絡爬蟲無處不在获诈,很多都是基于python開發(fā)仍源,包括谷歌的爬蟲舔涎。估計這是爬蟲工程師的必備工具吧笼踩。
1.6 哪些地方在用Python
? ? ? 來幾個鮮活的知名公司應用案例,以示敬意:
? ? ? 谷歌:Google app engine亡嫌、google earth嚎于、爬蟲、廣告等
? ? ? Youtube: 世界最大的在線視頻網(wǎng)站基于python開發(fā)挟冠,好強大
? ? ? Instagram:美國最大的圖片分享網(wǎng)站于购,全部基于python開發(fā)
? ? ? facebook:大量的基礎庫基于python開發(fā)
? ? ? Redhat:yum包管理工具基于python開發(fā)
? ? ? 國內(nèi)知名互聯(lián)網(wǎng)公司的應用:豆瓣、知乎的網(wǎng)站知染,還有很多主流的互聯(lián)網(wǎng)公司(阿里肋僧、騰訊、百度、金山嫌吠、搜狐伪窖、盛大、網(wǎng)易居兆、新浪覆山、網(wǎng)易、果殼泥栖、土豆等)通過python來完成各種任務簇宽。?
2.Python基礎? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2.1 編程開發(fā)規(guī)范
? ? 作為一門開發(fā)語言,python自然也有自己的編程規(guī)范吧享,以下是特有且必須遵循的規(guī)范:
1. 代碼開頭
? ? python中代碼必須頂格編寫,除非被作為語句嵌套在條件判斷或條件循環(huán)中魏割。
2. 代碼層級
? ? 代碼與代碼之間的邏輯層級關系(涉及邏輯判斷、包含關系等情況)通過空格來界定钢颂,第一層頂格編寫钞它,第二層(被包含或者邏輯判斷后的執(zhí)行動作)開頭預留4個空格(如果不考慮跨平臺可以使用tab)
3. 對齊方式
? ? 同一個層級的代碼必須嚴格對齊,如第一層都是頂格殊鞭,第二層都是4個空格開頭遭垛,第三層則是8個空格,以此類推操灿。
4. 注釋
? ? 單行注釋用#開頭锯仪,單獨一行作為注釋或者在代碼后面通過#跟上注釋均可,多行注釋在首尾處用成對的三引號引用即可趾盐,可以是成對的三個單引號或者三個雙引號庶喜。
5. 代碼塊
? ? 目前來看if邏輯判斷和for循環(huán)條件后面均以冒號結(jié)尾,然后通過4個空格開始下一層級的實際執(zhí)行動作語句編寫救鲤。這部分在冒號后面接上的語句稱為代碼塊久窟。
6. 程序命名
? ? 編寫的python程序必須以.py結(jié)尾。
7. 項目規(guī)范
? ? 啟動一個項目開發(fā)時先在開發(fā)工具中創(chuàng)建project本缠,然后根據(jù)需要創(chuàng)建目錄斥扛,最后在目錄下創(chuàng)建當前活動的py程序。
2.2 變量
? python中的變量也用于存儲臨時值以便后續(xù)靈活調(diào)用搓茬,在定義時只能使用字母犹赖、數(shù)字、下劃線的任意組合卷仑,且不能以數(shù)字開頭,不能以python內(nèi)置的關鍵字來命名變量(如and麸折,import锡凝,global,finally等垢啼,有待后續(xù)學習加深印象)窜锯。對變量進行字符串類型的賦值時张肾,字符串需要用成對的引號引起來,可以是單引號锚扎、雙引號或者三引號吞瞪。
? ? 建議通過以下兩種形式來定義較為復雜的變量,便于閱讀:
1. 駝峰體
? ? 即每個單詞的首字母大寫驾孔,其他小寫芍秆,如MappingTable
2. 下劃線
? ? 不同單詞之間通過下劃線分開,如mappting_table
2.3 字符編碼
? 字符編碼經(jīng)歷了ASCII碼->unicode->UTF-8的演變過程翠勉,python 2.x默認使用ASCII編碼妖啥,而3.x默認使用UTF-8編碼。由于字符編碼事關重大对碌,一言不合就會導致亂碼荆虱,因此強烈建議統(tǒng)一使用萬用的utf-8編碼。怎么使用呢朽们?
? ? 1. 程序開頭明確顯式定義
1
2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
? ? ? ? windows下編程可忽略第一行怀读,但為了保留移植性建議始終聲明變量。
? ? 2. 在程序解釋器中選擇utf-8字符編碼
? ? 以上兩個條件缺一不可骑脱,雖然python 3.x版本默認使用utf-8編碼愿吹,但還是建議在程序中聲明編碼格式。
? ? 以上是結(jié)果惜姐,下面談談為什么強烈建議使用urf-8編碼犁跪,以及為什么utf-8編碼就可以通吃。
? ? 眾所周知計算機是美國人發(fā)明的歹袁,因此最早就只有包括所有字母的大小寫坷衍、數(shù)字、必要的特殊符號等合計才127個字符被編碼到計算機里条舔,這個編碼就是ASCII編碼。由于需要進行編碼的字符才有127個孟抗,因此用7個二進制位就足以搞定了迁杨,但8個二進制位才能構(gòu)成一個完整的字節(jié),因此索性用8個二進制位來進行編碼凄硼,剩余的一位只好浪費掉铅协。所以ASCCI碼只占用一個字符。
? ? 隨著計算機技術(shù)的推廣和普及摊沉,其他不以英語為官方語言的國家也開始使用計算機了狐史。那么現(xiàn)在問題來了,一個字節(jié)的8個bit位只能表示非常有限的字符(設計時只包括所有字母的大小寫、數(shù)字骏全、必要的特殊符號苍柏,其中整數(shù)還不能超過255),既有的ASCII編碼表里沒有包含其他國家的語言字符姜贡,但顯然也沒法強迫全球都使用英語试吁,于是各個國家開始進行本土化改良,設計能滿足自己國家需要的編碼楼咳,如國內(nèi)的GB2312熄捍。這里的改良涉及兩個要點,一是原有的一個字節(jié)的編碼空間要擴充為兩個字節(jié)甚至更多爬橡,二是新的編碼還不能與既有的ASCII編碼沖突治唤,否則老美要跟你捉急了!你可以想象糙申,中國搞定了一套宾添,日本也搞定了一套,接著是韓國柜裸、越南等巴拉巴拉缕陕,大家都有自己的編碼標準,各自為政疙挺,遇到多語言混合使用的場景這編碼表還不炸開鍋扛邑,連同計算機一起傻掉!這時Unicode應運而生铐然。Unicode把所有語言都統(tǒng)一到一套編碼里蔬崩,用兩個甚至更多的字節(jié)來進行編碼(通常用兩個字節(jié),搞不定時再喊人加砝碼呀)搀暑,這樣就不會再有亂碼問題了沥阳。
? ? Unicode搞定了多國語言亂碼和編碼統(tǒng)一的問題,但你會發(fā)現(xiàn)如果需要處理的內(nèi)容全部是英文的話自点,用Unicode編碼比ASCII編碼需要多一倍的存儲空間桐罕,在存儲和傳輸上就不太經(jīng)濟劃算。OK桂敛,Unicode的演進改良版utf-8就是來解決這個問題的功炮。utf-8的優(yōu)勢在于它使用“可變長編碼”,在繼續(xù)沿用ASCII編碼基礎上來對1個字節(jié)不能搞定的那些語言字符進行編碼設計术唬,這樣英文還是用1個字節(jié)薪伏,遇到中文就用3個或者更多的字節(jié)來處理。這樣既可以保障空間和性能的最大化碴开,還能兼顧老美的老巢和其他非英文的編碼兼容問題毅该,一舉三得博秫!所以你會發(fā)現(xiàn)ASCII其實是utf-8的子集潦牛,utf-8向下兼容眶掌。
2.4 Python解釋器
? python是一門解釋性語言,自然不能缺了解釋器(類似于JVM)巴碗。官方支持Cpython朴爬、Jpython、Ironpython和pypy等橡淆,默認使用基于C語言實現(xiàn)的Cpython召噩。它也是最為廣泛使用的解釋器。程序運行時會把.py文件轉(zhuǎn)換成.pyc字節(jié)碼文件逸爵,然后運行在python虛擬機上具滴。
2.5 構(gòu)建Python的開發(fā)環(huán)境
? 構(gòu)建好包括解釋器(虛擬機)和開發(fā)工具IDE在內(nèi)的Python的開發(fā)環(huán)境才便于展開程序開發(fā)之旅。
? ? 其中解釋器(虛擬機)從python官方下載安裝即可师倔,需要注意的是建議安裝3.5版本构韵,windows下安裝后需要把python的bin目錄和scripts目錄追加到系統(tǒng)環(huán)境變量path和用戶變量path中。我的win 7用戶不是以administor趋艘,補充追加了用戶變量后才能在cmd下傻瓜式地輸入python疲恢。linux下系統(tǒng)默認是2.x的版本,安裝3.5版本時需要先將舊版本重命名為其他目錄(如python2.6)后再安裝瓷胧,安裝完畢無需額外設置環(huán)境變量显拳。
? ? 好的程序猿都得有自己好使的IDE,python程序建議使用pycharm工具來進行開發(fā)搓萧。從官網(wǎng)下載安裝社區(qū)版即可杂数,需要注意的是選擇后本地的解釋器和項目的默認字符編碼。其他一些好玩的特性瘸洛、快捷鍵等只有后續(xù)逐步體會了揍移。
2.6 模塊初識
? python內(nèi)置了很多模塊,同時也可以自定義編寫一些好玩的模塊货矮,使用模塊時需要通過關鍵字import導入羊精。導入后python會從系統(tǒng)變量的路徑中從前往后一次查找,首次成功查找匹配后不再進行后續(xù)查找囚玫。因此如果需要使用自定義模塊喧锦,需要特別關注自定義模塊的存放位置,底線是只存放在系統(tǒng)變量的一個路徑下抓督,否則可能得到意外的結(jié)果燃少。
? ? 系統(tǒng)變量的路徑可通過以下方式查看:
? ?
? 以上是windows下3.5版本的輸出結(jié)果,linux平臺或者其他版本的輸出有所差別铃在,以實際為準阵具。
2.7 用戶輸入和格式化輸出
? ? 用戶輸入通過input來實現(xiàn)碍遍,示例如下:
? ? YourName=input("Please input you name here: ")
? ? 簡單的輸出通過print來實現(xiàn),示例如下:
? ? print("Hi,", YourName)? #調(diào)用輸出上面用戶輸入的變量YourName
? ? 注意:
? ? 1.? 3.x版本中input默認接收用戶輸入的類型為字符串阳液,如果需要使用其他的數(shù)據(jù)類型則需要進行轉(zhuǎn)換怕敬,如 UserAge=int(input("Please input your name:"))
? ? 2.? print輸出中可以接上轉(zhuǎn)義符號\來實現(xiàn)更多的輸出顯示效果,如 \n表示換行帘皿,\t為制表符东跪。
? ? print的使用進階——字符串的格式化輸出:
? ? python中,對字符串進行格式化輸出與c語言是相同的鹰溜,即借助%來實現(xiàn)虽填。%s表示與字符串替換,%d表示用整數(shù)替換曹动,%f表示用浮點數(shù)替換斋日,如果輸出的字符串中本身就需要%(比如輸出比率),則需要用連續(xù)的兩個%%來輸出%墓陈。
? ? 示例程序如下:
1
2
3
4
5
#!/usr/bin/env python
#-*- coding:utf-8 -*-
print ("Your name is %s" %"Bob")
print ("Your age is %d" %21)
print ("Your name is %s,age is %d" %("Bob",21))
? ? 從以上示例程序可看出恶守,利用print進行格式化輸出的基本格式是在需要替換輸出的位置用%s,%d等占位符,然后在后面通過%來接上實際替換后需要輸出的內(nèi)容跛蛋,如果需要替換輸出的元素不止一個熬的,則需要在%后面通過一對圓括號把實際替換后需要輸出的內(nèi)容包含進來,同時在每個元素之間用逗號隔開赊级。
2.8 Python的運行邏輯
? ? Python的運行工作邏輯如下:
? ? 內(nèi)存加載代碼->語法分析->解釋器加載->生成字節(jié)碼->執(zhí)行字節(jié)碼->生成機器碼->CPU執(zhí)行
3.開始你的Python開發(fā)之旅? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
3.1 第一個Python程序--HelloWorld
? python的第一個程序也從hello world開始把:
1
2
3
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
print("Hello world!")
執(zhí)行結(jié)果:
"C:\Program Files\Python35\python.exe" D:/python/Day1/test/HelloWorld.py
Hello world!
Process finished with exit code 0
3.2 If-else判斷
3.2.1 If-else語法規(guī)范
? ? 以下是if-else判斷的語法結(jié)構(gòu)規(guī)范
1
2
3
4
5
6
7
8
if condition1:
? ? command_layer1_1
? ? if condition2:
? ? ? ? command_layer2_2
? ? else:
? ? ? ? command_layer2_2
else:
? ? command_layer1_2
3.2.2 示例程序
? ? ? 以下為一個演示兩層if-else循環(huán)的程序:
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #頂格編寫
#! -*- coding:utf-8 -*-
user_input = input("Please input you username:")
if user_input == "Bob":? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #注意這里的冒號結(jié)尾
? ? passwd_input = input("Please input your password:")? ? ? #注意從這里開始押框,第一個if條件為真時需要執(zhí)行的動作語句均需要左縮進4個空格
? ? if passwd_input == "password":? ? ? ? ? ? ? ? ? ? ? ? ? ? #第一個if下的第二個if,仍然要左縮進4個空格理逊,同時冒號結(jié)尾
? ? ? ? print("Welcome login,%s!" %user_input)? ? ? ? ? ? ? ? #第二層if條件為真時執(zhí)行的動作語句橡伞,需要在第一層語句基礎上再縮進4個空格,因此需要縮進8個空格
? ? else:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #第二層if-else中的else晋被,因此需要與第二層if對齊兑徘,縮進4個空格
? ? ? ? print("Invalid username or password, please check your input") #第二層if-else條件為假時執(zhí)行的動作語句,同樣需要與第二層if一樣縮進8個空格
else:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #第一層if-else中的else關鍵字羡洛,頂格冒號結(jié)尾
? ? print("Invalid username or password, please check your input") #第一層if-else判斷條件為假時執(zhí)行的動作挂脑,與第一層if一樣需要縮進4個空格
? 說明:該示例程序僅為演示多層if-else的語法結(jié)構(gòu),程序本身的設計存在漏洞欲侮;空格縮進在pycharm IDE環(huán)境中會被自動處理崭闲,但在普通文件編輯器中需要手動設置。
? 以下為改良版示例程序威蕉,通過引入對if的多條件判斷來避免上述程序的漏洞:
1 #!/usr/bin/env python
2 #! -*- coding:utf-8 -*-
3 username=input("Please input you username:\n")
4 passwd=input("Please input you password:\n")
5 if username == "Bob" and passwd == "password":
6? ? print("Welcome login, %s!" %username)
7 else:
8? ? print("Invalid username or password, please check your input!")
? 此時只有用戶名和密碼同時輸入正確了才會給出相應提示刁俭,否則均提示口令無效,避免暴力破解韧涨。
3.2.3 if-elif-else擴展
? ? 上述判斷均為單一式的if-else判斷牍戚,以下為if-elif-else的判斷擴展:
語法結(jié)構(gòu):
1
2
3
4
5
6
7
8
if condition1:
? ? command1
elif condition2:
? ? command2
elif condition3:
? ? command3
else condition4:
? ? command4
? ? 不過這種結(jié)構(gòu)僅僅適用于單一條件存在多種case情況下侮繁,語法結(jié)構(gòu)看起來還是比較簡單,當然頂格如孝、左縮進4個空格和冒號這些規(guī)范一樣要遵循宪哩。
? ? 還是來一個示例程序加深理解:
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
age=int(input("Please input your age\n"))
if age >= 18:
? ? print("Oh, you're an adult\n")
elif age >=6:
? ? print("Ha, you're a teenager\n")
else:
? ? print("Come on, little kid!\n")
3.3 For循環(huán)
3.3.1 for循環(huán)語法規(guī)范
? ? ? For循環(huán)的基本語法規(guī)范是:
1
2
for variable in XXX:
? ? loop command
其中variable表示命名的變量,一般程序中使用i暑竟,j等等斋射,XXX表示變化的范圍育勺,可以是list列表但荤,一般會考慮使用range函數(shù),來表示一個整數(shù)序列涧至,如range(5)就表示小于5的整數(shù)序列腹躁,即0-4。 語法規(guī)范中同樣需要for語句后面的結(jié)尾冒號南蓬,以及循環(huán)體中的4個空格的左縮進纺非。
3.3.2 示例程序
? ? ? 猜數(shù)字游戲,通過系統(tǒng)生成一個隨機數(shù)作為預設年齡赘方,對用戶提供3次猜的機會烧颖,前兩次如果沒有猜中給出數(shù)字范圍大小的提示,如果第3次還沒有猜中則給予鼓勵提示窄陡,同時打印出這個預設的數(shù)字炕淮,當然三次當中有任何一次猜中會給用戶猜中提示的:
1 #!/usr/bin/env python
2 #! -*- coding:utf-8 -*-
3 import random #導入隨機數(shù)模塊
4 Age=random.randrange(10)#隨機生成一個小于10的整數(shù)(0-9,不包括負數(shù))跳夭,并賦值給Age
6 for i in range(3):
7? ? if i < 2:
8? ? ? ? guess_number=int(input("Please input the age of my dog you guess:\n"))
9? ? ? ? if guess_number > Age:
10? ? ? ? ? ? print("The age you guess is a little big, think smaller!\n")
11? ? ? ? elif guess_number < Age:
12? ? ? ? ? ? print("The age you guess is a little small, think bigger!\n")
13? ? ? ? else:
14? ? ? ? ? ? print("Bingo, you got the number,congratulations!\n")
15? ? ? ? ? ? break
16? ? else:
17? ? ? ? guess_number=int(input("Please input the age of my dog you guess:\n"))
18? ? ? ? if guess_number == Age:
19? ? ? ? ? ? print("Bingo, you got the number,congratulations!\n")
20? ? ? ? else:
21? ? ? ? ? ? print("Oh,you just got bad luck, come to try again, you can do it! The actual age of my dog is %d...\n"% Age)
注意:
1.為便于程序調(diào)試可先對Age賦值固定的數(shù)字
2.前兩次如果猜中了就需要退出循環(huán)涂圆,這里使用了break關鍵字,意思是跳出整個循環(huán)币叹,與之相對應的還有continue關鍵字润歉,用于跳出當次循環(huán),二者的使用區(qū)別還有待進一步深入學習
? OK颈抚,現(xiàn)在來改進下程序踩衩, 當用戶連續(xù)三次猜錯后繼續(xù)給機會,讓用戶選擇是繼續(xù)猜還是直接退出贩汉,如果繼續(xù)則再一次獲得三次猜的機會驱富,如此循環(huán)下去。還是用for循環(huán)吧:
1 #!/usr/bin/env python
2 #! -*- coding:utf-8 -*-
3 Age=22
4 counter=0
5 for i in range(10):
6? ? if counter < 3:
7? ? ? ? guess_number=int(input("Plese input your guess number:\n"))
8? ? ? ? if guess_number == Age:
9? ? ? ? ? ? print("You got the number, congratulations!")
10? ? ? ? ? ? break
11? ? ? ? elif guess_number > Age:
12? ? ? ? ? ? print("The number you guessed is too big, guess a smaller one\n")
13? ? ? ? else:
14? ? ? ? ? ? print("The number you guessed is too small, guess a bigger one\n")
15? ? ? ? counter += 1
16? ? elif counter == 3:
17? ? ? ? continue_flag=input("Do you want to continue? Please type Y to continue or N to quit:\n ")
18? ? ? ? if continue_flag == "Y":
19? ? ? ? ? ? counter = 0
20? ? ? ? else:
21? ? ? ? ? ? print("Bye")
22? ? ? ? ? ? break
23? ? else:
24? ? ? ? print("You've tried too many times.")
? ? 這里為了保證每一個輪回中的第四次(上述程序中的第四次和第八次)能讓程序繼續(xù)循環(huán)雾鬼,引入了另外一個變量來進行計數(shù)并重置萌朱。把for循環(huán)換作while循環(huán)看起來差不多:
1 #!/usr/bin/env python
2 #! -*- coding:utf-8 -*-
3 Age=22
4 i=0
5 counter=0
6 while counter < 10:
7? ? if i < 3:
8? ? ? ? guess_number=int(input("Plese input your guess number:\n"))
9? ? ? ? if guess_number == Age:
10? ? ? ? ? ? print("You got the number, congratulations!")
11? ? ? ? ? ? break
12? ? ? ? elif guess_number > Age:
13? ? ? ? ? ? print("The number you guessed is too big, guess a smaller one\n")
14? ? ? ? else:
15? ? ? ? ? ? print("The number you guessed is too small, guess a bigger one\n")
16? ? ? ? i += 1
17? ? else:
18? ? ? ? continue_flag=input("Do you want to continue? Please type Y to continue or N to quit:\n ")
19? ? ? ? if continue_flag == "Y":
20? ? ? ? ? ? i = 0
21? ? ? ? else:
22? ? ? ? ? ? print("Bye")
23? ? ? ? ? ? break
24? ? counter +=1
小結(jié)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1. Python是一門主流且發(fā)展迅猛的開發(fā)語言,目前存在2.x和3.x兩個版本分支策菜,前端后端都能勝任晶疼,功能強大酒贬,在互利網(wǎng)公司應用廣泛,值得托付翠霍;
2. Python程序的開發(fā)需要安裝解釋器和IDE锭吨,建議使用pycharm,2.x和3.x下的默認字符編碼不同寒匙,永遠推薦使用utf-8編碼零如,包括程序編碼和解釋的編碼兩個層面;
3. 系統(tǒng)自帶模塊和自定義編寫的模塊均可以通過import導入使用锄弱;
4. 在進行python程序開發(fā)時考蕾,注意代碼需要分層體現(xiàn),第一層代碼頂格編寫会宪,第二層(用在第一次出現(xiàn)的流程控制語句中的代碼塊)左縮進4個空格肖卧;
5. input用于接收用戶輸入,默認輸入的數(shù)據(jù)類型是字符串掸鹅,可通過int關鍵字轉(zhuǎn)換為整數(shù)塞帐。print可進行簡單輸出,如要格式化輸出則需要借助%s? %d %f等來實現(xiàn)巍沙,具體視數(shù)據(jù)類型而定葵姥;
6. 流程控制語句if-else判斷和for、while循環(huán)都需要注意代碼書寫格式句携,流程控制語句關鍵字一定是以冒號結(jié)尾榔幸,具體的流程控制代碼塊則需要左縮進處理,第一層左縮進4個空格务甥,第二層8個空格牡辽,以此類推;
7.continue和break可分別用于退出當前(當次)流程控制和整個循環(huán)敞临,課堂上演示了在for循環(huán)中的使用态辛,在if-else判斷中不能使用。