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

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