第一篇:python基礎

python基礎

 

python基礎

 本節內容

  1. python起源
  2. python的發展史
  3. 爲何選擇python3
  4. 第一個python程序
  5. 變量定義
  6. 表達式和運算符
  7. 用戶輸入
  8. 流程控制 判斷
  9. 流程控制 循環
  10. break和continue

1.python起源

python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。
1991年 發佈Python第一個版本。 最新的TIOBE排行榜,Python趕超PHP佔據第五, Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。 由上圖可見,Python總體呈上升趨勢,反映出Python應用愈來愈普遍而且也逐漸獲得業內的承認!!!html

Python被應用在衆多領域:python

  1. 數據分析: 2016/2月/11,美國科學家宣佈發現引力波,分析觀測30年的數據。分析引力波數據的Python包:GWPY
  2. 雲計算 : 典型應用——Python開發的OpenStack
  3. WEB開發: 衆多優秀的WEB框架,Django、flask、 tornado
  4. 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas。
  5. 系統運維: 運維人員必備,slatstack(系統自動化配置和管理工具),Ansible(自動化運維工具)
  6. 圖形開發: wxPython、PyQT、TKinter……………等等

使用Python的企業web

  1. Google - Google Groups、Gmail、Google Maps、AlphaGo等,Google App Engine支持python做爲開發語言
  2. NASA - 美國宇航局,從1994年起把python做爲主要開發語言
  3. Dropbox - 美國最大的在線雲存儲網站,所有用Python實現,天天網站處理10億個文件的上傳和下載
  4. 豆瓣網 - 圖書、唱片、電影等文化產品的資料數據庫網站
  5. BitTorrent - bt下載軟件客戶端
  6. gedit - Linux平臺的文本編輯器
  7. GIMP - Linux平臺的圖像處理軟件(Linux下的PS)
  8. 知乎(國外的Quora) - 社交問答網站,國內最大的問答社區,經過Python開發
  9. Autodesk Maya - 3D建模軟件,支持python做爲腳本語言
  10. YouTube:世界上最大的視頻網站YouTube就是用Python開發的
  11. Facebook:大量的基礎庫均經過Python實現的
  12. Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的

除上面以外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各類各樣的任務。 更多案例:https://www.python.org/about/success/算法

 Python 是一門什麼樣的語言?

編程語言主要從如下幾個角度爲進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每一個分類表明什麼意思呢,咱們一塊兒來看一下。shell

編譯型和解釋型

咱們先看看編譯型,其實它和彙編語言是同樣的:也是有一個負責翻譯的程序來對咱們的源代碼進行轉換,生成相對應的可執行代碼。這個過程說得專業一點,就稱爲編譯(Compile),而負責編譯的程序天然就稱爲編譯器(Compiler)。若是咱們寫的程序代碼都包含在一個源文件中,那麼一般編譯以後就會直接生成一個可執行文件,咱們就能夠直接運行了。但對於一個比較複雜的項目,爲了方便管理,咱們一般把代碼分散在各個源文件中,做爲不一樣的模塊來組織。這時編譯各個文件時就會生成目標文件(Object file)而不是前面說的可執行文件。通常一個源文件的編譯都會對應一個目標文件。這些目標文件裏的內容基本上已是可執行代碼了,但因爲只是整個項目的一部分,因此咱們還不能直接運行。待全部的源文件的編譯都大功告成,咱們就能夠最後把這些半成品的目標文件「打包」成一個可執行文件了,這個工做由另外一個程序負責完成,因爲此過程好像是把包含可執行代碼的目標文件鏈接裝配起來,因此又稱爲連接(Link),而負責連接的程序就叫……就叫連接程序(Linker)。連接程序除了連接目標文件外,可能還有各類資源,像圖標文件啊、聲音文件啊什麼的,還要負責去除目標文件之間的冗餘重複代碼,等等,因此……也是挺累的。連接完成以後,通常就能夠獲得咱們想要的可執行文件了。數據庫

