.Python簡介
1.1 Python是什么
相信混跡IT界的很多朋友都知道,Python是近年來最火的一個熱點,沒有之一盐捷。從性質上來講它和我們熟知的C、java默勾、php等沒有什么本質的區(qū)別碉渡,也是一種開發(fā)語言,而且已經進階到主流的二十多種開發(fā)語言的top 5(數據源自最新的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語言實現哄酝,并能夠調用C語言的庫文件友存。后面歷經版本的不斷換代革新,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版本之前就已經問世,從2008年的3.0版本開始门烂,python3.x系呈迅猛發(fā)展之勢乳愉,版本更新活躍,一直發(fā)展到現在最新的3.5.2版本屯远。3.5版本也是目前3.x系列中主流且廣泛使用的版本蔓姚,后續(xù)相關程序的demo,默認均基于3.5版本展開慨丐。
如果你不想錯過Python這么好的工具坡脐,又擔心自學遇到問題無處解決,現在就可以Python的學習q u n 227-435-450可以來了解一起進步一起學習房揭!免費分享視頻資料
1.3 Python 2 VS Python 3
? ? ? 許多初學者會糾結于從2.x版本還是3.x版本開始python學習之路备闲。這里簡要對比下個人學習了解到的兩者的差異:
3.x版本中PRINT IS A FUNCTION,使用起來更簡單方便崩溪;
? ? ? ? ? ? ? 3.x版本中默認使用unicode編碼浅役,媽媽再也不用擔心你的程序編碼問題了;
? ? ? ? ? ? ? 3.x版本中某些庫進行了改名伶唯,具體還有待在后續(xù)學習中深入展開觉既;
? ? ? ? ? ? ? 目前3.x版本還不能完全支持Twisted module,這恐怕是3.x版本中最大的遺憾。也不要過于糾結這點瞪讼,據說官方正在彌補這個不足钧椰,同時也相信能有辦法解決的:)
?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作為一種高級語言您宪,具有豐富的第三方庫奈懒,官方庫中也有相應的功能模塊支持奠涌,覆蓋了網絡、文件磷杏、GUI溜畅、數據庫、文本等大量內容极祸。因此開發(fā)者無需事必躬親慈格,遇到主流的功能需求時可以直接調用,在基礎庫的基礎上施展拳腳遥金,可以節(jié)省你很多功力和時間成本浴捆,大大降低開發(fā)周期。
3. ?無需關注底層細節(jié)
? ? ?Python作為一種高級開發(fā)語言稿械,在編程時無需關注底層細節(jié)(如內存管理等)选泻。
4. ?功能強大
? ? ?Python是一種前端后端通吃的綜合性語言,功能強大,php能勝任的角色它都能做页眯,至于后端如何勝任梯捕,需要在后續(xù)學習中逐步領悟。
5. ?可移植性
? ? ?Python可以在多種主流的平臺上運行窝撵,開發(fā)程序時只要繞開對系統(tǒng)平臺的依賴性傀顾,則可以在無需修改的前提下運行在多種系統(tǒng)平臺上,具體有待后續(xù)學習中深入展開碌奉。其他優(yōu)點有待繼續(xù)發(fā)掘短曾。
? ? ?一個硬幣總有兩面,那么Python有缺點嗎赐劣?答案是肯定的错英,總結如下:
Python缺點:
1. 代碼運行速度慢
? ? 因為Python是一種高級開發(fā)語言,不像c語言一樣可以深入底層硬件最大程度上挖掘榨取硬件的性能隆豹,因此它的運行速度要遠遠慢于c語言椭岩。另外一個原因是,Python是解釋型語言璃赡,你的代碼在執(zhí)行時會一行一行地翻譯成CPU能理解的機器碼判哥,這個翻譯過程非常耗時,所以很慢碉考。而C程序是運行前直接編譯成CPU能執(zhí)行的機器碼塌计,所以非常快侯谁。
? ? 但需要注意的是锌仅,這種慢對于不需要追求硬件高性能的應用場合來講根本不是問題,因為它們比較的數量級根本不是用戶能直觀感受到的墙贱!想想程序執(zhí)行所需的時間數量級热芹?例如開發(fā)一個下載MP3的網絡應用程序,C程序的運行時間需要0.001秒惨撇,而Python程序的運行時間需要0.1秒伊脓,慢了100倍,但由于網絡更慢魁衙,需要等待1秒报腔,用戶體驗幾乎沒有差別,除非你用非常精確的計時器來計時剖淀。
2. ?發(fā)布程序時必須公開源代碼
? ? ?什么纯蛾?有沒有搞錯?是的纵隔,發(fā)布程序時我們必須公開源代碼翻诉!還是因為Python是一種解釋性語言帆卓,沒有編譯打包的過程(據說最新的python可以打包,但本質上還是把源代碼和解釋器打在一起米丘,沒有太大實際意義)剑令。想想我們的shell腳本是不是也是這個情況,你能在不發(fā)布源代碼的情況下發(fā)布一個黑盒子程序來讓別人正常使用么拄查?
? ? ?這個缺點僅限于你想單純靠賣開發(fā)出來的軟件產品掙錢的時候吁津。但在這個開發(fā)互聯(lián)的時代,不靠賣產品本身來賺錢的商業(yè)模式越來越主流了堕扶,所以問題也不是沒法解決碍脏。?
? ? ?總結起來,Python的優(yōu)點多于缺點稍算,而且缺點在多數它能勝任的情況下不是根本性問題典尾,瑕不掩瑜,盡情享受它給我們帶來的樂趣和便利吧糊探!? ? ? ?? ? ? ? ?
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. 科學計算、人工智能
? ? 據網上了解用于圍棋大戰(zhàn)的谷歌阿發(fā)狗就使用了python開發(fā)(但估計只是部分而已)妓湘。
5. 圖形GUI處理
? ? 暫時沒多少體會查蓉,后續(xù)領悟吧。
6. 網絡爬蟲
? ? 不知道給網絡爬蟲單獨歸類是否合適多柑,姑且這樣吧奶是。這年頭網絡爬蟲無處不在,很多都是基于python開發(fā)竣灌,包括谷歌的爬蟲。估計這是爬蟲工程師的必備工具吧秆麸。
1.6 哪些地方在用Python
?來幾個鮮活的知名公司應用案例初嘹,以示敬意:
? ? ? 谷歌:Google app engine、google earth沮趣、爬蟲屯烦、廣告等
? ? ? Youtube: 世界最大的在線視頻網站基于python開發(fā),好強大
? ? ? Instagram:美國最大的圖片分享網站,全部基于python開發(fā)
? ? ? facebook:大量的基礎庫基于python開發(fā)
? ? ? Redhat:yum包管理工具基于python開發(fā)
? ? ? 國內知名互聯(lián)網公司的應用:豆瓣驻龟、知乎的網站温眉,還有很多主流的互聯(lián)網公司(阿里、騰訊翁狐、百度类溢、金山、搜狐露懒、盛大闯冷、網易、新浪懈词、網易蛇耀、果殼、土豆等)通過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)條件后面均以冒號結尾愉择,然后通過4個空格開始下一層級的實際執(zhí)行動作語句編寫。這部分在冒號后面接上的語句稱為代碼塊织中。
6. 程序命名
? ? 編寫的python程序必須以.py結尾锥涕。
7. 項目規(guī)范
? ? 啟動一個項目開發(fā)時先在開發(fā)工具中創(chuàng)建project,然后根據需要創(chuàng)建目錄狭吼,最后在目錄下創(chuàng)建當前活動的py程序层坠。
2.2 變量
?python中的變量也用于存儲臨時值以便后續(xù)靈活調用,在定義時只能使用字母刁笙、數字破花、下劃線的任意組合谦趣,且不能以數字開頭,不能以python內置的關鍵字來命名變量(如and座每,import前鹅,global,finally等峭梳,有待后續(xù)學習加深印象)舰绘。對變量進行字符串類型的賦值時,字符串需要用成對的引號引起來延赌,可以是單引號除盏、雙引號或者三引號。
? ? 建議通過以下兩種形式來定義較為復雜的變量挫以,便于閱讀:
1. 駝峰體
? ? 即每個單詞的首字母大寫者蠕,其他小寫,如MappingTable
2. 下劃線
? ? 不同單詞之間通過下劃線分開掐松,如mappting_table
2.3 字符編碼
?字符編碼經歷了ASCII碼->unicode->UTF-8的演變過程踱侣,python 2.x默認使用ASCII編碼,而3.x默認使用UTF-8編碼大磺。由于字符編碼事關重大抡句,一言不合就會導致亂碼,因此強烈建議統(tǒng)一使用萬用的utf-8編碼杠愧。怎么使用呢待榔?
? ? 1. 程序開頭明確顯式定義
#!/usr/bin/env python
# -*- coding: utf-8 -*-
? ? ? ? windows下編程可忽略第一行,但為了保留移植性建議始終聲明變量流济。
? ? 2. 在程序解釋器中選擇utf-8字符編碼
? ? 以上兩個條件缺一不可锐锣,雖然python 3.x版本默認使用utf-8編碼,但還是建議在程序中聲明編碼格式绳瘟。
? ? 以上是結果雕憔,下面談談為什么強烈建議使用urf-8編碼,以及為什么utf-8編碼就可以通吃糖声。
? ? 眾所周知計算機是美國人發(fā)明的斤彼,因此最早就只有包括所有字母的大小寫、數字蘸泻、必要的特殊符號等合計才127個字符被編碼到計算機里琉苇,這個編碼就是ASCII編碼。由于需要進行編碼的字符才有127個蟋恬,因此用7個二進制位就足以搞定了翁潘,但8個二進制位才能構成一個完整的字節(jié),因此索性用8個二進制位來進行編碼歼争,剩余的一位只好浪費掉拜马。所以ASCCI碼只占用一個字符。
? ? 隨著計算機技術的推廣和普及沐绒,其他不以英語為官方語言的國家也開始使用計算機了俩莽。那么現在問題來了,一個字節(jié)的8個bit位只能表示非常有限的字符(設計時只包括所有字母的大小寫乔遮、數字扮超、必要的特殊符號,其中整數還不能超過255)蹋肮,既有的ASCII編碼表里沒有包含其他國家的語言字符出刷,但顯然也沒法強迫全球都使用英語,于是各個國家開始進行本土化改良坯辩,設計能滿足自己國家需要的編碼馁龟,如國內的GB2312。這里的改良涉及兩個要點漆魔,一是原有的一個字節(jié)的編碼空間要擴充為兩個字節(jié)甚至更多坷檩,二是新的編碼還不能與既有的ASCII編碼沖突,否則老美要跟你捉急了改抡!你可以想象矢炼,中國搞定了一套,日本也搞定了一套阿纤,接著是韓國句灌、越南等巴拉巴拉,大家都有自己的編碼標準欠拾,各自為政胰锌,遇到多語言混合使用的場景這編碼表還不炸開鍋,連同計算機一起傻掉清蚀!這時Unicode應運而生匕荸。Unicode把所有語言都統(tǒng)一到一套編碼里,用兩個甚至更多的字節(jié)來進行編碼(通常用兩個字節(jié)枷邪,搞不定時再喊人加砝碼呀)榛搔,這樣就不會再有亂碼問題了。
? ??Unicode搞定了多國語言亂碼和編碼統(tǒng)一的問題东揣,但你會發(fā)現如果需要處理的內容全部是英文的話践惑,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就不太經濟劃算嘶卧。OK尔觉,Unicode的演進改良版utf-8就是來解決這個問題的。utf-8的優(yōu)勢在于它使用“可變長編碼”芥吟,在繼續(xù)沿用ASCII編碼基礎上來對1個字節(jié)不能搞定的那些語言字符進行編碼設計侦铜,這樣英文還是用1個字節(jié)专甩,遇到中文就用3個或者更多的字節(jié)來處理。這樣既可以保障空間和性能的最大化钉稍,還能兼顧老美的老巢和其他非英文的編碼兼容問題涤躲,一舉三得!所以你會發(fā)現ASCII其實是utf-8的子集贡未,utf-8向下兼容种樱。
2.4 Python解釋器
?python是一門解釋性語言,自然不能缺了解釋器(類似于JVM)俊卤。官方支持Cpython嫩挤、Jpython、Ironpython和pypy等消恍,默認使用基于C語言實現的Cpython岂昭。它也是最為廣泛使用的解釋器。程序運行時會把.py文件轉換成.pyc字節(jié)碼文件哺哼,然后運行在python虛擬機上佩抹。
2.5 構建Python的開發(fā)環(huán)境
?構建好包括解釋器(虛擬機)和開發(fā)工具IDE在內的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ā)豆胸。從官網下載安裝社區(qū)版即可奥洼,需要注意的是選擇后本地的解釋器和項目的默認字符編碼。其他一些好玩的特性晚胡、快捷鍵等只有后續(xù)逐步體會了灵奖。
2.6 模塊初識
?python內置了很多模塊,同時也可以自定義編寫一些好玩的模塊估盘,使用模塊時需要通過關鍵字import導入瓷患。導入后python會從系統(tǒng)變量的路徑中從前往后一次查找,首次成功查找匹配后不再進行后續(xù)查找遣妥。因此如果需要使用自定義模塊擅编,需要特別關注自定義模塊的存放位置,底線是只存放在系統(tǒng)變量的一個路徑下,否則可能得到意外的結果爱态。
? ? 系統(tǒng)變量的路徑可通過以下方式查看:
??以上是windows下3.5版本的輸出結果谭贪,linux平臺或者其他版本的輸出有所差別,以實際為準肢藐。
2.7 用戶輸入和格式化輸出
?用戶輸入通過input來實現故河,示例如下:
? ? ?YourName=input("Please input you name here: ")?
? ? ?簡單的輸出通過print來實現吱韭,示例如下:
? ? ?print("Hi,", YourName) ?#調用輸出上面用戶輸入的變量YourName
注意:
1. ?3.x版本中input默認接收用戶輸入的類型為字符串吆豹,如果需要使用其他的數據類型則需要進行轉換,如 UserAge=int(input("Please input your name:"))
? ? ?2. ?print輸出中可以接上轉義符號\來實現更多的輸出顯示效果理盆,如 \n表示換行痘煤,\t為制表符。
? ? ?print的使用進階——字符串的格式化輸出:
? ? ?python中猿规,對字符串進行格式化輸出與c語言是相同的衷快,即借助%來實現。%s表示與字符串替換姨俩,%d表示用整數替換蘸拔,%f表示用浮點數替換,如果輸出的字符串中本身就需要%(比如輸出比率)环葵,則需要用連續(xù)的兩個%%來輸出%调窍。
? ? ?示例程序如下:
#!/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等占位符张遭,然后在后面通過%來接上實際替換后需要輸出的內容邓萨,如果需要替換輸出的元素不止一個,則需要在%后面通過一對圓括號把實際替換后需要輸出的內容包含進來菊卷,同時在每個元素之間用逗號隔開缔恳。
2.8 Python的運行邏輯
? ? Python的運行工作邏輯如下:
? ??內存加載代碼->語法分析->解釋器加載->生成字節(jié)碼->執(zhí)行字節(jié)碼->生成機器碼->CPU執(zhí)行
3.開始你的Python開發(fā)之旅
3.1 第一個Python程序--HelloWorld
?python的第一個程序也從hello world開始把:
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
print("Hello world!")
執(zhí)行結果:
"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判斷的語法結構規(guī)范
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)的程序:
#!/usr/bin/env python???????????????????????????????????????? #頂格編寫
#! -*- coding:utf-8 -*-
user_input?=?input("Please input you username:")
if?user_input?==?"Bob":?#注意這里的冒號結尾
????passwd_input?=?input("Please input your password:")?#注意從這里開始,第一個if條件為真時需要執(zhí)行的動作語句均需要左縮進4個空格
????if?passwd_input?==?"password":?#第一個if下的第二個if洁闰,仍然要左縮進4個空格歉甚,同時冒號結尾
????????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關鍵字刃滓,頂格冒號結尾
????print("Invalid username or password, please check your input")?#第一層if-else判斷條件為假時執(zhí)行的動作,與第一層if一樣需要縮進4個空格
說明:該示例程序僅為演示多層if-else的語法結構耸弄,程序本身的設計存在漏洞咧虎;空格縮進在pycharm IDE環(huán)境中會被自動處理,但在普通文件編輯器中需要手動設置计呈。
以下為改良版示例程序砰诵,通過引入對if的多條件判斷來避免上述程序的漏洞:
1#!/usr/bin/env python2#! -*- coding:utf-8 -*-3username=input("Please input you username:\n")4passwd=input("Please input you password:\n")5ifusername =="Bob"andpasswd =="password":6print("Welcome login, %s!"%username)7else:8print("Invalid username or password, please check your input!")
此時只有用戶名和密碼同時輸入正確了才會給出相應提示征唬,否則均提示口令無效,避免暴力破解茁彭。
3.2.3 if-elif-else擴展
上述判斷均為單一式的if-else判斷总寒,以下為if-elif-else的判斷擴展:
語法結構:
if?condition1:
????command1
elif?condition2:
????command2
elif?condition3:
????command3
else?condition4:
????command4
不過這種結構僅僅適用于單一條件存在多種case情況下,語法結構看起來還是比較簡單理肺,當然頂格摄闸、左縮進4個空格和冒號這些規(guī)范一樣要遵循。
還是來一個示例程序加深理解:
#!/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ī)范是:
for?variable?in?XXX:
????loop command
其中variable表示命名的變量妹萨,一般程序中使用i年枕,j等等,XXX表示變化的范圍乎完,可以是list列表熏兄,一般會考慮使用range函數,來表示一個整數序列树姨,如range(5)就表示小于5的整數序列摩桶,即0-4。 語法規(guī)范中同樣需要for語句后面的結尾冒號帽揪,以及循環(huán)體中的4個空格的左縮進硝清。
3.3.2 示例程序
?? ? 猜數字游戲,通過系統(tǒng)生成一個隨機數作為預設年齡台丛,對用戶提供3次猜的機會耍缴,前兩次如果沒有猜中給出數字范圍大小的提示,如果第3次還沒有猜中則給予鼓勵提示挽霉,同時打印出這個預設的數字防嗡,當然三次當中有任何一次猜中會給用戶猜中提示的:
1#!/usr/bin/env python 2#! -*- coding:utf-8 -*- 3import random #導入隨機數模塊 4Age=random.randrange(10)#隨機生成一個小于10的整數(0-9,不包括負數)侠坎,并賦值給Age 6foriinrange(3): 7ifi < 2: 8guess_number=int(input("Please input the age of my dog you guess:\n")) 9ifguess_number > Age:10print("The age you guess is a little big, think smaller!\n")11elifguess_number < Age:12print("The age you guess is a little small, think bigger!\n")13else:14print("Bingo, you got the number,congratulations!\n")15break16else:17guess_number=int(input("Please input the age of my dog you guess:\n"))18ifguess_number == Age:19print("Bingo, you got the number,congratulations!\n")20else:21print("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.為便于程序調試可先對Age賦值固定的數字
2.前兩次如果猜中了就需要退出循環(huán)蚁趁,這里使用了break關鍵字,意思是跳出整個循環(huán)实胸,與之相對應的還有continue關鍵字他嫡,用于跳出當次循環(huán),二者的使用區(qū)別還有待進一步深入學習
OK庐完,現在來改進下程序钢属,當用戶連續(xù)三次猜錯后繼續(xù)給機會,讓用戶選擇是繼續(xù)猜還是直接退出门躯,如果繼續(xù)則再一次獲得三次猜的機會淆党,如此循環(huán)下去。還是用for循環(huán)吧:
1#!/usr/bin/env python 2#! -*- coding:utf-8 -*- 3Age=22 4counter=0 5foriinrange(10): 6ifcounter < 3: 7guess_number=int(input("Plese input your guess number:\n")) 8ifguess_number == Age: 9print("You got the number, congratulations!")10break11elifguess_number > Age:12print("The number you guessed is too big, guess a smaller one\n")13else:14print("The number you guessed is too small, guess a bigger one\n")15counter += 116elifcounter == 3:17continue_flag=input("Do you want to continue? Please type Y to continue or N to quit:\n ")18ifcontinue_flag =="Y":19counter = 020else:21print("Bye")22break23else:24print("You've tried too many times.")
?這里為了保證每一個輪回中的第四次(上述程序中的第四次和第八次)能讓程序繼續(xù)循環(huán),引入了另外一個變量來進行計數并重置染乌。把for循環(huán)換作while循環(huán)看起來差不多:
1#!/usr/bin/env python 2#! -*- coding:utf-8 -*- 3Age=22 4i=0 5counter=0 6whilecounter < 10: 7ifi < 3: 8guess_number=int(input("Plese input your guess number:\n")) 9ifguess_number == Age:10print("You got the number, congratulations!")11break12elifguess_number > Age:13print("The number you guessed is too big, guess a smaller one\n")14else:15print("The number you guessed is too small, guess a bigger one\n")16i += 117else:18continue_flag=input("Do you want to continue? Please type Y to continue or N to quit:\n ")19ifcontinue_flag =="Y":20i = 021else:22print("Bye")23break24counter +=1
小結 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1. Python是一門主流且發(fā)展迅猛的開發(fā)語言山孔,目前存在2.x和3.x兩個版本分支,前端后端都能勝任荷憋,功能強大台颠,在互利網公司應用廣泛,值得托付勒庄;
2. Python程序的開發(fā)需要安裝解釋器和IDE串前,建議使用pycharm,2.x和3.x下的默認字符編碼不同锅铅,永遠推薦使用utf-8編碼酪呻,包括程序編碼和解釋的編碼兩個層面;
3. 系統(tǒng)自帶模塊和自定義編寫的模塊均可以通過import導入使用盐须;
4.?在進行python程序開發(fā)時,注意代碼需要分層體現漆腌,第一層代碼頂格編寫贼邓,第二層(用在第一次出現的流程控制語句中的代碼塊)左縮進4個空格;
5. input用于接收用戶輸入闷尿,默認輸入的數據類型是字符串塑径,可通過int關鍵字轉換為整數。print可進行簡單輸出填具,如要格式化輸出則需要借助%s ?%d %f等來實現统舀,具體視數據類型而定;
6. 流程控制語句if-else判斷和for劳景、while循環(huán)都需要注意代碼書寫格式誉简,流程控制語句關鍵字一定是以冒號結尾,具體的流程控制代碼塊則需要左縮進處理盟广,第一層左縮進4個空格闷串,第二層8個空格,以此類推筋量;
7.continue和break可分別用于退出當前(當次)流程控制和整個循環(huán)烹吵,課堂上演示了在for循環(huán)中的使用,在if-else判斷中不能使用桨武。