Python簡介和入門

python簡介:

1、什麼是pythonphp

Python(英國發音:/ pa θ n/ 美國發音:/ pa θɑ n/),是一種面向對象、直譯式的計算機程序語言。html

每一門語言都有本身的哲學:前端

pythonde 設計哲學是:「優雅」、「明確」、「簡單」java

2、python由來python

 1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。之因此選中Python做爲程序的名字,是由於他是BBC電視劇——蒙提·派森的飛行馬戲團(Monty Python‘s Flying Circus)的愛好者。linux

3、Python能作什麼程序員

Web程序web

Python常常被用於Web開發。好比,經過mod_wsgi模塊,Apache能夠運行用Python編寫的Web程序。使用Python語言編寫的Gunicorn做爲Web服務器,也可以運行Python語言編寫的Web程序。Python定義了WSGI(Web Server Gateway Interface)標準應用接口來協調Http服務器與基於Python的Web程序之間的溝通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可讓程序員輕鬆地開發和管理複雜的Web程序。算法

Python對於各類網絡協議的支持很完善,所以常常被用於編寫服務器軟件、網絡蠕蟲。第三方庫Twisted支持異步在線編寫程序和多數標準的網絡協議(包含客戶端和服務器),而且提供了多種工具,被普遍用於編寫高性能的服務器軟件。另有gevent這個流行的第三方庫,一樣可以支持高性能高併發的網絡開發。django

GUI開發

Python自己包含的Tkinter庫可以支持簡單的GUI(Graphical User Interface)開發。可是愈來愈多的Python程序員選擇wxPython或者PyQt等GUI包來開發跨平臺的桌面軟件。使用它們開發的桌面軟件運行速度快,與用戶的桌面環境相契合。經過PyInstaller還能將程序發佈爲獨立的安裝程序包。

操做系統

在不少操做系統裏,Python是標準的系統組件。大多數Linux發佈版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能夠在終端機下直接運行Python。有一些Linux發佈版的安裝器使用Python語言編寫,好比Ubuntu的Ubiquity安裝器、Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用做業系統功能的庫。經過pywin32這個第三方軟件包,Python可以訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序可以直接調用.Net Framework。

其餘

NumPy、SciPy、Matplotlib可讓Python程序員編寫科學計算程序。有些公司會使用Scons代替make構建C++程序。

不少遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。不少遊戲,如EVE Online使用Python來處理遊戲中繁多的邏輯。

YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。OLPC的做業系統Sugar項目的大多數軟件都是使用Python編寫

 

因此他的應用範圍大概分爲:

數據分析

系統編程

組件集成

網絡服務

圖像處理

數值計算和科學計算

4、設計哲學與定位

Python的設計哲學是「優雅」、「明確」、「簡單」。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確沒有或者不多有歧義的語法。這些準則被稱爲「 Python格言」。在Python解釋器內運行import this能夠得到完整的列表

 

1.優美勝於醜陋(Python 以編寫優美的代碼爲目標)

2.明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格類似)

3.簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)

4.複雜勝於凌亂(若是複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔,多加註釋!)

5.扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)

6.間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題,一行代碼不能超過80個字符,你能夠換行或起一個新的邏輯來寫)

7.可讀性很重要(優美的代碼是可讀的)

8.即使假借特例的實用性之名,也不可違背這些規則(這些規則至高無上),覺對不容許特列必須按照這個規則

9.不要包容全部錯誤,除非你肯定須要這樣作(精準地捕獲異常,不寫 except:pass 風格的代碼)

10.當存在多種可能,不要嘗試去猜想!

11.而是儘可能找一種,最好是惟一一種明顯的解決方案(若是不肯定,就用窮舉法)

12.雖然這並不容易,由於你不是 Python 之父(這裏的 Dutch 是指 Guido )

13.作也許好過不作,但不假思索就動手還不如不作(動手以前要細思量)

14.若是你沒法向人描述你的方案,那確定不是一個好方案;反之亦然(方案測評標準)