上面咱們大概地介紹了編譯型語言的特色,如今再看看解釋型。噢,從字面上看,「編譯」和「解釋」的確都有「翻譯」的意思,它們的區別則在於翻譯的時機安排不大同樣。打個比方:假如你打算閱讀一本外文書,而你不知道這門外語,那麼你能夠找一名翻譯,給他足夠的時間讓他從頭至尾把整本書翻譯好,而後把書的母語版交給你閱讀;或者,你也馬上讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,若是你想往回看某個章節,他也得從新給你翻譯。編程

兩種方式,前者就至關於咱們剛纔所說的編譯型:一次把全部的代碼轉換成機器語言,而後寫成可執行文件;然後者就至關於咱們要說的解釋型:在程序運行的前一刻,還只有源程序而沒有可執行程序;而程序每執行到源程序的某一條指令,則會有一個稱之爲解釋程序的外殼程序將源代碼轉換成二進制代碼以供執行,總言之,就是不斷地解釋、執行、解釋、執行……因此,解釋型程序是離不開解釋程序的。像早期的BASIC就是一門經典的解釋型語言,要執行BASIC程序,就得進入BASIC環境,而後才能加載程序源文件、運行。解釋型程序中,因爲程序老是以源代碼的形式出現,所以只要有相應的解釋器,移植幾乎不成問題。編譯型程序雖然源代碼也能夠移植,但前提是必須針對不一樣的系統分別進行編譯,對於複雜的工程來講,的確是一件不小的時間消耗,何況極可能一些細節的地方仍是要修改源代碼。並且,解釋型程序省卻了編譯的步驟,修改調試也很是方便,編輯完畢以後便可當即運行,沒必要像編譯型程序同樣每次進行小小改動都要耐心等待漫長的Compiling…Linking…這樣的編譯連接過程。不過凡事有利有弊,因爲解釋型程序是將編譯的過程放到執行過程當中,這就決定了解釋型程序註定要比編譯型慢上一大截,像幾百倍的速度差距也是不足爲奇的。flask

編譯型與解釋型,二者各有利弊。前者因爲程序執行速度快,同等條件下對系統要求較低,所以像開發操做系統、大型應用程序、數據庫系統等時都採用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本均可視爲編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程序則一般使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python等等。安全

但既然編譯型與解釋型各有優缺點又相互對立,因此一批新興的語言都有把二者折衷起來的趨勢,例如Java語言雖然比較接近解釋型語言的特徵,但在執行以前已經預先進行一次預編譯,生成的代碼是介於機器碼和Java源代碼之間的中介代碼,運行的時候則由JVM(Java的虛擬機平臺,可視爲解釋器)解釋執行。它既保留了源代碼的高抽象、可移植的特色,又已經完成了對源代碼的大部分預編譯工做,因此執行起來比「純解釋型」程序要快許多。而像VB6(或者之前版本)、C#這樣的語言,雖然表面上看生成的是.exe可執行程序文件,但VB6編譯以後實際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動調用某個外部解釋器的代碼(該解釋程序獨立於用戶編寫的程序,存放於系統的某個DLL文件中,全部以VB6編譯生成的可執行程序都要用到它),以解釋執行實際的程序體。C#(以及其它.net的語言編譯器)則是生成.net目標代碼,實際執行時則由.net解釋系統(就像JVM同樣,也是一個虛擬機平臺)進行執行。固然.net目標代碼已經至關「低級」,比較接近機器語言了,因此仍將其視爲編譯語言,並且其可移植程度也沒有Java號稱的這麼強大,Java號稱是「一次編譯,處處執行」,而.net則是「一次編碼,處處編譯」。呵呵,固然這些都是題外話了。總之,隨着設計技術與硬件的不斷髮展,編譯型與解釋型兩種方式的界限正在不斷變得模糊。服務器

 動態語言和靜態語言

一般咱們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。

