Python 專題二 條件語句和迴圈語句的基礎知識

Python 專題二 條件語句和迴圈語句的基礎知識

前面講述了”專題一.函式的基礎知識“,而這篇文章講述的Python的條件語句和迴圈語句的基礎知識.主要內容包括:

1.條件語句:包括單分支、雙分支和多分支語句,if-elif-else

2.迴圈語句:while的使用及簡單網路刷博器爬蟲

3.迴圈語句:for的使用及遍歷列表、元組、檔案和字串

前言: 語句塊

在講訴條件語句、迴圈語句和其他語句之前,先來補充語句塊知識.(前面講函式時已經用到過)

語句塊並非一種語句,它是在條件為真(條件語句)時執行或執行多次(迴圈語句)的一組語句.在程式碼前放置空格或tab字元來縮排語句即可建立語句塊.很多語言特殊單詞或字元(如begin或{)來表示一個語句塊的開始,用另外的單詞或字元(如end或})來表示語句塊的結束.

而在Python中使用冒號(:)來標識語句塊的開始,塊中每一個語句都是縮排的(縮排量相同).當回退到和已經閉合的塊一樣的縮排量時,就表示當前塊已經結束.

一. 條件語句if

if分支語句表示式基本型別常見的有一下三種:

1.單分支語句

它的基本格式是:


if condition:
statement
statement

需要注意的是Ptthon中if條件語句條件無需圓括號(),條件後面需要新增冒號,它沒有花括號{}而是使用TAB實現區分.其中condition條件判斷通常有布林表示式(True|False 0-假|1-真 非0即真)、關係表示式(>= <= == !=)和邏輯運算表示式(and or not).

2.雙分支語句

它的基本格式是:


if condition:
statement
statement
else:
statement
statement

3.多分支語句

if多分支由if-elif-else組成,其中elif相當於else if,同時它可以使用多個if的巢狀.具體程式碼如下所示:


#雙分支if-else 
count = input("please input:") 
print 'count=',count 
if count>80: 
print 'lager than 80' 
else: 
print 'lower than 80' 
print 'End if-else' 
#多分支if-elif-else 
number = input("please input:") 
print 'number=',number 
if number>=90: 
print 'A' 
elif number>=80: 
print 'B' 
elif number>=70: 
print 'C' 
elif number>=60: 
print 'D' 
else: 
print 'No pass' 
print 'End if-elif-else' 
#條件判斷 
sex = raw_input("plz input your sex:") 
if sex=='male' or sex=='m' or sex=='man': 
print 'Man' 
else: 
print 'Woman' 

二. 迴圈語句while

while迴圈語句的基本格式如下:


while condition:
statement
statement
else:
statement
statement

其中判斷條件語句condition可以為布林表示式、關係表示式和邏輯表示式,else可以省略(此處列出為與C語言等區別).舉個例子:


#迴圈while計數1 2 .. 100 
i = 1 
s = 0 
while i <= 100: 
s = s i 
i = i 1 
else: 
print 'exit while' 
print 'sum = ',s 
''''' 
輸出結果為:exit while 
sum = 5050 
''' 

它的輸出結果為5050,當時當i加到101時,由於i>100將執行else語句.