15.命名空間是一種絕妙的理念,咱們應當多加利用(倡導與號召

 

PS:

簡單的拿php和python作對比:

python是綜合性的語言,他不光能夠作web開發。他倆的對比應該僅限於web開發方向。不見其phpweb開發別python好,php是先入爲主,python的web框架在2000纔有的比較晚了

django起來的比較晚,他們的web開發都是很不錯了。你用php作的python均可以作。python給你的是一個完整的解決,前端和後端均可以用python。

簡單的拿C和python作對比:

Python慢,慢的嚴重,慢出風格,慢出自信!!!相同的程序Python比C慢幾百倍很正常

程序的快慢很大程度上程序員邏輯、SQL、算法,比起O(n)和O(n^2)的區別, 語言間的差別就顯得微乎其微

py2與3的詳細區別

PRINT IS A FUNCTION

The statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old statement (PEP 3105). Examples: 

1
2
3
4
5
6
7
Old:  print  "The answer is" 2 * 2  New:  print ( "The answer is" 2 * 2 )
Old:  print  x,  # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline
Old:  print  # Prints a newline
New:  print ()  # You must call the function!
Old:  print  >>sys.stderr,  "fatal error"  New:  print ( "fatal error" file = sys.stderr)
Old:  print  (x, y)  # prints repr((x, y))
New:  print ((x, y))  # Not the same as print(x, y)!

編程風格

1、語法要求
–縮進統一
同一級別的代碼必須一致!(而且建議全部級別的代碼的縮進建議是相同的--必須,開發規範裏建議4個空格)建議不要用table由於若是想把代碼在windows上運行,linux和windows的table的定義不一樣!!!!
好的編輯器能提升開發代碼的效率!
全部python,第一行必定要頂到行頭! 同一級別的新的都要頂到行頭。

2、變量
標識符的第一個字符必須是字母表中的字母(大寫或小寫)或者一個下劃線(‘ _ ’)
標識符名稱的其餘部分能夠由字母(大寫或小寫)、下劃線(‘ _ ’)或數字(0-9)組成。
有效 標識符名稱的例子有i、__my_name、name_23和a1b2_c3。  
無效 標識符名稱的例子有2things、this is spaced out和my-name。
標識符名稱是對大小寫敏感的。例如,myname和myName不是一個標識符。注意前者中的小寫n和後者中的大寫N。 

常量:數值不變的
變量:數值會變更的量

在python中沒有常量的,全部的數值均可以改變,可是他依然有個常量的概念,可是是人爲的你不去改變他,定義一個常量應該用大寫的形式。

AGE = 10 這個就是常量,他是大寫的!是約定俗成的。可是他是能夠改的!
name =  'Tim Luo' 這個是變量

##這裏須要注意下,設置變量的時候不能設置python自帶的內置方法好比type
如下關鍵字不能聲明爲變量名

1 ['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']

變量的起名的方式就是標識符名稱,經過標識符去調用內存中的數據。

Python環境

1、安裝python

windows:

 

1
2
3
4
5
6
7
1 、下載安裝包
     https: / / www.python.org / downloads /
2 、安裝
     默認安裝路徑:C:\python27
3 、配置環境變量
     【右鍵計算機】 - - 》【屬性】 - - 》【高級系統設置】 - - 》【高級】 - - 》【環境變量】 - - 》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】  - - > 【Python安裝目錄追加到變值值中,用 ; 分割】
     如:原來的值;C:\python27,切記前面有分號

linux:

1
2
3
無需安裝,原裝Python環境
   
ps:若是自帶 2.6 ,請更新至 2.7

 

 

 

 Python入門

 1、第一句python

 vim hello.py 建立一個文件

1
2
3
4
#!//usr/bin/env python
#-*- conding:utf-8 -*-
  
print  "Hello World"

執行:

1
2
3
python hello.py 便可
或者增長執行權限:chmod  755  hello.py
. / hello.py

解釋:

1
2
1  #!//usr/bin/env python   #腳本用env啓動的緣由,是由於腳本解釋器在linux中可能被安裝於不一樣的目錄,env能夠在系統的PATH目錄中查找。同時,env還規定一些系統環境變量。env就是:envirnment 環境變量)
2  # -*- coding: utf-8 -*- 指定編碼類型爲utf-8 (詳情繼續閱讀)

2、編碼 

python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)

ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號

顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode

Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多

UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...

因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),因此若是不指定編碼類型,若是有中文就會報錯。

3、Python的工做過程

python 把代碼讀到內存  二、詞法語法分析 三、放到編譯器  ---》 生成字節碼   四、執行字節碼 ---》生成機器碼  CPU執行

4、執行腳本傳入參數

Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:
    Python內部提供的模塊
    業內開源的模塊
    程序員本身開發的模塊
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
    
import  sys
    
print  sys.argv

5、pyc文件

執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。

ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。(任何字節碼經過反編譯均可以獲得代碼)

6、變量