(1)動態類型語言:動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其餘的各類腳本語言如VBScript也多少屬於動態類型語言。

(2)靜態類型語言:靜態類型語言與動態類型語言恰好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明全部變量的數據類型,C/C++是靜態類型語言的典型表明,其餘的靜態類型語言還有C#、JAVA等。

強類型定義語言和弱類型定義語言

(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:若是你定義了一個整型變量a,那麼程序根本不可能將a看成字符串類型處理。強類型定義語言是類型安全的語言。

(2)弱類型定義語言:數據類型能夠被忽略的語言。它與強類型定義語言相反, 一個變量能夠賦不一樣數據類型的值。

強類型定義語言在速度上可能略遜色於弱類型定義語言,可是強類型定義語言帶來的嚴謹性可以有效的避免許多錯誤。另外,「這門語言是否是動態語言」與「這門語言是否類型安全」之間是徹底沒有聯繫的! 例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。

經過上面這些介紹,咱們能夠得出,python是一門動態解釋性的強類型定義語言。那這些基因使成就了Python的哪些優缺點呢?咱們繼續往下看。

Python的優缺點

先看優勢

  1. Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂, 初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
  2. 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有 相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
  3. 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
  4. 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
  5. 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
  6. 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能

再看缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.1s,用Python是0.01s,這樣C語言直接比Python快了10s,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
  2. 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。

    固然,Python還有一些其它的小缺點,在這就不一一列舉了,我想說的是,任何一門語言都不是完美的,都有擅長和不擅長作的事情,建議各位不要拿一個語言的劣勢去跟另外一個語言的優點來去比較,語言只是一個工具,是實現程序設計師思想的工具,就像咱們以前中學學幾什麼時候,有的時候須要要圓規,有的時候須要用三角尺同樣,拿相應的工具去作它最擅長的事纔是正確的選擇。以前不少人問我Shell和Python到底哪一個好?我回答說Shell是個腳本語言,但Python不僅是個腳本語言,能作的事情更多,而後又有鑽牛角尖的人說徹底不必學Python, Python能作的事情Shell均可以作,只要你足夠牛B,而後又舉了用Shell能夠寫俄羅斯方塊這樣的遊戲,對此我能說表達只能是,不要跟SB理論,SB會把你拉到跟他同樣的高度,而後用充分的經驗把你打倒。

Python解釋器

  1. Cpython Python的官方版本,使用C語言實現,使用最爲普遍,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),而後運行在Python虛擬機上。
  2. Jyhton Python的Java實現,Jython會將Python代碼動態編譯成Java字節碼,而後在JVM上運行。 IronPython
  3. Python的C#實現,IronPython將Python代碼編譯成C#字節碼,而後在CLR上運行。(與Jython相似)
  4. PyPy(特殊)
  5. Python實現的Python,將Python的字節碼字節碼再編譯成機器碼。
  6. RubyPython、Brython ... Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。

2.Python 發展史

1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。 1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。

Python 1.0 - January 1994 增長了 lambda, map, filter and reduce. 1999年 Python的web框架之祖——Zope 1發佈 Python 2.0 - 2000/10/16,加入了內存回收機制,構成了如今Python語言框架的基礎 Python 2.4 – 2004/11/30, 同年目前最流行的WEB框架Django 誕生 Python 2.5 - 2006/09/19 Python 2.6 - 2008/10/1 Python 2.7 - 2010/07/03

Python 3.0 - 2008/12/03 Python 3.1 - 2009/06/27 Python 3.2 - 2011/02/20 Python 3.3 - 2012/09/29 Python 3.4 - 2014/03/16 Python 3.5 - 2015/09/13

2014年11月,Python2.7將在2020年中止支持的消息被髮布,而且不會在發佈2.8版本,建議用戶儘量的遷移到3.4+