需要注意的是Python中使用井號(#)表示行註釋,使用三引號(”’…”’)表示多行註釋.區別於C/C 的//行註釋和/**/多行註釋.

下面講述一段程式碼刷博器爬蟲,先給出程式碼再講解:


import webbrowser as web 
import time 
import os 
i=0 
while i<5: 
web.open_new_tab('http://andy111.blog.sohu.com/46684846.html') 
i=i 1 
time.sleep(0.8) 
else: 
os.system('taskkill /F /IM iexplore.exe') 
print 'close IE' 

在搜狐部落格或新浪部落格中只要在新視窗開啟就會增加瀏覽訪問次數,所以上面的程式碼主要是通過呼叫webbrowser瀏覽器的open_new_tab開啟新的視窗,而CSDN不行(估計繫結使用者或ip有關).

上面程式碼中windoes命令taskkill的作用是殺掉應用程式IE瀏覽器,在DOS中輸入”taskkill /F /IM iexplore.exe”可以強行關閉應用程式(chrome.exe或qq.exe),其中/F表示強行終止程式,/IM表示影象.在該程式中主要的作用是清除記憶體,防止記憶體消耗太大出現宕機現象;但是需要呼叫import os的system()函式開啟,而Linux下用kill命令(kill -pid或killall)終止程序.

程式碼中time.sleep(seconds)表示”Delay execution for a given number of seconds.”,從開啟到載入有一定時間.

當你需要大量增加瀏覽量時可以使用兩層迴圈巢狀,每次開啟5個網頁在關閉在執行100次,這樣你的記憶體也不會因為消耗太大出現宕機現象,也可以使用import random count=random.randint(20,40)產生20到40隨機數來執行外層迴圈.程式碼比較簡單,主要是想通過它介紹些Python的基礎知識.但是初次開啟IE瀏覽器會出現開啟次數不一致的錯誤.why?

三. 迴圈語句for

該迴圈語句的基礎格式為:


for target in sequences:
statements

target表示變數名,sequences表示序列,常見型別有list(列表)、tuple(元組)、strings(字串)和files(檔案).

Python的for沒有體現出迴圈的次數,不像C語言的for(i=0;i<10;i )中i迴圈計數,Python的for指每次從序列sequences裡面的資料項取值放到target裡,取完即結束,取多少次迴圈多少次.其中in為成員資格運算子,檢查一個值是否在序列中.同樣可以使用break和continue跳出迴圈.

1.字串迴圈


s1 = 'Eastmount of CSDN' 
for c in s1: 
print c, 

注意:如果在print結尾加上逗號,那麼接下來語句會與前一條語句在同一行列印.故上面輸出顯示一行.

2.列表迴圈


list1 = [1,3,4,5,'x',12.5] 
i = 0 
for val in list1: 
print format(i,'2d'),val 
i = i 1 
else: 
print 'out for' 

注意:列表List由一堆資料用逗號間隔,方括號括起,可以是同型別也可以是不同型別.format(i,’2d’)相當於輸出兩位,不足的補空格.當輸出0-9時顯示”口0″,而輸出10-99時顯示”10″實現對其功能.輸出結果如下:


1 3 
2 4 
3 5 
4 x 
5 12.5 
ut for 

因為迭代(迴圈另一種說法)某範圍的數字是很常用的,所以有個內建的範圍函式range供使用.列表中for n in [1,2,3,4,5,6,7,8]相當於listNum=range(1,9).其格式”range(start, stop[, step]) -> list of integers”,它的工作方式類似於分片,它包含下限(本例range(1,9)中為1),但不包含上限(本例中9),如果希望下限為0,可以只提供上限如range(4)=[0,1,2,3].

產生1到100的數字range(1,101),輸出1到100的奇數range(1,101,2),輸出1到100的偶數range(2,101,2).

3.元組迴圈


tup = (1,2,3,4,5) 
for n in tup: 
print n 
else: 
print 'End for' 

元組tuple每個資料項不可修改,只可讀,而序列list[1,2,3,4]可以修改.

4.檔案迴圈

help(file.read)返回一個字串.”read([size]) -> read at most size bytes, returned as a string.”

help(file.readlines)返回一個列表.”readlines([size]) -> list of strings, each a line from the file.”相當於讀n行,由n次readline組成,讀出的字串構成列表.

help(file.readline)從某個檔案讀一行.”readline([size]) -> next line from the file, as a string.”


#檔案迴圈遍歷三種對比 
for n in open('for.py','r').read(): 
print n, 
print 'End' 
for n in open('for.py','r').readlines(): 
print n, 
print 'End' 
for n in open('for.py','r').readline(): 
print n, 
print 'End' 

輸出顯示:


#第一個read()輸出:每個字元間有個空格 
s 1 = ' E a s t m o u n t o f C S D N ' 
f o r c i n s 1 : 
.... 
End 
#第二個readlines()輸出:讀取的是一行 
s1 = 'Eastmount of CSDN' 
for c in s1: 
.... 
End 
#第三個readline()輸出:讀取for.py檔案第一行並輸出 
s 1 = ' E a s t m o u n t o f C S D N ' 
End 

如果需要檔案輸出也可以通過下面程式碼實現,使用w會覆蓋而a 是追加功能,後面講檔案詳細敘述.


for r in open('test.txt','r').readlines():
open('test.txt','a ').write(c)

PS:我主要是通過《Python基礎教程》和”51CTO學院 智普教育的python視訊”學習.所以文中引用了很多視訊中的知識、書籍知識和自己的知識,感謝那些作者和老師,希望文章對大家有所幫助,才開始學習python知識,如果文章中有錯誤或不足之處,還請海涵,也希望大家提出意見與君共勉.勿噴~