Python學習之路-Python簡介和基礎入門

.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判斷中不能使用桨武。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末肋拔,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子呀酸,更是在濱河造成了極大的恐慌凉蜂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異跃惫,居然都是意外死亡叮叹,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門爆存,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛉顽,“玉大人,你說我怎么就攤上這事先较⌒” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵闲勺,是天一觀的道長曾棕。 經常有香客問我,道長菜循,這世上最難降的妖魔是什么翘地? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮癌幕,結果婚禮上衙耕,老公的妹妹穿的比我還像新娘。我一直安慰自己勺远,他們只是感情好橙喘,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胶逢,像睡著了一般厅瞎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上初坠,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天和簸,我揣著相機與錄音,去河邊找鬼某筐。 笑死比搭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的南誊。 我是一名探鬼主播身诺,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抄囚!你這毒婦竟也來了霉赡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤幔托,失蹤者是張志新(化名)和其女友劉穎穴亏,沒想到半個月后蜂挪,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡嗓化,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年棠涮,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刺覆。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡严肪,死狀恐怖,靈堂內的尸體忽然破棺而出谦屑,到底是詐尸還是另有隱情驳糯,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布氢橙,位于F島的核電站酝枢,受9級特大地震影響,放射性物質發(fā)生泄漏悍手。R本人自食惡果不足惜帘睦,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谓苟。 院中可真熱鬧官脓,春花似錦、人聲如沸涝焙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仑撞。三九已至,卻和暖如春妖滔,著一層夾襖步出監(jiān)牢的瞬間隧哮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工座舍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沮翔,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓曲秉,卻偏偏與公主長得像采蚀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子承二,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容