字符串的值是不能被修改的,他在內存裏是連續的,若是想改的話必須在後面預留因此不支持修改!
字符串特性,一旦修改,從新建立
例子:

1
2
3
name1  =  "JasonWang"
name2  =  name1
這裏而後把name1  =  "James"

name2 變不變呢?實際上是不變的結合上面的規則來:字符串特性,一旦修改,從新建立
name1 = "James" name1的值變了,他會從新開闢一塊內存空間!

注:

1
2
name1  =  "James"
name2  =  "Jason"

這裏雖然他們的內存地址是相同的可是:他們的原理是各自在內存裏開闢了一塊內存空間,python給他進行了優化而已。有個池的概念(把你最經常使用的值作一個指向)!

集合又不相同:

1
2
>>> name1 = ['Jason','James','Lily'] 
>>> name2 = name1
>>> print name1

['Jason', 'James', 'Lily', 'aa']
>>> print name2
['Jason', 'James', 'Lily', 'aa']
>>>

name1 這個集合增長一個,如今name2 變不變呢?會變的集合和字符串不一樣他的各個元素不是連續的,因此name2=name1指向後,name1增長 一個元素不會開闢一塊新的空間,name2就會跟着改變。

7、輸入

1
2
3
4
5
6
#!/usr/bin/env python# -*- coding: utf-8 -*-
# 將用戶輸入的內容賦值給 name 變量
   
name  =  raw_input ( "請輸入用戶名:" )
   
# 打印輸入的內容print name

輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
   
import  getpass
   
# 將用戶輸入的內容賦值給 name 變量
pwd  =  getpass.getpass( "請輸入密碼:" )
   
# 打印輸入的內容
print  pwd

 

. 模塊初識

 Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,之後的課程中會深刻講解經常使用到的各類庫,如今,咱們先來象徵性的學2個簡單的。

sys

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import  sys
 
print (sys.argv)
 
 
#輸出
$ python test.py helo world
[ 'test.py' 'helo' 'world' ]   #把執行腳本時傳遞的參數獲取到了

  

os

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import  os
 