Python最初發布時,在設計上有一些缺陷,好比Unicode標準晚於Python出現,因此一直以來對Unicode的支持並不徹底,而ASCII編碼支持的字符有限。例: 對中文支持很差 Python3相對Python早期的版本是一個較大的升級,Py3在設計的時候沒有考慮向下兼容,因此不少早期版本的Python的程序沒法再Py3上運行。 爲了照顧早期的版本,推出過渡版本2.6——基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,容許使用部分Python 3.0的語法與函數。 2010年繼續推出了兼容版本2.7,大量Python3的特性被反向遷移到了Python2.7 2.7比2.6進步很是多,同時擁有大量3中的特性和庫,而且照顧了原有的Python開發人羣

3.爲何選擇python3

  1. py2.7是2.x系列的最後一個版本,已經中止開發,再也不增長新功能。2020年終止支持。
  2. 全部的最新的標準庫的更新改進,只會在3.x的版本里出現。
  3. 龜叔決定清理Python2.x ,而且再也不兼容舊版本。 最大的一個改變就是使用Unicode做爲默認編碼。Pyhton2.x中直接寫中文會報錯,Python3中能夠直接寫中文了。
  4. 從開源項目看,支持py3的比例已經大大提升,知名的項目通常都支持py2.7和py3+。
  5. py3比py2更規範統1、去掉了不必的關鍵字
  6. Python3.x還在持續改進

因此咱們仍是推薦你們使用Python3.x。 python2.x和3.x的詳細區別以下圖: 

4.第一個python程序

固然,每學習一種語言,首先要學習的固然是儀式感超強的hello world了,下面就來看看python3中的hello world該怎麼寫吧

 1 >>> print("hello world!") 2 hello world!  

上面就是python中的hello world了,在python2中的寫法是print "hello world!"可是在3中print後面必需要跟上()要輸出的內容寫在()中。

5.變量定義

變量: 變量就是用來存儲一些信息,供程序之後調用或者操做修改。變量爲標記數據提供了一種描述性的名字,以便咱們的程序能夠被程序的閱讀者很清晰的理解。把變量做爲一個存儲信息的容器會更容易理解變量。它的主要是目的是筆記和存儲在內存中的數據,這個數據就能夠在你的整個程序中使用。 變量的做用:變量能夠用來指定內存中的某一個區域,經過使用該變量,能夠在以後訪問到以前存貯的內容,也可對該內容進行修改。

常量的做用:python中不像其餘語言同樣。有常量的概念,可是python中約定俗成的把變量名所有大寫的變量看作常量,該常量不能被修改。

