python 循環(六)
轉自http://www.cnblogs.com/mangood/p/6026141.html
一、while循環
如果條件成立(true),重復執行相同操作,條件不符合,跳出循環
while 循環條件:
循環操作
(1)while循環示例
例:輸入王曉明5門課程的考試成績,計算平均成績
1 i=1 # 初始化循環計數器i 2 sum=0 # 初始化總成績變量 3 while i<=5: # 從i為1開始到5,重復執行一共5次接受考試成績、求和的操作 4 print (‘請輸入第%d門課程的考試成績‘%i) # 提示用戶輸入成績,其中用到了格式化輸出,%d的取值隨i的值顯示,第1門課程,第2門課程…… 5 sum=sum+input() # 把用戶輸入的成績賦值給sum,最後保存著5次成績的和 6 i=i+1 # 每次循環 i 都自增1,直到大於5跳出循環 7 avg=sum/(i-1) # 當第五次執行完i=i+1時,i為6,跳出循環,計算出sum/(i-1)的值就是平均值,並賦值給avg 8 print (‘王曉明5門課程的平均成績是%d‘%avg) # 格式化輸出avg的值,由於用了%d所以計算出的%avg的數值有小數也會省去,接收整數部分
(2)嵌套while循環示例
外部循環滿足條件後,執行代碼開始執行內部循環,等內部循環全部執行完畢,如果還滿足外部循環條件,則外部循環再次執行,依次類推,直到跳出外層循環。
例:分別輸入兩個學生的5門成績,並分別計算平均成績
1 j=1 # 定義外部循環計數器初始值 2 prompt=‘請輸入學生姓名‘ # 定義字符串變量,在用戶輸入時調用此變量可以減少敲漢字的麻煩 3 while j<=2: # 定義外部循環為執行兩次 4 sum=0 # 定義成績初始值,之所以定義在這裏,是為了當第二個學生輸入成績時可以讓sum初始化為0,重新接收新學生的成績和 5 i=1 # 定義內部循環計數器初始值 6 name = raw_input(prompt) # 接收用戶輸入的學生姓名,賦值給name變量 7 while i<=5: # 定義內部函數循環5次,就是接收5門課程的成績 8 print (‘請輸入第%d門的考試成績: ‘%i) #提示用戶輸入成績,其中用到了格式化輸出,%d的取值隨i的值顯示,第1門課程,第2門課程…… 9 sum= sum + input() # 接收用戶輸入的成績,賦值給sum 10 i+=1 # i變量自增1,i變為2,繼續執行循環,直到i等於6時,跳出循環 11 avg=sum/(i-1) # 計算第一個學生的平均成績 sum/(6-1),賦值給avg 12 print name,‘的平均成績是%d\n‘%avg # 輸出學生成績平均值 13 j=j+1 # 內部循環執行完畢後,外部循環計數器j自增1,變為2,再進行外部循環 14 print ‘學生成績輸入完成!‘ # 外部循環結束,提示輸入完成!
二、for循環
(1)使用for語句可以遍歷全部元素,例如逐個輸出字符串中的字符,逐個輸出列表中的元素,元組中的元素,集合中的元素(註意賦值時各元素的順序),字典中的鍵……
for letter in ‘Python‘: print letter 結果: P y t h o n
fruits=[‘西瓜‘,‘水蜜桃‘,‘葡萄‘] for fruit in fruits: print fruit 結果: 西瓜 水蜜桃 葡萄
(2)重復執行相同操作
使用range()函數創建一個數字列表
取值範圍:從起始數字開始到結束數字之前
1 for i in range(0,5): #依次把0到4保存在變量i中 2 print ‘Mr.Mangood最酷!‘ 3 4 結果: 5 Mr.Mangood最酷! 6 Mr.Mangood最酷! 7 Mr.Mangood最酷! 8 Mr.Mangood最酷! 9 Mr.Mangood最酷!
輸入王曉明的三門考試成績,並算出平均值
1 subjects=(‘linux系統‘,‘Mysql數據庫‘,‘Python語言‘) # 定義一個元組,三個元素代表三門課程 2 sum=0 # 定義變量num為初始化成績分數 3 for i in subjects: # 把元組裏的每一個元素依次賦值給i,一共有三次 4 print ‘請輸入%s的考試成績‘%i # 提示輸入成績,運用了格式化字符串功能,用i每次取得的元素名表達出成績名字,%s的意思是字符串 5 score = input() # 接收用戶輸入的成績賦值給score 6 sum += score # 把成績賦給sum,相當於sum = sum + score 7 avg= sum / len(subjects) # 跳出for循環後,計算平均值,這裏用函數len()來計算變量subjects的長度,因為subjects定義為一個元組,因此長度即為元素個數3 8 print ‘王曉明的平均成績為%d‘%avg # 輸出平均成績 9 10 結果: 11 請輸入linux系統的考試成績 12 87 13 請輸入Mysql數據庫的考試成績 14 78 15 請輸入Python語言的考試成績 16 90 17 王曉明的平均成績為85
(3)嵌套for循環
輸入黃曉鳴、楊影2位同學,每人三門課程的考試成績,計算平均成績
1 student = (23‘黃曉鳴‘,‘楊影‘) #定義學生姓名的元組 2 subjects=(‘linux系統‘,‘Mysql數據庫‘,‘Python語言‘) #定義課程名字的元組 3 for j in student: #把j依次取兩名學生的值進行兩次循環 4 sum=0 #初始化成績的值 5 print ‘%s同學的考試成績‘%j #打印出標題 6 for i in subjects: #定義課程循環 7 print ‘請輸入%s的考試成績‘%i #提示輸入其中一名學生的考試成績 8 score = input() #接收考試成績賦值給score 9 if score<0 or score>100: #判斷分數取值範圍,做提醒 10 print ‘註意成績大小‘ 11 sum+=score #每次輸入成績後,sum值都累加 12 avg= sum/len(subjects) #求出平均成績 13 print j,‘的平均成績是%d\n‘%avg #打印平均成績 14 print‘完成學生成績錄入工作‘ #提示完成工作
三、循環控制
循環控制語句可以改變循環正常的執行順序
循環控制語句
break語句:跳出本次循環(嵌套循環中只跳出一層循環)
continue語句:跳過當前一輪循環體的剩余語句,重新測試循環狀態,進入下一輪循環,比如循環的次數一共有5次,第四次遇到continue了,那麽不繼續執行了,直接進行第5次循環判斷
四、循環控制綜合案例
1、需求分析
顯示菜單
(N)ew User Login
(E)ntering User Login
(Q)uit
Enter choice:
註:輸入字母N,接收新的登錄名和密碼,保存在字典中
輸入字母E,接收登錄名、密碼、查找、匹配用戶輸入是否正確
輸入字母Q,退出
2、執行步驟
(1)編制菜單
(2)使用while語句實現菜單項選擇-外層循環
(3)使用while語句接收新的登錄名-內層循環
(4)使用if語句判斷菜單,執行相關操作
3、代碼架構圖
4、具體代碼
1 db={} 2 prompt=‘‘‘ 3 (N)ew user login 4 (E)ntering user login 5 (Q)uit 6 Enter choice:‘‘‘ 7 while True: 8 choice = raw_input(prompt).strip()[0].lower() #讀取控制臺輸入的字符串,去除其首尾多余的空格後,將第一個字符串轉換為小寫字母 9 print ‘\n--You picked:[%s]‘%choice 10 if choice not in ‘neq‘: 11 print ‘--invaild option:,try again--‘ 12 else: 13 if choice == ‘n‘: 14 prompt1 = ‘--login desired:‘ 15 while True: 16 name = raw_input(prompt1) 17 if db.has_key(name): #判斷字典裏的鍵值是否已經有輸入的name值,如果有的話觸發continue重新執行while循環,因為觸發continue前prompt1被重新定義了,所以執行了新的name = raw_input(prompt1) 18 prompt1 = ‘--name taken,try another: ‘ 19 continue 20 else: 21 break 22 pwd = raw_input(‘password:‘) #驗證字典中的鍵沒有輸入的name值後,跳出循環,把用戶輸入的密碼賦值給pwd 23 db[name] = pwd #把值傳給字典db中的name鍵實現字典數據的完善 24 elif choice == ‘e‘: 25 name = raw_input("login:") 26 pwd = raw_input(‘password:‘) 27 password = db.get(name) #登錄時,接收用戶輸入的登錄名和密碼後,把字典db中name鍵的值賦給password 28 if password == pwd: #比較字典中的密碼password和用戶輸入的密碼pwd是否一致 29 print ‘welcome‘,name 30 else: 31 print ‘shibai‘ 32 else: 33 print ‘quit!‘ 34 break 35
python 循環(六)