os.system( "df -h" #調用系統命令

徹底結合一下  

1
2
3
import  os,sys
 
os.system(''.join(sys.argv[ 1 :]))  #把用戶的輸入的參數看成一條命令交給os.system來執行

本身寫個模塊

python tab補全模塊

import sys
import readline
import rlcompleter

if sys.platform == 'darwin' and sys.version_info[0] == 2:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")  # linux and python3 on mac

for mac

 

寫完保存後就可使用了

1
2
3
4
5
localhost:$ python
Python  2.7 . 10  (default,  Oct  23  2015 18 : 05 : 06 )
[GCC  4.2 . 1  Compatible Apple LLVM  7.0 . 0  (clang - 700.0 . 59.5 )] on darwin
Type  "help" "copyright" "credits"  or  "license"  for  more information.
>>>  import  tab

你會發現,上面本身寫的tab.py模塊只能在當前目錄下導入,若是想在系統的何何一個地方都使用怎麼辦呢? 此時你就要把這個tab.py放到python全局環境變量目錄裏啦,基本通常都放在一個叫 Python/2.7/site-packages 目錄下,這個目錄在不一樣的OS裏放的位置不同,用 print(sys.path) 能夠查看python環境變量列表。

  

9、.pyc是個什麼鬼?

1. Python是一門解釋型語言?

我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。若是是解釋型語言,那麼生成的*.pyc文件是什麼呢?c應該是compiled的縮寫纔對啊!

爲了防止其餘學習Python的人也被這句話誤解,那麼咱們就在文中來澄清下這個問題,而且把一些基礎概念給理清。

  

2. 解釋型語言和編譯型語言 

計算機是不可以識別高級語言的,因此當咱們運行一個高級語言程序的時候,就須要一個「翻譯機」來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分紅兩類,第一種是編譯,第二種是解釋。

編譯型語言在程序執行以前,先會經過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不須要翻譯,而直接執行就能夠了。最典型的例子就是C語言。

解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,經過解釋器對程序逐行做出解釋,而後直接運行,最典型的例子是Ruby。

經過以上的例子,咱們能夠來總結一下解釋型語言和編譯型語言的優缺點,由於編譯型語言在程序運行以前就已經對程序作出了「翻譯」,因此在運行時就少掉了「翻譯」的過程,因此效率比較高。可是咱們也不能一律而論,一些解釋型語言也能夠經過解釋器的優化來在對程序作出翻譯時對整個程序作出優化,從而在效率上超過編譯型語言。

此外,隨着Java等基於虛擬機的語言的興起,咱們又不能把語言純粹地分紅解釋型和編譯型這兩種。

用Java來舉例,Java首先是經過編譯器編譯成字節碼文件,而後在運行時經過解釋器給解釋成機器文件。因此咱們說Java是一種先編譯後解釋的語言。

 

3. Python究竟是什麼 

其實Python和Java/C#同樣,也是一門基於虛擬機的語言,咱們先來從表面上簡單地瞭解一下Python程序的運行過程吧。

當咱們在命令行中輸入python hello.py時,實際上是激活了Python的「解釋器」,告訴「解釋器」:你要開始工做了。但是在「解釋」以前,其實執行的第一項工做和Java同樣,是編譯。

熟悉Java的同窗能夠想一下咱們在命令行中如何執行一個Java的程序:

javac hello.java

java hello

 

只是咱們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也同樣,當咱們執行python hello.py時,他也同樣執行了這麼一個過程,因此咱們應該這樣來描述Python,Python是一門先編譯後解釋的語言。

4. 簡述Python的運行過程

在說這個問題以前,咱們先來講兩個概念,PyCodeObject和pyc文件。

咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。咱們先簡單知道就能夠了,繼續向下看。

當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。

當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。

因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式。

10、數據類型初識 

一、數字

2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子。

int(整型)

  在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即-2147483648~2147483647
  在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(長整型)
  跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
  注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
float(浮點型)
  浮點數用來處理實數,即帶有小數的數字。相似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
  複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
 
二、布爾值
  真或假
  1 或 0
三、字符串
"hello world"
萬惡的字符串拼接:
  python中的字符串在C語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,萬惡的+號每出現一次就會在內從中從新開闢一塊空間。
字符串格式化輸出
1
2
3
4
name  =  "alex"
print  "i am %s "  %  name
  
#輸出: i am alex

PS: 字符串是 %s;整數 %d;浮點數%f

字符串經常使用功能:
  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片
四、列表
建立列表:
1
2
3
name_list  =  [ 'alex' 'seven' 'eric' ]
name_list =  list ([ 'alex' 'seven' 'eric' ])

基本操做:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 循環
  • 包含
五、元組(不可變列表)
建立元組:
1
2
3
ages  =  ( 11 22 33 44 55 )
ages  =  tuple (( 11 22 33 44 55 ))
 
六、字典(無序)
建立字典:
1
2
3
person  =  { "name" "mr.wu" 'age' 18 }
person  =  dict ({ "name" "mr.wu" 'age' 18 })

經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度

11、數據運算  

算數運算:

比較運算:

賦值運算:

邏輯運算:

成員運算:

身份運算:

位運算:

運算符優先級:

更多內容:猛擊這裏

12、流程控制

if...else      和   if....elif...elif..........else

需求1、用戶身份認證

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import  getpass
name  =  raw_input ( "請輸入用戶名:" )
pwd  =  raw_input ( "請輸入密碼:" )
if  name  = =  "tianshuai"  and  pwd  = =  "123" :
     print  "登陸成功"
else :
     print  "登陸失敗"

測試:

1
2
3
4
5
6
7
8
9
root@localhost#:  python guess.py
請輸入用戶名:Jason
請輸入密碼:
登陸成功
root@localhost#:python guess .py
請輸入用戶名:Jason
請輸入密碼:
登陸失敗
root@localhost#:

 

 

 for i in range(100)    and   for i in xrange(1,100)

需求1、猜數字遊戲

有3次機會,若是3次中沒有猜中給予提示,3次都沒有猜中,鼓勵!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import  random    #隨機模塊
rand_num  =  random.randrange( 10 )
  
for  in  range ( 3 ):
     guess_num  =  int ( raw_input ( "請猜想數字:" ))
     if  guess_num  = =  rand_num:
         print  "太棒了你猜對了"
         break
     elif  guess_num > rand_num:
         print  "你猜想的有點大了,請嘗試小點的數字"
     else :
         print  "你猜想的有點小了,請嘗試大點的數字"
else :
     print  "不要灰心,此次只是運氣很差,請下次嘗試"
  
print  "這個真正的數字是:%"  %  rand_num

輸出結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
root@localhost # python guess1.py
請猜想數字: 8
你猜想的有點大了,請嘗試小點的數字
請猜想數字: 7
你猜想的有點大了,請嘗試小點的數字
請猜想數字: 6
你猜想的有點大了,請嘗試小點的數字
不要灰心,此次只是運氣很差
r oot@localhsot # python guess1.py
請猜想數字: 5
太棒了你猜對了
這個真正的數字是: 5

十3、for and while循環

for loop

最簡單的循環10次

1
2
3
4
5
6
#_*_coding:utf-8_*_
__author__  =  'JasonWang'
 
 
for  in  range ( 10 ):
     print ( "loop:" , i )

輸出:

1
2
3
4
5
6
7
8
9
10
loop:  0
loop:  1
loop:  2
loop:  3
loop:  4
loop:  5
loop:  6
loop:  7
loop:  8
loop:  9

需求一:仍是上面的程序,可是遇到小於5的循環次數就不走了,直接跳入下一次循環

1
2
3
4
for  in  range ( 10 ):
     if  i< 5 :
         continue  #不往下走了,直接進入下一次循環
     print ( "loop:" , i )

需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出

1
2
3
4
for  in  range ( 10 ):
     if  i> 5 :
         break  #不往下走了,直接跳出整個循環
     print ( "loop:" , i )

 

while loop   

 有一種循環叫死循環,一經觸發,就運行個天荒地老、海枯石爛。

無限循環代碼

1
2
3
4
5
count  =  0
while  True :
     print ( "looping..." ,count)
     count  + = 1
    

 

其實除了時間,沒有什麼是永恆的,死loop仍是少寫爲好 

上面的代碼循環100次就退出吧

while 循環

他的原理是:當條件爲真的時候運行,當條件爲假的時候中止!

沒有一個規定次數,不設置條件永遠循環下去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import  time
count  =  0
while  True :
     count  + = 1
     print  "loop" ,count
     time.sleep( 3 )
#這個循環3秒鐘自+1 ,後無線循環只要這個條件爲」真「,就無限循環下去
那看下下面的例子
#!/usr/bin/env python
#-*- coding:utf-8 -*-
  
import  time
cout  =  0
  
while  cout <  3 :
     cout  + = 1
     print  "runnig" ,cout
     time.sleep( 3 )
      
#這個循環每3秒循環一次,當條件cout < 3的時候爲真(本身設置的條件),當cout 不小於3的時候爲假(false)中止。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
import  random
rand_num  =  random.randrange( 10 )
try_cout  =  0
  
while  try_cout <  3 :
     guess_num  =  int ( input ( "請輸入猜想的數字:" ))
     if  guess_num >  10 :
         print  "輸入的數字超出範圍了"
         continue
     if  guess_num  = =  rand_num:
         print  "哇!太棒了你猜對了"
         break
     elif  guess_num < rand_num:
         print  "你猜的數字有點小了,請嘗試大點的數字"
     else :
         print  "你猜的數字有點大了,請嘗試小點的數字"
  
     try_cout  + = 1
else :
     print  "不要灰心你,此次只是運氣很差,請下次嘗試"
print  "這個真正的數字是:%d"   %  rand_num
#當執行到guess_num> 10 若是你輸入的是大於10的數字那麼將會執行continue,就會跳出檔次循環,沒有執行try_cout +=1 因此沒有計數!

 

注:continue 是跳出當前循環,break是跳出整個循環!

有個需求,我想返回個人上層怎麼作,用標識位!以下面的例子:

 

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while  True :
     print  "我是第一層"
     while  True :
         print  "我是第二層"
         while  True :
             print  "我是第三層"

這就是個死循環,當執行到第三個循環的時候就無限循環,這裏有人回想,用break行不行,不行以下:

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
while  True :
     print  "我是第一層"
     break
     while  True :
         print  "我是第二層"
         break
         while  True :
             print  "我是第三層"
             break

這個的輸出結果:

1
2
root@localhost#  python jason.py
我是第一層

就只執行了第一個循環就跳出,不咱們想要的效果,那就用到「標誌位」了,工做中也有不少地方用到他:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
count  =  0
while  True :
     print  "我是第一層"
     jump_1_flag  =  False
     while  True :
         print  "我是第二層"
         jump_2_flag  =  False
         while  True :
             count  + =  1
             print  "我是第三層"     
             if  count >  3 :
                 jump_2_flag  =  True
                 break
         if  jump_2_flag:
             print  "第三層跳到我這裏來了,我也要跳到第一層"
             jump_1_flag  =  True
             break
          
     if  jump_1_flag:
         print  "第二層和第三層跳到第一層了,我也要跳"
         break
相關文章
相關標籤/搜索