python 流程控制
程式的流程分為三類 順序結構 從上到下依次執行 分支結構(通過if 判斷走哪條分支結構) 回圈結構(while 與for)
python分支結構
分支結構就是依據不同的判斷條件,根據條件的真偽,選擇不同的分支結構去執行
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("也不咋地")
你很優秀呀
改良一下代碼 通過用戶的input 自動判斷
a = int(input("請輸出你的成績:")) # 因為用戶輸入的是str型別 無法做大小對比用int()轉換為整型
if a > 80:
print("你很優秀呀")
else:
print("也不咋地")
請輸出你的成績:34
也不咋地
多個條件判斷
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 登陸成功
python回圈結構
回圈結構就是 重復執行某個代碼塊 知道不滿足條件后跳出,也就是那些重復性質的作業
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回圈
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='&&')
阿里巴巴
阿里 巴巴
阿里
巴巴
阿里
巴巴
阿里巴巴阿里&&巴巴&&
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/142970.html
標籤:其他
上一篇:5-python變數型別