變量的命名規則:

  1. 變量名由字母、數字和下劃線組成
  2. 變量不能以數字開頭,不能含有特殊字符和空格
  3. 不能以關鍵字命名,例如['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
  4. 變量不能以中文命名
  5. 定義的變量名應該有意義(其餘人看到變量名就能大概瞭解該變量存儲的是什麼內容)
  6. 變量的命名方式通常使用駝峯式命名方式或者如下劃線分隔單詞的命名方式(python官方推薦使用如下劃線分隔單詞的命名方式)
  7. 變量名區分大小寫

6.表達式和運算符

表達式和運算符

什麼是表達式?

1+23 就是一個表達式,這裏的加號和乘號叫作運算符,一、二、3叫作操做數。1+23 通過計算後獲得的結果是7,就1+23 = 7。咱們能夠將計算結果保存在一個變量裏,ret = 1-23 。 因此表達式就是由操做數和運算符組成的一句代碼或語句,表達式能夠求值,能夠放在「=」的右邊,用來給變量賦值。

算術運算符 : + - * / //(取整除) %(取餘) **

複製代碼
 1 >>> 2+3
 2 5
 3 >>> 3-2
 4 1
 5 >>> 2*3
 6 6
 7 >>> 5/2
 8 2.5
 9 >>> 5//2
10 2
11 >>> 5%2
12 1
13 >>> 2**3
14 8
複製代碼

 

賦值運算符: = 、+= -= *= /= %= //= **=

複製代碼
1 >>> num = 2    
2 >>> num += 1   # 等價於 num = num + 1
3 >>> num -= 1   # 等價於 num = num - 1
4 >>> num *= 1   # 等價於 num = num * 1
5 >>> num /= 1   # 等價於 num = num / 1
6 >>> num //= 1   # 等價於 num = num // 1
7 >>> num %= 1   # 等價於 num = num % 1
8 >>> num **= 2   # 等價於 num = num ** 2
複製代碼

 

比較運算符:>、 <、 >=、 <=、 ==、!= True False簡單講一下

顧名思義,比較運算符是用來作比較的,比較的結果會有兩種,分別是成立和不成立,成立的時候,結果是 True,不成立的時候結果是False。 True和False 用來表示比較後的結果。

複製代碼
 1 >>> a = 5
 2 >>> b = 3
 3 >>> a > b  # 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 
 4 True
 5 >>> a < b  # 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。
 6 False
 7 >>> a <= b  # 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。
 8 False
 9 >>> a >= b  # 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。
10 True
11 >>> a == b  # 檢查,兩個操做數的值是否相等,若是是則條件變爲真。
12 False
13 >>> a != b  # 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。
14 True
複製代碼

 

邏輯運算符: not 、and、 or

邏輯運算符是用來作邏輯計算的。像咱們上面用到的比較運算符,每一次比較其實就是一次條件判斷,都會相應的獲得一個爲True或False的值。而邏輯運算符的的操做數就是一個用來作條件判斷的表達式或者變量。

複製代碼
1 >>> a > b and  a < b  # 若是兩個操做數都是True,那麼結果爲True,不然結果爲False。
2 False
3 >>> a > b or  a < b  # 若是有兩個操做數至少有一個爲True, 那麼條件變爲True,不然爲False。
4 True
5 >>> not a > b  # 反轉操做的狀態,操做數爲True,則結果爲False,反之則爲True
6 False
複製代碼

 

成員運算符: not in 、in (判斷某個單詞裏是否是有某個字母)

成員運算符用來判斷一個元素是不是另外一個元素的成員。 好比說咱們能夠判斷 「hello」 中是否有 「h」, 獲得的結果也是True 或者 False。

1 >>> "h" in "hello"  # 這裏的意思是 「h」 在「Hello」 中,判斷後結果爲True
2 True 
3 >>> "h" not in "hello"  # 這裏的意思是 「h」 不在「Hello」 中,判斷後結果爲False
4 False

 

身份運算符: is、is not(講數據類型時講解,通常用來判斷變量的數據類型)

用來判斷身份。

複製代碼
1 >>> a = 123456
2 >>> b = a
3 >>> b is a   #判斷  a 和 b 是否是同一個 123456
4 True
5 >>> c = 123456
6 >>> c is a  #判斷  c 和 a 是否是同一個 123456
7 False
8 >>> c is not a   #判斷  c 和 a 是否是不是同一個 123456
9 True
複製代碼

 

這裏咱們首先將123456賦值給a,後有將a賦值給b, 這樣實際上是 a和b 的值都是123456, 可是後面c的值也是123456,爲何 第一次a is b 的結果爲True ,c和 a 的結果爲False 呢?

緣由是這樣的: 咱們知道程序是運行在內存裏的,第一次 咱們將123456賦值給a的時候,實際上是在內存裏開闢了一塊空間,將123456放在這塊空間裏,爲了找到這裏的123456, 會有一個指向這塊空間的地址,這個地址叫作內存地址,是123456存儲在內存中的地址。a其實指向的就是存儲123456的內存空間的地址。執行了b=a,就是讓b指向的地址和a同樣。以後咱們執行了 c = 123456 ,這裏就會再開闢一塊內存空間,並將指向該空間的內存地址賦值給c ,這樣的話 ,a和b 指向的是同一個123456, c 指向的是另一個123456 。

7.用戶輸入

在python2中獲取用戶輸入數據使用raw_input("xxx:"),而在python3中只能使用input("xxx:")來獲取用戶輸入。 有了獲取用戶輸入以後就能夠實現程序和用戶的交互運行了。

8.流程控制 判斷

python和其餘語言同樣,也是用if else來實現判斷邏輯的。語法以下所示:

複製代碼
if 條件:
    判斷體內語句
elif 條件:
    判斷體內語句
else:
    判斷體內語句
複製代碼

 

縮進——推薦四個空格 (使用2個、3個空格或者tab都是能夠得)

不要tab與空格混用 不一樣軟件對空格的顯示邏輯老是同樣的,可是對於tab卻五花八門。 有的軟件把Tab展開成空格,有的不會展開。有的Tab寬度是4,有的寬度是8, 這些不一致會使得代碼混亂,尤爲是靠縮進表示塊結構的Python。

下面是一個使用判斷語句實現的猜年齡遊戲: ageofprincal=56 guessage=int(input(">>:")) if ageofprincal==guessage: print("yes,you got it!") else: print("no,you are wrong!")

下面是一段使用判斷實現獲取三個值的最大值和最小值的小代碼:

複製代碼
 1 num1=int(input("num1:"))
 2 num2=int(input("num2:"))
 3 num3=int(input("num3:"))
 4 if num1<num2:
 5     num1,num2=num2,num1
 6 if num1<num3:
 7     num1,num3=num3,num1
 8 if num2<num3:
 9     num2,num3=num3,num2
10 print("max:",num1)
11 print("min:",num3)
複製代碼

 

9.流程控制 循環

python中循環控制主要有以下兩種:

for循環語句,結構以下所示:

for 變量 in 可遍歷對象:
    循環體內語句
else:
    循環體後語句

 

其中須要注意的是for循環後面還跟了else語句,這個方式我只在python中見到過,目前我知道的一種用法就是當for循環正常執行結束後就會執行else中的語句,可是,當在循環體中使用break或者循環體異常結束時,else中的語句將不會被執行。

while循環語句,結構以下所示:

while 條件表達式:
    循環體內語句
else:
    循環體後語句

 

while循環中也存在else語句,和for循環中的else語句做用同樣,當while以後的條件表達式爲真時,纔會進入循環體內部執行,注意while循環語句能夠一次都不被執行。

10.break和continue

break和continue語句均可以用於循環體內部,break的做用是跳出當前循環,而continue的做用是從當前位置結束當前循環,進入下次循環。 這個沒什麼解釋的。。。試試就能理解了。。。

對上面的猜年齡遊戲的改進,這個更具備可玩性,ps,開發者也不知道答案是多少,哈哈哈:

複製代碼
 1 import random
 2 age=random.randint(0,100)
 3 flag=True
 4 while flag:
 5     user_input_age=int(input("age is: "))
 6     if user_input_age > age:
 7         print("bigger!")
 8     elif user_input_age < age:
 9         print("small!")
10     else:
11         print("good!")
12         flag=False
13 print("THE END!")
複製代碼

 

 

下面是兩種利用循環嵌套實現9*9口訣表的代碼塊:

複製代碼
 1 for i in range(1,10):
 2     for j in range(1,i+1):
 3         print("%s*%s=%s\t"%(j,i,i*j),end="")
 4     print()
 5 
 6 i=1
 7 while i<=9:
 8     j=1
 9     while j<=i:
10         print("%s*%s=%s\t"%(j,i,i*j),end="")
11         j+=1
12     i+=1
13     print()
複製代碼

 

利用循環嵌套實現等腰三角形的輸出:

複製代碼
1 row=int(input("pls input rows:"))
2 star=row
3 for i in range(row,0,-1):
4     for j in range(i-1,0,-1):
5         print(" ",end="")
6     print("*"*((star-i)*2+1))
複製代碼

 

 
分類:  python基礎
相關文章
相關標籤/搜索