python 流程控制python
程序的流程分爲三類 順序結構 從上到下依次執行 分支結構(經過if 判斷走哪條分支結構) 循環結構(while 與for)python2.7
分支結構就是依據不一樣的判斷條件,根據條件的真假,選擇不一樣的分支結構去執行優化
if 條件1:# 若是條件1爲真 則執行代碼1 代碼1 #python用四個縮進表明一組代碼塊 elif 條件2:# 若是條件2爲真 則執行代碼2 代碼2 elif 條件3:# 若是條件3爲真 則執行代碼3 代碼3 ... else: #以上條件都不符合 執行代碼4 代碼4 ... #python的判斷 全部的數據類型都是轉換爲True 和False 布爾值類型
a= 89 if a > 80: print("你很優秀呀") else: print("也不咋地")
你很優秀呀code
改良一下代碼 經過用戶的input 自動判斷進程
a = int(input("請輸出你的成績:")) # 由於用戶輸入的是str類型 沒法作大小對比用int()轉換爲整型 if a > 80: print("你很優秀呀") else: print("也不咋地")
請輸出你的成績:34
也不咋地ip
多個條件判斷內存
a = int(input("請輸出你的成績:")) b = input("你以爲本身咋樣(通常/不錯):") if a >= 80 and b == "通常": print("你很優秀呀,也挺能裝") elif a >= 80 and b == "不錯": print("確實是這麼回事") elif a < 80 and b == "不錯": print("你可拉倒吧") else: print("哪裏涼快 哪裏呆着去")
請輸出你的成績:30
你以爲本身咋樣(通常/不錯):不錯
你可拉倒吧資源
name = input("請輸入有用戶名:").strip() #.strip 去掉字符串的'' passwd = input("請輸入密碼:").strip() if name == 'alin' and passwd == '12345': print("alin 登錄成功") else: print("用戶或密碼錯誤")
請輸入有用戶名:alin
請輸入密碼:12345
alin 登錄成功字符串
循環結構就是 重複執行某個代碼塊 知道不知足條件後跳出,也就是那些重複性質的工做input
while 條件1: #若是條件爲真 執行下面代碼塊 1 2 3 執行完一遍後再來檢查條件1 知足條件繼續執行知道不知足條件 跳出概循環 代碼1 代碼2 代碼3 ... print(".....")
只要知足條件1 就會一直執行代碼 1 2 3
while循環的應用場景
用戶身份認證 帳戶密碼登錄(不限制錯誤次數的)
name = 'alin' passwd = '12345' input_name = input("請輸入有用戶名:") input_passwd = input("請輸入密碼:") while True: if input_name == name and input_passwd == passwd: print("帳戶密碼正確登錄成功") else: print("用戶或密碼錯誤")
請輸入有用戶名:alin
請輸入密碼:12345
帳戶密碼正確登錄成功
帳戶密碼正確登錄成功
.......
上面這段代碼是一個死循環代碼 問題點有兩個
條件爲True while沒有推出 會一直執行循環下去,(具體循環什麼那?)
因爲用戶輸入的name passwd 在while循環外面 當咱們輸入一次後,後面的判斷不須要咱們再次輸入 若是輸入正確 頁面打印 帳戶密碼正確登錄成功 後,再次判斷不須要用戶再次輸入,
因此還會輸出 帳戶密碼正確登錄成功 這裏會一直判斷一直輸出這句話
若是輸入錯誤 頁面會也會一直打印 用戶或密碼錯誤
這種須要用戶I/0的死循環不會形成效率問題
while True: # 這種沒有i/o 純計算的死循環會把計算資源耗盡,帶來致命的效率問題 1=2=3=4 # while 1 比while True 效率快一些
修改代碼
退出循環的方式
把 while 的條件改成False 改完後還會循環一次 下次才能退出
break,只要運行到break就會馬上終止本層循環
while+break
name = 'alin' passwd = '12345' while True: input_name = input("請輸入有用戶名:") #把用戶輸入置於循環內,完成一個循環,第二個循環 須要用戶再次輸入 input_passwd = input("請輸入密碼:") if input_name == name and input_passwd == passwd: print("帳戶密碼正確登錄成功") break # 當用戶輸入正確,輸出 帳戶密碼正確登錄成功 後 推出這個循環 else: print("用戶或密碼錯誤")
請輸入有用戶名:alix
請輸入密碼:123456
用戶或密碼錯誤
請輸入有用戶名:alin
請輸入密碼:12345
帳戶密碼正確登錄成功
while 0: #break只會中斷本層的while循環 若是有多層 須要每層都配一個break while 0: while 0: while 0: break #四層 break #三層 break #二層 break #一層
一次所有退出全部循環的 ,能夠給全部while設置一個條件 把這個條件改成False 下次循環的時候 全部條件都不符合 退出全部循環,可是會在循環一次
咱們再加上一個循環次數的限制 限制用戶輸入次數 超過三次跳出循環
count = 3 # 設置一個次數3 name = 'alin' passwd = '12345' while count >= 1: # 原始count=3 因此count >=1的機會有三次 3 2 1 input_name = input("請輸入有用戶名:") input_passwd = input("請輸入密碼:") # 設置的帳戶密碼都是str字符串 不須要類型轉換 if input_name == name and input_passwd == passwd: print("帳戶密碼正確登錄成功") break #輸入正確後跳出循環 else: print("用戶或密碼錯誤") count -= 1 # 輸入錯誤後 count減 1 而後再去循環 print("感謝您的輸入")
請輸入有用戶名:qw
請輸入密碼:qw
用戶或密碼錯誤
請輸入有用戶名:qw
請輸入密碼:qw
用戶或密碼錯誤
請輸入有用戶名:qw
請輸入密碼:qw
用戶或密碼錯誤
感謝您的輸入
當有多個while循環的時候 退出每一個while循環都須要一個break
count = 3 # 設置一個次數3 name = 'alin' passwd = '12345' while count >= 1: #第一層while input_name = input("請輸入有用戶名:") input_passwd = input("請輸入密碼:") if input_name == name and input_passwd == passwd: #第一層if print("帳戶密碼正確登錄成功") while True: #第二層while a=input("請問本次服務滿意嗎(滿意/不滿意)") if a == '滿意': #第二層if print("感謝您的支持") break #對應第二曾if條件成立的狀況下退出第二層while else: print('咱們會持續改進的') break # 對應第二層else成立的狀況下退出第二層while break #對應第一層if成立 退出第一層while else: print("用戶或密碼錯誤") count -= 1
while+tag的方式
count = 3 # 設置一個次數3 name = 'alin' passwd = '12345' tag = True while tag: input_name = input("請輸入有用戶名:") input_passwd = input("請輸入密碼:") if input_name == name and input_passwd == passwd: print("帳戶密碼正確登錄成功") while tag: a = input("請問本次服務滿意嗎(滿意/不滿意)") if a == '滿意': print("感謝您的支持") tag = False else: print('咱們會持續改進的') tag = False tag = False else: print("用戶或密碼錯誤") count -= 1
請輸入有用戶名:alin
請輸入密碼:12345
帳戶密碼正確登錄成功
請問本次服務滿意嗎(滿意/不滿意)不滿意
咱們會持續改進的
while+ continue 結束本層循環continue後面的部分,下次循環繼續進程
num = 0 while num < 8: if num == 5: # 當num=5的時候不打印 全部if判斷要在print(num)前面執行 num += 1 # num +=1 要在continue前面執行,放在continue後面永遠不會執行,+=1後num才能跳到6 不然 num 一直等於5 一直在中斷中 沒法跳出if判斷 continue print(num) num += 1
0
1
2
3
4
6
7
while+else 當while正常結束完循環,不是被break掉的時候,else後面的代碼會執行
count = 0 # 設置一個次數3 name = 'alin' passwd = '12345' while count < 3: # 這隻錯誤次數爲3次 input_name = input("請輸入有用戶名:") input_passwd = input("請輸入密碼:") if input_name == name and input_passwd == passwd: print("帳戶密碼正確登錄成功") while True: a = input("請問本次服務滿意嗎(滿意/不滿意)") if a == '滿意': print("感謝您的支持") break else: # 當用戶密碼正確進入最裏層while循環對服務評價不滿意的時候會執行的else print('咱們會持續改進的') break break else: # if判斷 帳戶密碼不正確的時候會執行的else print("用戶或密碼錯誤") count += 1 else: print("用戶或密碼錯誤超過三次已推出循環") #最外面一層while不被break掉會執行的的else
應用場景 當我正確執行完while語句須要再次輸出的時候用 while + else語句
for循環的應用場景通常用於 列表 字典 元祖的循環取值上,用法要比while方便
for i in 循環體
代碼塊
......
list1 = [1, 2, 3, 4] #列表循環取值 for x in list1: print(x) list2 = {'va1': 'test1', 'va2': 'test2', 'va3': 'test3'} #字典循環取值 for y in list2: print(list2[y]) #默認取出來的是鍵
list1 = ['a', 'b', 'c', 'd'] #while取值 列表 比for循環麻煩不少 a = 0 while a < 4: print(list1[a]) a += 1
while是條件循環 知足條件會一直循環 不知足就跳出循環
for是取值循環,循環次數取決於後面循環體的字符個數
wel = "hello,world" for i in wel: print(i) #打印字符串的時候 空格 標點 也是一個字符
h
e
l
l
o
,
w
o
r
l
d
當咱們循環不少次的時候 ,後面單獨寫循環體的話 循環體會很是的長,python提供了range的變量,方便前面使用取值
一下爲python2.7演示
在python2中使用 range 生成的列表就是一個列表,能夠直接查看,可是若是列表很大,就會佔用不少內存空間
range(10) #循環幾回就寫幾 從零開始
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1,9) # 不會取到9
[1, 2, 3, 4, 5, 6, 7, 8]
range(1,9,3) # 3爲步長 也就是上一個值+多少是下一個值 默認是1
[1, 4, 7] #1 1+3=4 4+3=7
在python3裏對range作了優化,若是申請一個range(10),python3給你的是一個能夠生成range(10)的功能,而不是一個列表,這樣對內存進行了優化,隨取隨生成。
range(10)
range(0, 10)
range(1,10,2)
range(1, 10, 2)
name = 'alin' pwd = '12345' for i in range(3): input_name = input("請輸入有用戶名:") input_passwd = input("請輸入密碼:") if input_name == name and input_passwd == pwd: print("帳戶密碼正確登錄成功") break else: print("用戶或密碼錯誤超過三次已退出循環")
請輸入有用戶名:alin
請輸入密碼:12345
帳戶密碼正確登錄成功
循環三次後登出 並打印 用戶或密碼錯誤超過三次已退出循環
for+break
for+else
與while一致 能夠參考上面
for i in range(3): print('第一層循環', i)#外循環一次 內循環所有循環 for j in range(3): print('第二層循環', j)
第一層循環 0
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
第一層循環 1
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
第一層循環 2
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
for i in range(3): if i == 2: continue print('第一層循環', i) for j in range(3): print('阿里巴巴是個快樂的青年', j)
第一層循環 0
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
第一層循環 1
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
終止for循環 用break
for i in range(3): if i == 2: break print('第一層循環', i) for j in range(3): print('阿里巴巴是個快樂的青年', j)
第一層循環 0
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
第一層循環 1
阿里巴巴是個快樂的青年 0
阿里巴巴是個快樂的青年 1
阿里巴巴是個快樂的青年 2
關於print
print('阿里巴巴') print('阿里', '巴巴') # ,在print中至關於空格的做用 print('阿里') #print 默認自帶換行符\n 是隱藏看不到的 print('巴巴') print('阿里\n') # 當咱們在原有換行符的基礎上再加一個換行符,就多出來一行空格 print('巴巴') print('阿里', end='') #end='' 就等於默認換行符爲空 這樣就不回換行了 print('巴巴', end='') print('阿里', end='&&') # 換行符改成&& print('巴巴', end='&&')
阿里巴巴
阿里 巴巴
阿里
巴巴
阿里
巴巴 阿里巴巴阿里&&巴巴&&