博文大綱:
- 一、Python條件判斷
- 二、Python的循環(huán)
- 三、循環(huán)的控制
- 四、Python的循環(huán)綜合示例
一、Python條件判斷
Python中的條件判斷語句有if語句,if雙分支、if多分支語句,其執(zhí)行過程與shell中的if語句完全一樣,只是語法有些差異,如下(文中所有的if語句執(zhí)行流程圖都是借鑒與shell中的):
注意:在Python中,關(guān)于代碼縮進(jìn)有嚴(yán)格的要求,Python是采用空格縮進(jìn)的方式表示一組語句,通常用4個空格表示一組語句(默認(rèn)會有4個空格縮進(jìn)),使我們在編寫代碼時減少代碼的工作量。
1、單分支if語句:
執(zhí)行過程:
單分支if語句示例:
money = 1000 #首先定義一個變量
if (money > 500): #測試條件是:如果money變量大于500,則條件成立,輸出下面的內(nèi)容
print '吃大餐' #輸出的內(nèi)容為吃大餐,該print語句就是if中的代碼塊,默認(rèn)print前面有4個空格
2、雙分支if語句:
執(zhí)行過程:
雙分支if語句示例:
money = 1000
if (money < 500):
print '吃大餐'
else:
print '吃土'
3、多分支if語句:
多分支if語句示例:
print '你還有多少錢?' #輸出提示信息
money = input() #定義一個變量,變量值是接受鍵盤輸入的值。
if (money > 500): #如果變量值大于500,則輸出“吃大餐”
print '吃大餐'
elif (money > 100): #如果變量值大于100,則輸出“吃蓋飯”
print '吃蓋飯'
else: #如果前面兩個條件都不成立,則輸出“吃土”
print '吃土'
4、使用if語句常見的問題:
問題(1): 使用if-elif-else語句時,容易出現(xiàn)邏輯錯誤,因為條件是從上往下判斷的,如果條件成立,那么下面的條件判斷就不執(zhí)行了,拿剛才的舉例來說,若將代碼寫成下面這個樣子:
print '你還有多少錢?' #輸出提示信息
money = input() #定義一個變量,變量值是接受鍵盤輸入的值。
if (money > 100): #如果變量值大于500,則輸出“吃大餐”
print '吃大餐'
elif (money > 500): #如果變量值大于100,則輸出“吃蓋飯”
print '吃蓋飯'
else: #如果前面兩個條件都不成立,則輸出“吃土”
print '吃土'
可以看出來會發(fā)生什么問題么?問題就是只要你輸入的值大于100,那么它就將輸出“吃蓋飯”,哪怕你輸入的是800,它也不會輸出“吃大餐”,因為第一個條件測試成立了,執(zhí)行完第一段代碼塊后,程序就直接跳出了這個if-elif-else語句,后面都不執(zhí)行了。
問題(2): if語句中語句塊沒有縮進(jìn)也是容易犯的錯誤,如下代碼編譯器會直接報錯:
money = 1000 #首先定義一個變量
if (money > 500):
print '吃大餐' #這一行語句沒有代碼塊,程序必定會報錯,不能正常運(yùn)行
還要保證同級語句縮進(jìn)空格的絕對一致,即使只有一個空格的差別,它們已經(jīng)表示不同的語句塊了,錯誤的示范如下:
money = 1000 #首先定義一個變量
if (money > 500):
print '吃大餐'
print '吃大餐' #多了一個空格
問題(3): 對于使用其他語言轉(zhuǎn)Python的朋友,由于習(xí)慣會經(jīng)常忘記條件測試后面的冒號(感覺是在說我自己),需要多多注意。
二、Python的循環(huán)
編寫程序時經(jīng)常有代碼需要重復(fù)運(yùn)行,Python提供了while和for進(jìn)行循環(huán)。
1、while循環(huán)
while循環(huán)可以根據(jù)條件進(jìn)行判斷,決定是否要循環(huán)執(zhí)行語句塊,語法如下:
while 循環(huán)語句:
循環(huán)操作語句
while語句的執(zhí)行流程如下:
循環(huán)條件后面也要使用冒號,然后縮進(jìn)寫循環(huán)操作語句,先判斷條件是否成立,如果為True,則執(zhí)行循環(huán)操作語句,如果為False,則跳出循環(huán)
i = 1 #定義一個變量
sum = 0 #定義一個變量
while i <= 3: #測試條件是變量“i”小于或等于3,則執(zhí)行下面循環(huán)體中的語句
print ('請輸入第%d個月的工資:' %i) #等待鍵盤輸入工資,并賦值給變量“i”
sum = sum + int(input()) #將上面鍵盤輸入的工資數(shù)和變量sum相加,并在賦值給變量sum
i = i + 1 #執(zhí)行一次變量“i”的值就+1。
#執(zhí)行至此,然后返回去再進(jìn)行判斷,變量“i”是否小于或等于3,如果是,則再執(zhí)行一遍循環(huán)語句;
#如果不是,則跳出循環(huán),執(zhí)行下面的語句
#注意,以下都沒有縮進(jìn)了,已經(jīng)不屬于while循環(huán)了
month = i - 1 #當(dāng)循環(huán)條件不成立時,“i”的值都已經(jīng)為4了,所以這里要減去1,并賦值給變量month
avg = sum / month #把3個月的工資總和除以月份,就是平均工資
print ('近%d個月的平均工資是%d' %(month,avg)) #輸出平均工資信息
#在上面的輸出語句中,“%d”表示將后面的%(month,avg)這兩個變量的值,依次賦值給語句中的兩個“%d”
執(zhí)行的結(jié)果如下:
請輸入第1個月的工資: #手動依次輸入進(jìn)三個月的工資
11000
請輸入第2個月的工資:
12000
請輸入第3個月的工資:
13000
近3個月的平均工資是12000 #最后的輸出結(jié)果,OK!沒問題。
字符串的格式化輸出介紹
在上面的腳本中,使用了字符串的格式化輸出,就是“%d”,字符串的格式化是將若干值插入帶有“%”替代符的字符串中,從而可以動態(tài)地輸出字符串,在上面的Python腳本中,字符串中的“%d”表示插入的是一個整型數(shù)據(jù),字符串后面的“%i”表示取的是變量“i”的值。
字符串格式化中可以使用的替代符除了“%d”,還有其他替代符,如下:
上面三種替換符的使用情況:
(1)每行字符串中單個替代符的使用:
#腳本如下:
num = 5
numstr = "五"
numF = 5.55
print ("第%d名"%num)
print ("第%s名"%numstr)
print ("第%f名"%numF)
#執(zhí)行結(jié)果如下:
第5名
第五名
第5.550000名
(2)字符串中還可以使用多個替代符,對應(yīng)的變量使用元組即可,示例如下:
#腳本如下:
first = 1
second = 2
print ("第%d名和第%d名"%(first,second))
#執(zhí)行結(jié)果如下:
第1名和第2名
使用多個替代符時,注意順序不要放錯,否則可能會出現(xiàn)類型不匹配的問題。
(3)還可以使用字典格式化多個值,如下:
#代碼如下:
num = {"first":1,"second":2} #定義一個字典
print ( "第%(second)d名和第%(first)d名"%num )
#執(zhí)行結(jié)果如下:
第2名和第1名
在上面代碼中,因為字典是無序的,所以使用字典時需要把鍵指出來,明確哪個位置要用到哪個鍵值。
while循環(huán)的嵌套使用
while循環(huán)可以嵌套使用,示例代碼如下:
#代碼如下:
j = 1
prompt = '請輸入員工姓名:'
while j <= 2:
sum = 0
i = 1
name = raw_input(prompt)
while i <= 3:
print '請輸入第%d月的工資:' %i
sum = sum +input()
i = i + 1
i = i - 1
avg = sum / i
print '%s的近%d個月的平均工資是:%d' %(name,i,avg)
#執(zhí)行結(jié)果如下:
請輸入員工姓名:張三
請輸入第1月的工資:
11000
請輸入第2月的工資:
12000
請輸入第3月的工資:
13000
張三的近3個月的平均工資是:12000
請輸入員工姓名:李四
請輸入第1月的工資:
7000
請輸入第2月的工資:
8000
請輸入第3月的工資:
9000
李四的近3個月的平均工資是:8000
員工平均工資計算完成!
在上面的代碼中,外層循環(huán)(第一個while語句)用于輸入員工姓名,用變量j控制循環(huán)的次數(shù),共2次;內(nèi)層循環(huán)(第二個while語句)用于輸入近三個月的工資,用變量i控制,也就是在外層循環(huán)輸入一個名字后,需要輸入3次月工資,然后輸出這個員工的平均工資,一共可以輸入兩個員工。第四行的代碼放在了外層循環(huán),是對sum變量做了清零,是因為每次輸入一個人的近三個月的成績后,sum都需要清零處理,以便計算下一個人的工資。如果不這樣,之前的sum值就會保存,程序就無法達(dá)到預(yù)期的目的。
2、for循環(huán)
for循環(huán)是另一種用于控制循環(huán)的方式,while是使用條件判斷執(zhí)行循環(huán),而for是使用遍歷元素的方式進(jìn)行循環(huán)。
(1)for循環(huán)的幾種方式
for的語法結(jié)構(gòu)如下:
for 變量 in 集合:
語句塊
常用的有以下幾種使用方式:
1) for循環(huán)可以對字符串進(jìn)行遍歷,逐個獲得字符串的每個字符,示例如下:
#代碼如下:
for letter in 'Python':
print 'Current letter:%s' %letter
#執(zhí)行結(jié)果如下:
Current letter:P
Current letter:y
Current letter:t
Current letter:h
Current letter:o
Current letter:n
上面的代碼中“for letter in 'Python' :”的作用是對“Python”字符串的字符逐個遍歷,把字符賦值給變量letter,然后執(zhí)行for對應(yīng)的語句塊,直到字符串取值完畢。看執(zhí)行結(jié)果就知道怎么回事咯,這里就不啰嗦了。
2) for循環(huán)可以對列表和元組進(jìn)行遍歷,如下:
#代碼如下:
Python = ['西瓜','蘋果','香蕉']
for letter in Python:
print letter
#執(zhí)行結(jié)果如下:
西瓜
蘋果
香蕉
語句“for letter in Python:”的作用就是遍歷列表中的元素,把元素賦值給letter,輸出語句每次輸出一個水果。
3) 需要循環(huán)操作的內(nèi)容相同時,可以用for循環(huán)結(jié)合range()函數(shù)使用,如下:
#代碼如下:
for i in range(0,5):
print '每天進(jìn)步一點點。'
#執(zhí)行結(jié)果如下:
每天進(jìn)步一點點。
每天進(jìn)步一點點。
每天進(jìn)步一點點。
每天進(jìn)步一點點。
每天進(jìn)步一點點。
range(0,5)輸出的是一個列表,由第一個參數(shù)0開始,默認(rèn)每次加1,當(dāng)大于或等于第二個參數(shù)時結(jié)束,所以列表中不包括第二個參數(shù)值。range()函數(shù)中還可以寫入第三個參數(shù),如:range(0,5,2),意思是每次加2,最后的列表值是“[0,2,4]”,所以range()函數(shù)的作用是創(chuàng)建一個數(shù)字列表,取值范圍是從起始數(shù)字開始到結(jié)束數(shù)字之前的內(nèi)容。for循環(huán)可以對列表進(jìn)行遍歷,所以可以針對range()函數(shù)的結(jié)果進(jìn)行遍歷。
4) for循環(huán)示例:
#代碼如下:
subjects = ('python','mysql','linux')
sum = 0
for i in subjects:
print '請輸入%s的測試成績:' %i
score = input()
sum +=score # 與sum = sum+score效果一樣
avg = sum / len(subjects)
print '張三的平均測試成績?yōu)?d' %avg
#執(zhí)行結(jié)果如下:
請輸入python的測試成績:
80
請輸入mysql的測試成績:
90
請輸入linux的測試成績:
100
張三的平均測試成績?yōu)?0
上面代碼的作用是接收3門課程的成績,計算輸出平均成績,使用for循環(huán)遍歷測試列表subjects,接受測試成績后使用sum累加,最后輸出平均成績。
5) for循環(huán)嵌套舉例
#代碼如下:
staffs = ['張三','李四']
months = ['1','3','5']
for staff in staffs:
sum = 0
for month in months:
print '請輸入%s的第%s個月的工資:' %(staff,month)
sum = sum + input()
avg = sum / len(months)
print '%s的平均工資是%d' %(staff,avg)
#執(zhí)行結(jié)果如下:
請輸入張三的第1個月的工資:
11000
請輸入張三的第3個月的工資:
12000
請輸入張三的第5個月的工資:
13000
張三的平均工資是12000
請輸入李四的第1個月的工資:
21000
請輸入李四的第3個月的工資:
22000
請輸入李四的第5個月的工資:
23000
李四的平均工資是22000
上面代碼中,第一次循環(huán)對員工姓名進(jìn)行了遍歷,第二層循環(huán)對所指定的月份進(jìn)行了遍歷。
6) 任何語言中都有邏輯表達(dá)式,它是用邏輯運(yùn)算符和變量連接起來的表達(dá)式,邏輯運(yùn)算符如下所示:
邏輯運(yùn)算符的使用舉例:
舉例1:
>>> print (not True)
False
>>> print (True and False)
False
>>> print (True or False)
True
舉例2:
>>> score = 180
>>> if (score < 0 or score > 100): #如果score小于0或大于100,那么就為真
print '成績錯誤,不能小于0或大于100'
成績錯誤,不能小于0或大于100
>>> if (not (score > 0 and score < 100)): #如果score不大于0并且不小于100,那么就為真。
print '成績錯誤,不能小于0或大于100'
成績錯誤,不能小于0或大于100
三、循環(huán)的控制
當(dāng)使用while和for做循環(huán)操作時,有時候需要改變循環(huán)的正常執(zhí)行順序,這時就需要用到循環(huán)控制語句實現(xiàn),循環(huán)控制語句有break和continue。
1、break(中斷)
當(dāng)循環(huán)的語句塊中有break語句時,可以跳出整個循環(huán),相當(dāng)于shell中的exit。示例如下:
#代碼如下:
staffs = ['張三','李四']
months = ['1','3','5']
for staff in staffs:
sum = 0
for month in months:
print '請輸入%s的第%s個月的工資:' %(staff,month)
score = input()
if (score < 0 or score > 50000):
print '輸入的工資要大于0或者小于50000,循環(huán)退出'
break; # break語句,跳出這個循環(huán)
sum += score
avg = sum / len(months)
print '%s的平均工資是%d' %(staff,avg)
#執(zhí)行結(jié)果如下:
請輸入張三的第1個月的工資:
50001 #輸入了一個比50000大的數(shù)字
輸入的工資要大于0或者小于50000,循環(huán)退出
張三的平均工資是0
請輸入李四的第1個月的工資:
2、continue(繼續(xù))
continue和break的區(qū)別在于:continue它不是結(jié)束整個循環(huán),而是跳過當(dāng)前一輪的循環(huán)體剩余語句,重置測試循環(huán)狀態(tài),準(zhǔn)備進(jìn)入下一輪循環(huán),如下:
#代碼如下:
staffs = ['張三','李四']
months = ['1','3','5']
for staff in staffs:
sum = 0
i = 0
while (i < len(months)):
print '請輸入%s的第%s個月的工資:' %(staff,months[i])
score = input()
if (score < 0 or score > 50000):
print '輸入的工資要大于0或者小于50000,請重新輸入。'
continue;
sum += score
i += 1
avg = sum / len(months)
print '%s的平均工資是%d' %(staff,avg)
#執(zhí)行結(jié)果如下:
請輸入張三的第1個月的工資:
50001
輸入的工資要大于0或者小于50000,請重新輸入。
請輸入張三的第1個月的工資:
30000
請輸入張三的第3個月的工資:
25000
請輸入張三的第5個月的工資:
60000
輸入的工資要大于0或者小于50000,請重新輸入。
請輸入張三的第5個月的工資:
20000
張三的平均工資是25000
請輸入李四的第1個月的工資:
在上面代碼中,第一層循環(huán)使用for循環(huán)遍歷員工,第二層使用while循環(huán)遍歷月份,使用continue是跳到離它最近的循環(huán)的下一輪,也就是第二層的while循環(huán),如果while中的if條件測試不成立,那么將執(zhí)行continue后,代碼中的“ i+=1 ”,并沒有執(zhí)行,就又重新執(zhí)行while循環(huán),所以再次調(diào)用時同樣的月份,以便重新輸入。這種方式在比較人性化。
四、Python的循環(huán)綜合示例
示例需求如下:
- 顯示操作的菜單,有3個選項,分別用字母N、E、Q表示;
- N表示輸入新的用戶名和密碼;
- E表示使用用戶名和密碼登錄;
- Q表示退出程序。
1、完整腳本如下所示:
#代碼如下:
kgc = {}
prompt = '''
(N) ew user login
(E) ntering user login
(Q)uit
Enter choice:'''
while True:
choice = raw_input(prompt).strip()[0].lower()
print '\n--You picked : [%s]' %choice
if choice not in 'neq':
print '--invalid option,try again--'
else:
if choice=='n':
prompt1 = 'login desired:'
while True:
name = raw_input(prompt1)
if(kgc.has_key(name)):
prompt1 = '--name taken,try another:'
continue
else:
pwd = raw_input('password:')
kgc[name] = pwd
break
elif choice =='e':
name = raw_input('login:')
pwd = raw_input('password:')
password = kgc.get(name)
if password == pwd:
print '--welcome back--',name
else:
print '--login incorrect--'
else:
print 'quit'
break
#執(zhí)行結(jié)果如下:
(N) ew user login
(E) ntering user login
(Q)uit
Enter choice:N
--You picked : [n]
login desired:張三
password:123
(N) ew user login
(E) ntering user login
(Q)uit
Enter choice:e
--You picked : [e]
login:張三
password:123
--welcome back-- 張三
(N) ew user login
(E) ntering user login
(Q)uit
Enter choice:q
--You picked : [q]
quit
>>>
2、解釋代碼的作用及含義:
kgc = {} #首先定義一個空字典,用于存放新建的用戶及密碼
prompt = ''' #這是一段提示信息,三引號表示若需要輸入多行內(nèi)容時使用。
(N) ew user login
(E) ntering user login
(Q)uit
Enter choice:'''
while True: #條件是永遠(yuǎn)為真
choice = raw_input(prompt).strip()[0].lower()
#上面一段是等待鍵盤輸入的字符串(n、q、e),strip()函數(shù)去掉字符串前后的空格,然后取第一個字符。
#函數(shù)lower()的作用是將字符變成小寫字母,為后面的條件判斷做準(zhǔn)備
print '\n--You picked : [%s]' %choice #換行輸出提示信息,提示你剛剛輸入的是什么。
if choice not in 'neq': #如果輸入的不是neq這三個字符其中之一
print '--invalid option,try again--' #那么輸出一段錯誤提示信息
else: #否則執(zhí)行下面的內(nèi)容
if choice=='n': #如果輸入的是“n”
prompt1 = 'login desired:' #定義一個提示信息的變量
while True: #進(jìn)行while循環(huán)
name = raw_input(prompt1) #等待鍵盤輸入用戶名,提示信息就是上面定義的prompt1變量
if(kgc.has_key(name)): #如果輸入的用戶名已存在字典中,
prompt1 = '--name taken,try another:' #重新定義一下提示信息的變量內(nèi)容
continue #然后執(zhí)行continue語句,重新進(jìn)行循環(huán)
else: #反之
pwd = raw_input('password:') #繼續(xù)輸入用戶的密碼
kgc[name] = pwd #然后將用戶名和密碼寫入字典中
break #while循環(huán)結(jié)束
elif choice =='e': #如果輸入的“e”
name = raw_input('login:') #那么等待鍵盤輸入用戶名,提示信息為“l(fā)ogin”
pwd = raw_input('password:') #等待鍵盤輸入密碼,raw_input()括號中的內(nèi)容時提示信息
password = kgc.get(name) #查詢字典中的用戶名對應(yīng)的密碼和輸入的密碼是否一致
if password == pwd: #如果一致
print '--welcome back--',name #則輸出歡迎信息
else: #反之
print '--login incorrect--' #輸出錯誤
else: #如果輸入的不是n也不是e,又在neq三個字符中,那么輸出的肯定是q了
print 'quit' #所以就退出咯
break #所以就退出咯
———————— 本文至此結(jié)束,感謝閱讀 ————————
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
