一篇文章快速入門python數據分析——零基礎
什麼是Python
Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。
Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年。
像Perl語言一樣, Python 源代碼同樣遵循 GPL(GNU General PublicLicense)協議。
為什麼使用Python做數據科學
許許多多的人(包括我自己)都很容易愛上Python這門語言。自從1991年誕生以來,Python現在已經成為最受歡迎的動態編程語言之一,其他還有Perl、Ruby等。由於擁有大量的Web框架(比如Rails(Ruby)和Django(Python)),最近幾年非常流行使用Python和Ruby進行網站建設工作。這些語言常被稱作腳本(scripting)語言,因為它們可以用於編寫簡短而粗糙的小程序(也就是腳本)。我個人並不喜歡「腳本語言」這個術語,因為它好像在說這些語言無法用於構建嚴謹的軟體。在眾多解釋型語言中,Python最大的特點是擁有一個巨大而活躍的科學計算(scientificcomputing)社區。進入21世紀以來,在行業應用和學術研究中採用Python進行科學計算的勢頭越來越猛。
在數據分析和交互、探索性計算以及數據可視化等方面,Python將不可避免地接近於其他開源和商業的領域特定編程語言/工具,如R、MATLAB、SAS、Stata等。近年來,由於Python有不斷改良的庫(主要是pandas),使其成為數據處理任務的一大替代方案。結合其在通用編程方面的強大實力,我們完全可以只使用Python這一種語言去構建以數據為中心的應用程序。
python環境搭建
這裡只針對科學計算和數據相關業務環境儘可能簡單快速地搭建環境。
Anaconda概述
Anaconda是一個用於科學計算的Python發行版,支持 Linux, Mac, Windows系統,提供了包管理與環境管理的功能,可以很方便地解決多版本python並存、切換以及各種第三方包安裝問題。Anaconda利用工具/命令conda來進行package和environment的管理,並且已經包含了Python和相關的配套工具。
這裡先解釋下conda、anaconda這些概念的差別。conda可以理解為一個工具,也是一個可執行命令,其核心功能是包管理與環境管理。包管理與pip的使用類似,環境管理則允許用戶方便地安裝不同版本的python並可以快速切換。Anaconda則是一個打包的集合,裡面預裝好了conda、某個版本的python、眾多packages、科學計算工具等等,所以也稱為Python的一種發行版。其實還有Miniconda,顧名思義,它只包含最基本的內容——python與conda,以及相關的必須依賴項,對於空間要求嚴格的用戶,Miniconda是一種選擇。
進入下文之前,說明一下conda的設計理念——conda將幾乎所有的工具、第三方包都當做package對待,甚至包括python和conda自身!因此,conda打破了包管理與環境管理的約束,能非常方便地安裝各種版本python、各種package並方便地切換。
Anaconda的安裝
Anaconda的下載頁參見官網下載,Linux、Mac、Windows均支持。
Anaconda鏡像使用幫助
Anaconda安裝包可以到https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下載。
TUNA還提供了 Anaconda 倉庫的鏡像,運行以下命令:
conda config --add channelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --setshow_channel_urls yes
即可添加 Anaconda Python 免費倉庫。
運行condainstall numpy測試一下吧。
Anaconda內置的數學工具
使用Python 交互模式
命令行
lcmd
Hello world
IPython
是一個互動式計算系統。主要包含三個組件:增加的互動式 「Python shell」,解耦的雙過程通信模型,互動式並行計算的架構。支持變數自動補全。
ljupyter
Jupyter
Jupyter Notebook(此前被稱為 IPythonnotebook)是一個互動式筆記本,支持運行 40 多種編程語言。
Jupyter Notebook的本質是一個 Web 應用程序,便於創建和共享文學化程序文檔,支持實時代碼,數學方程,可視化和markdown。用途包括:數據清理和轉換,數值模擬,統計建模,機器學習等等。
IPython3.x版本是IPython釋放的最後版本了。現在由於IPython新增特性的增加,IPython 4.0及以後版本歸於項目Jupyter。IPython作為Jupyter的內核存在。也就是說,現在我們需要安裝的就是Jupyter。
Python | IPython/Jupyter搭建最佳交互環境
方法/步驟
1.我們使用pip來安裝Jupyter。輸入安裝命令pipinstall jupyter即可,大約需要幾十秒鐘就可以完成安裝。
2.Python |如何用pip安裝模塊和包
Python | IPython/Jupyter搭建最佳交互環境
3.安裝完成後,我們可在如下目錄找到jupyter-notebook這個應用
Python | IPython/Jupyter搭建最佳交互環境
4.雙擊打開。這時候會彈出瀏覽器窗口和notebook窗口。
Python | IPython/Jupyter搭建最佳交互環境
5.點擊右邊的新建按鈕,選擇Python版本,就可以新建一個腳本環境了。
Python |IPython/Jupyter搭建最佳交互環境
6.輸入代碼,點擊運行就可以執行代碼並看到運行結果。
ython |IPython/Jupyter搭建最佳交互環境
7.運行的腳本狀態可以在主界面查看。腳本文件存在本地位置。
Python | IPython/Jupyter搭建最佳交互環境
Python | IPython/Jupyter搭建最佳交互環境
使用IDE
集成開發環境(IDE,IntegratedDevelopment Environment )是用於提供程序開發環境的應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面等工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟體服務套。所有具備這一特性的軟體或者軟體套(組)都可以叫集成開發環境。
vim
文本編輯器
spyder
Spyder是Python(x,y)的作者為它開發的一個簡單的集成開發環境。和其他的Python開發環境相比,它最大的優點就是模仿MATLAB的「工作空間」的功能,可以很方便地觀察和修改數組的值。
Spyder的界面由許多窗格構成,用戶可以根據自己的喜好調整它們的位置和大小。當多個窗格出現在一個區域時,將使用標籤頁的形式顯示。例如在圖1中,可以看到「Editor」、「Objectinspector」、「Variable explorer」、「Fileexplorer」、「Console」、「Historylog」以及兩個顯示圖像的窗格。在View菜單中可以設置是否顯示這些窗格。
語法基礎
第一個Python3.x程序
對於大多數程序語言,第一個入門編程代碼便是"HelloWorld!",以下代碼為使用Python輸出"Hello World!":
實例(Python 3.0+)
#!/usr/bin/python3print("Hello, World!");
你可以將以上代碼保存在hello.py文件中並使用python命令執行該腳本文件。
$ python3hello.py
以上命令輸出結果為:
Hello,World!
python保留字
保留字即關鍵字,我們不能把它們用作任何標識符名稱。Python 的標準庫提供了一個 keyword 模塊,可以輸出當前版本的所有關鍵字:
>>>importkeyword
>>>keyword.kwlist["False","None","True","and","as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","nonlocal","not","or","pass","raise","return","try","while","with","yield"]
注釋
Python中單行注釋以#開頭,實例如下:
#!/usr/bin/python3#第一個注釋
print("Hello,Python!")#第二個注釋
執行以上代碼,輸出結果為:
Hello,Python!
多行注釋可以用多個 # 號:
#!/usr/bin/python3#第一個注釋# 第二個注釋
print("Hello,Python!")
執行以上代碼,輸出結果為:
Hello,Python!
行與縮進
python最具特色的就是使用縮進來表示代碼塊,不需要使用大括弧({})。
縮進的空格數是可變的,但是同一個代碼塊的語句必須包含相同的縮進空格數。實例如下:
ifTrue:
print("True")
else:
print("False")
以下代碼最後一行語句縮進數的空格數不一致,會導致運行錯誤:
ifTrue:
print("Answer")
print("True")
else:
print("Answer")
print("False")#縮進不一致,會導致運行錯誤
以上程序由於縮進不一致,執行後會出現類似以下錯誤:
File"test.py",line6print("False")#縮進不一致,會導致運行錯誤^IndentationError:unindent doesnotmatch any outer indentation level
數據類型
python中數有四種類型:整數、長整數、浮點數和複數。
l整數, 如 1
l長整數 是比較大的整數
l浮點數 如 1.23、3E-2
l複數 如 1 + 2j、 1.1 + 2.2j
字元串
lpython中單引號和雙引號使用完全相同。
l使用三引號("""或""")可以指定一個多行字元串。
l轉義符 ""
l自然字元串, 通過在字元串前加r或R。 如 r"thisis a line with
" 則
會顯示,並不是換行。
lpython允許處理unicode字元串,加前綴u或U,如 u"this is an unicode string"。
l字元串是不可變的。
l按字面意義級聯字元串,如"this " "is " "string"會被自動轉換為this is string。
word="字元串"
sentence="這是一個句子。"
paragraph="""這是一個段落, 可以由多行組成"""
空行
函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也用一行空行分隔,以突出函數入口的開始。
空行與代碼縮進不同,空行並不是Python語法的一部分。書寫時不插入空行,Python解釋器運行也不會出錯。但是空行的作用在於分隔兩段不同功能或含義的代碼,便於日後代碼的維護或重構。
記住:空行也是程序代碼的一部分。
Python3基本數據類型
Python中的變數不需要聲明。每個變數在使用前都必須賦值,變數賦值以後該變數才會被創建。
在 Python 中,變數就是變數,它沒有類型,我們所說的"類型"是變數所指的內存中對象的類型。
等號(=)用來給變數賦值。
等號(=)運算符左邊是一個變數名,等號(=)運算符右邊是存儲在變數中的值。例如:
實例(Python 3.0+)
#!/usr/bin/python3
counter=100#整型變數
miles=1000.0#浮點型變數
name="runoob"#字元串
print(counter)
print(miles)
print(name)
執行以上程序會輸出如下結果:
1001000.0runoob
多個變數賦值
Python允許你同時為多個變數賦值。例如:
a=b=c=1
以上實例,創建一個整型對象,值為1,三個變數被分配到相同的內存空間上。
您也可以為多個對象指定多個變數。例如:
a,b,c=1,2,"runoob"
以上實例,兩個整型對象 1 和 2 的分配給變數 a 和 b,字元串對象 "runoob" 分配給變數 c。
標準數據類型
Python3中有六個標準的數據類型:
lNumber(數字)
lString(字元串)
lList(列表)
lTuple(元組)
lSets(集合)
lDictionary(字典)
Number(數字)
Python3支持int、float、bool、complex(複數)。
在Python 3里,只有一種整數類型 int,表示為長整型,沒有 python2 中的 Long。
像大多數語言一樣,數值類型的賦值和計算都是很直觀的。
內置的 type() 函數可以用來查詢變數所指的對象類型。
>>>a,b,c,d=20,5.5,True,4+3j
>>>print(type(a),type(b),type(c),type(d))
此外還可以用 isinstance 來判斷:
實例
>>>isinstance(a,int)True
isinstance和 type 的區別在於:
classA:
pass
classB(A):
pass
isinstance(A(),A)# returns True
type(A())==A# returns True
isinstance(B(),A)# returns True
type(B())==A# returns False
區別就是:
ltype()不會認為子類是一種父類類型。
lisinstance()會認為子類是一種父類類型。
注意:在 Python2 中是沒有布爾型的,它用數字 0 表示 False,用 1 表示 True。到 Python3 中,把True 和 False 定義成關鍵字了,但它們的值還是 1 和 0,它們可以和數字相加。
當你指定一個值時,Number 對象就會被創建:
var1=1var2=10
您也可以使用del語句刪除一些對象引用。
del語句的語法是:
delvar1[,var2[,var3[....,varN]]]]
您可以通過使用del語句刪除單個或多個對象。例如:
delvardelvar_a,var_b
數值運算
實例
>>>5+4#加法9
>>>4.3-2#減法2.3
>>>3*7#乘法21
>>>2/4#除法,得到一個浮點數0.5
>>>2//4#除法,得到一個整數
>>>17%3#取餘2
>>>2**5#乘方32
注意:
l1、Python可以同時為多個變數賦值,如a, b = 1, 2。
l2、一個變數可以通過賦值指向不同類型的對象。
l3、數值的除法(/)總是返回一個浮點數,要獲取整數使用//操作符。
l4、在混合計算時,Python會把整型轉換成為浮點數。
數值類型實例
Python還支持複數,複數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示, 複數的實部a和虛部b都是浮點型
String(字元串)
Python中的字元串用單引號(")或雙引號(")括起來,同時使用反斜杠()轉義特殊字元。
字元串的截取的語法格式如下:
變數[頭下標:尾下標]
索引值以 0 為開始值,-1 為從末尾的開始位置。
加號 (+) 是字元串的連接符,星號 (*) 表示複製當前字元串,緊跟的數字為複製的次數。實例如下:
實例
#!/usr/bin/python3
str="Runoob"print(str)#輸出字元串
print(str[:-1])#輸出第一個到倒數第二個的所有字元
print(str[])#輸出字元串第一個字元
print(str[2:5])#輸出從第三個開始到第五個的字元
print(str[2:])#輸出從第三個開始的後的所有字元
print(str*2)#輸出字元串兩次
print(str+"TEST")#連接字元串
執行以上程序會輸出如下結果:
RunoobRunooR noo noobRunoobRunoobRunoobTEST
Python使用反斜杠()轉義特殊字元,如果你不想讓反斜杠發生轉義,可以在字元串前面添加一個 r,表示原始字元串:
>>>print("Ru
oob")
Ruoob
>>>print(r"Ru
oob")
Ru
oob
另外,反斜杠()可以作為續行符,表示下一行是上一行的延續。也可以使用"""..."""或者"""..."""跨越多行。
注意,Python 沒有單獨的字元類型,一個字元就是長度為1的字元串。
實例
>>>word="Python"
>>>print(word[],word[5])
Pn
>>>print(word[-1],word[-6])
nP
與 C 字元串不同的是,Python 字元串不能被改變。向一個索引位置賦值,比如word[0] = "m"會導致錯誤。
注意:
l1、反斜杠可以用來轉義,使用r可以讓反斜杠不發生轉義。
l2、字元串可以用+運算符連接在一起,用*運算符重複。
l3、Python中的字元串有兩種索引方式,從左往右以0開始,從右往左以-1開始。
l4、Python中的字元串不能改變。
List(列表)
List(列表) 是 Python 中使用最頻繁的數據類型。
列表可以完成大多數集合類的數據結構實現。列表中元素的類型可以不相同,它支持數字,字元串甚至可以包含列表(所謂嵌套)。
列表是寫在方括弧([])之間、用逗號分隔開的元素列表。
和字元串一樣,列表同樣可以被索引和截取,列表被截取後返回一個包含所需元素的新列表。
列表截取的語法格式如下:
變數[頭下標:尾下標]
索引值以 0 為開始值,-1 為從末尾的開始位置。
加號(+)是列表連接運算符,星號(*)是重複操作。如下實例:
實例
#!/usr/bin/python3
list=["abcd",786,2.23,"runoob",70.2]
tinylist=[123,"runoob"]
print(list)#輸出完整列表
print(list[])#輸出列表第一個元素
print(list[1:3])#從第二個開始輸出到第三個元素
print(list[2:])#輸出從第三個元素開始的所有元素
print(tinylist*2)#輸出兩次列表
print(list+tinylist)#連接列表
以上實例輸出結果:
["abcd",786,2.23,"runoob",70.2]abcd[786,2.23][2.23,"runoob",70.2][123,"runoob",123,"runoob"]["abcd",786,2.23,"runoob",70.2,123,"runoob"]
與Python字元串不一樣的是,列表中的元素是可以改變的:
實例
>>>a=[1,2,3,4,5,6]
>>>a[2:5]=[13,14,15]
>>>a[9,2,13,14,15,6]
>>>a[2:5]=[]#刪除
>>>a[9,2,6]
List內置了有很多方法,例如append()、pop()等等,這在後面會講到。
注意:
l1、List寫在方括弧之間,元素用逗號隔開。
l2、和字元串一樣,list可以被索引和切片。
l3、List可以使用+操作符進行拼接。
l4、List中的元素是可以改變的。
Tuple(元組)
元組(tuple)與列表類似,不同之處在於元組的元素不能修改。元組寫在小括弧(())里,元素之間用逗號隔開。
元組中的元素類型也可以不相同:
實例
#!/usr/bin/python3
tuple=("abcd",786,2.23,"runoob",70.2)
tinytuple=(123,"runoob")
print(tuple)#輸出完整元組
print(tuple[])#輸出元組的第一個元素
print(tuple[1:3])#輸出從第二個元素開始到第三個元素
print(tuple[2:])#輸出從第三個元素開始的所有元素
print(tinytuple*2)#輸出兩次元組
print(tuple+tinytuple)#連接元組
以上實例輸出結果:
("abcd",786,2.23,"runoob",70.2)abcd(786,2.23)(2.23,"runoob",70.2)(123,"runoob",123,"runoob")("abcd",786,2.23,"runoob",70.2,123,"runoob")
元組與字元串類似,可以被索引且下標索引從0開始,-1 為從末尾開始的位置。也可以進行截取(看上面,這裡不再贅述)。
其實,可以把字元串看作一種特殊的元組。
實例
>>>tup=(1,2,3,4,5,6)
>>>print(tup[])
1
>>>print(tup[1:5])
(2,3,4,5)
>>>tup[]=11#修改元組元素的操作是非法的
Traceback(mostrecentcalllast):File"",line1,inTypeError:"tuple"objectdoesnotsupportitemassignment>>>
雖然tuple的元素不可改變,但它可以包含可變的對象,比如list列表。
構造包含 0 個或 1 個元素的元組比較特殊,所以有一些額外的語法規則:
tup1=()#空元組tup2=(20,)#一個元素,需要在元素後添加逗號
string、list和tuple都屬於sequence(序列)。
注意:
l1、與字元串一樣,元組的元素不能修改。
l2、元組也可以被索引和切片,方法一樣。
l3、注意構造包含0或1個元素的元組的特殊語法規則。
l4、元組也可以使用+操作符進行拼接。
Set(集合)
集合(set)是一個無序不重複元素的序列。
基本功能是進行成員關係測試和刪除重複元素。
可以使用大括弧{ }或者set()函數創建集合,注意:創建一個空集合必須用set()而不是{ },因為{ }是用來創建一個空字典。
實例
#!/usr/bin/python3
student= {"Tom","Jim","Mary","Tom","Jack","Rose"}
print(student)#輸出集合,重複的元素被自動去掉# 成員測試
if("Rose"instudent):
print("Rose在集合中")
else:
print("Rose不在集合中")# set可以進行集合運算
a=set("abracadabra")
b=set("alacazam")
print(a)
print(a-b)# a和b的差集
print(a|b)# a和b的並集
print(a&b)# a和b的交集
print(a^b)# a和b中不同時存在的元素
以上實例輸出結果:
{"Mary","Jim","Rose","Jack","Tom"}Rose在集合中{"b","a","c","r","d"}{"b","d","r"}{"l","r","a","c","z","m","b","d"}{"a","c"}{"l","r","z","m","b","d"}
Dictionary(字典)
字典(dictionary)是Python中另一個非常有用的內置數據類型。
列表是有序的對象結合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
字典是一種映射類型,字典用"{}"標識,它是一個無序的鍵(key) : 值(value)對集合。
鍵(key)必須使用不可變類型。
在同一個字典中,鍵(key)必須是唯一的。
實例
#!/usr/bin/python3
dict= {}
dict["one"]="1 -菜鳥教程"
dict[2]="2 -菜鳥工具"
print(dict["one"])#輸出鍵為"one" 的值
print(dict[2])#輸出鍵為 2 的值
print(tinydict)#輸出完整的字典
print(tinydict.keys())#輸出所有鍵
print(tinydict.values())#輸出所有值
以上實例輸出結果:
構造函數 dict() 可以直接從鍵值對序列中構建字典如下:
實例
>>>dict([("Runoob",1),("Google",2),("Taobao",3)])
{"Taobao":3,"Runoob":1,"Google":2}
>>> {x:x**2forxin(2,4,6)}
{2:4,4:16,6:36}
>>>dict(Runoob=1,Google=2,Taobao=3)
{"Taobao":3,"Runoob":1,"Google":2}
另外,字典類型也有一些內置的函數,例如clear()、keys()、values()等。
注意:
l1、字典是一種映射類型,它的元素是鍵值對。
l2、字典的關鍵字必須為不可變類型,且不能重複。
l3、創建空字典使用{ }。
Python數據類型轉換
有時候,我們需要對數據內置的類型進行轉換,數據類型的轉換,你只需要將數據類型作為函數名即可。
以下幾個內置的函數可以執行數據類型之間的轉換。這些函數返回一個新的對象,表示轉換的值。
條件控制
Python條件語句是通過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。
可以通過下圖來簡單了解條件語句的執行過程:
if-condition.jpg
if語句
Python中if語句的一般形式如下所示:
ifcondition_1:
statement_block_1
elifcondition_2:
statement_block_2
else:
statement_block_3
l如果 "condition_1" 為 True 將執行 "statement_block_1" 塊語句
l如果 "condition_1" 為False,將判斷 "condition_2"
l如果"condition_2" 為 True 將執行 "statement_block_2" 塊語句
l如果 "condition_2" 為False,將執行"statement_block_3"塊語句
Python中用elif代替了else if,所以if語句的關鍵字為:if – elif – else。
注意:
l1、每個條件後面要使用冒號(:),表示接下來是滿足條件後要執行的語句塊。
l2、使用縮進來劃分語句塊,相同縮進數的語句在一起組成一個語句塊。
l3、在Python中沒有switch – case語句。
實例
以下是一個簡單的 if 實例:
實例
#!/usr/bin/python3
var1=100
ifvar1
:print("1 - if表達式條件為 true")
print(var1)var2=ifvar2:
print("2 - if表達式條件為true")
print(var2)
print("Good bye!")
執行以上代碼,輸出結果為:
1- if表達式條件為 true 100 Good bye!
從結果可以看到由於變數 var2 為0,所以對應的 if 內的語句沒有執行。
以下實例演示了狗的年齡計算判斷:
實例
#!/usr/bin/python3
age=int(input("請輸入你家狗狗的年齡:"))
print("")
print("你是在逗我吧!")
elifage==1:
print("相當於 14 歲的人。")
elifage==2:
print("相當於 22 歲的人。")
elifage>2:
human=22+(age-2)*5
print("對應人類年齡:",human)###退出提示
input("點擊 enter 鍵退出")
將以上腳本保存在dog.py文件中,並執行該腳本:
$python3 dog.py請輸入你家狗狗的年齡: 1 相當於 14 歲的人。 點擊 enter 鍵退出
以下為if中常用的操作運算符:
實例
#!/usr/bin/python3#程序演示了 == 操作符# 使用數字
print(5==6)#使用變數
x=5
y=8
print(x==y)
以上實例輸出結果:
FalseFalse
high_low.py文件演示了數字的比較運算:
實例
#!/usr/bin/python3 #該實例演示了數字猜謎遊戲
number=7
guess= -1
print("數字猜謎遊戲!")
whileguess!=number:
guess=int(input("請輸入你猜的數字:"))
ifguess==number:
print("恭喜,你猜對了!")
elifguess
print("猜的數字小了...")
elifguess>number:
print("猜的數字大了...")
執行以上腳本,實例輸出結果如下:
$python3 high_low.py數字猜謎遊戲! 請輸入你猜的數字:1 猜的數字小了...請輸入你猜的數字:9 猜的數字大了... 請輸入你猜的數字:7 恭喜,你猜對了!
if嵌套
在嵌套 if 語句中,可以把 if...elif...else 結構放在另外一個 if...elif...else 結構中。
if表達式1: 語句 if 表達式2: 語句 elif 表達式3: 語句 else: 語句 elif 表達式4: 語句 else: 語句
實例
# !/usr/bin/python3
num=int(input("輸入一個數字:"))
ifnum%2==:
ifnum%3==:
print("你輸入的數字可以整除 2 和 3")
else:
print("你輸入的數字可以整除 2,但不能整除 3")
else:
ifnum%3==:
print("你輸入的數字可以整除 3,但不能整除 2")
else:
print("你輸入的數字不能整除 2 和 3")
將以上程序保存到 test_if.py 文件中,執行後輸出結果為:
$python3 test.py輸入一個數字:6 你輸入的數字可以整除 2 和 3
循環語句
本章節將為大家介紹Python循環語句的使用。
Python中的循環語句有 for 和 while。
Python循環語句的控制結構圖如下所示:
while_loop_1.png
while循環
Python中while語句的一般形式:
while判斷條件: 語句
同樣需要注意冒號和縮進。另外,在Python中沒有do..while循環。
以下實例使用了 while 來計算 1 到 100 的總和:
實例
#!/usr/bin/env python3
n=100
sum=
counter=1
whilecounter
sum=sum+counter
counter+=1
print("1到 %d 之和為: %d"%(n,sum))
執行結果如下:
1到 100 之和為: 5050
無限循環
我們可以通過設置條件表達式永遠不為false 來實現無限循環,實例如下:
實例
#!/usr/bin/python3
var=1
whilevar==1:#表達式永遠為 true
num=int(input("輸入一個數字 :"))
print("你輸入的數字是:",num)
print("Good bye!")
執行以上腳本,輸出結果如下:
輸入一個數字 :5 你輸入的數字是: 5 輸入一個數字 :
你可以使用CTRL+C來退出當前的無限循環。
無限循環在伺服器上客戶端的實時請求非常有用。
while循環使用 else 語句
在 while … else 在條件語句為 false 時執行 else 的語句塊:
實例
#!/usr/bin/python3
count=
whilecount
:print(count,"小於 5")
count=count+1
else:
print(count,"大於或等於 5")
執行以上腳本,輸出結果如下:
小於 51 小於 5 2 小於 5 3 小於 5 4 小於 5 5 大於或等於 5
簡單語句組
類似if語句的語法,如果你的while循環體中只有一條語句,你可以將該語句與while寫在同一行中, 如下所示:
實例
#!/usr/bin/pythonflag=1while(flag):print("歡迎訪問菜鳥教程!")print("Good bye!")
注意:以上的無限循環你可以使用 CTRL+C 來中斷循環。
執行以上腳本,輸出結果如下:
for語句
Python for循環可以遍歷任何序列的項目,如一個列表或者一個字元串。
for循環的一般格式如下:
forin:
else:
Python loop循環實例:
實例
>>>languages=["C","C++","Perl","Python"]
>>>forxinlanguages:
...print(x)
...CC++PerlPython
以下 for 實例中使用了 break 語句,break 語句用於跳出當前循環體:
實例
#!/usr/bin/python3
sites=["Baidu","Google","Runoob","Taobao"]
forsiteinsites:
ifsite=="Runoob":
print("菜鳥教程!")
break
print("循環數據"+site)
else:
print("沒有循環數據!")print("完成循環!")
執行腳本後,在循環到"Runoob"時會跳出循環體:
循環數據 Baidu 循環數據 Google 菜鳥教程! 完成循環!
range()函數
如果你需要遍曆數字序列,可以使用內置range()函數。它會生成數列,例如:
實例
>>>foriinrange(5):
...print(i)
...01234
你也可以使用range指定區間的值:
實例
>>>foriinrange(5,9):
print(i)
也可以使range以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做"步長"):
實例
>>>foriinrange(,10,3):
print(i)
負數:
實例
>>>foriinrange(-10, -100, -30):print(i)-10-40-70>>>
您可以結合range()和len()函數以遍歷一個序列的索引,如下所示:
實例
>>>a=["Google","Baidu","Runoob","Taobao","QQ"]>>>foriinrange(len(a)): ...print(i,a[i])...Google1Baidu2Runoob3Taobao4QQ>>>
還可以使用range()函數來創建一個列表:
實例
>>>list(range(5))[,1,2,3,4]>>>
break和continue語句及循環中的else子句
break語句可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中終止,任何對應的循環 else 塊將不執行。 實例如下:
實例
#!/usr/bin/python3
forletterin"Runoob":#第一個實例
ifletter=="b":
break
print("當前字母為 :",letter)
var=10#第二個實例
whilevar>:
print("當期變數值為 :",var)
var=var-1
ifvar==5:
break
print("Good bye!")
執行以上腳本輸出結果為:
當前字母為 : R 當前字母為 : u 當前字母為: n 當前字母為 : o 當前字母為 : o 當期變數值為 : 10 當期變數值為 : 9 當期變數值為 : 8 當期變數值為 : 7 當期變數值為 : 6 Good bye!
continue語句被用來告訴Python跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環。
實例
#!/usr/bin/python3
forletterin"Runoob":
#第一個實例
ifletter=="o":
#字母為 o 時跳過輸出
continue
print("當前字母 :",letter)
var=10#第二個實例
whilevar>:
var=var-1
ifvar==5:#變數為 5 時跳過輸出
continue
print("當前變數值 :",var)
print("Good bye!")
執行以上腳本輸出結果為:
當前字母 : R 當前字母 : u 當前字母 :n 當前字母 : b 當前變數值 : 9 當前變數值 : 8 當前變數值 : 7 當前變數值: 6 當前變數值 : 4 當前變數值 : 3 當前變數值 : 2 當前變數值 : 1 當前變數值: 0 Good bye!
循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變為 false (以while循環)導致循環終止時被執行,但循環被break終止時不執行。
如下實例用於查詢質數的循環例子:
實例
#!/usr/bin/python3
forninrange(2,10):
forxinrange(2,n):
ifn%x==:
print(n,"等於",x,"*",n//x)
break
else:
#循環中沒有找到元素
print(n,"是質數")
執行以上腳本輸出結果為:
2是質數3 是質數 4 等於 2 * 2 5 是質數 6 等於 2 * 3 7 是質數 8 等於 2 * 4 9 等於 3 * 3
pass語句
Python pass是空語句,是為了保持程序結構的完整性。
pass不做任何事情,一般用做佔位語句,如下實例
實例
>>>whileTrue:
...pass#等待鍵盤中斷(Ctrl+C)
最小的類:
實例
>>>classMyEmptyClass:
...pass
以下實例在字母為 o 時 執行 pass 語句塊:
實例
#!/usr/bin/python3
forletterin"Runoob":
ifletter=="o":
pass
print("執行 pass 塊")
print("當前字母 :",letter)
print("Good bye!")
執行以上腳本輸出結果為:
當前字母 : R 當前字母 : u 當前字母 :n 執行 pass 塊 當前字母 : o 執行 pass 塊 當前字母 : o 當前字母 : b Good bye!
TAG:catt人工智慧 |