6-python 流程控制

python 流程控制python

程序的流程分爲三類 順序結構 從上到下依次執行 分支結構(經過if 判斷走哪條分支結構) 循環結構(while 與for)python2.7

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("也不咋地")

你很優秀呀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 登錄成功字符串

python循環結構

循環結構就是 重複執行某個代碼塊 知道不知足條件後跳出,也就是那些重複性質的工做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
帳戶密碼正確登錄成功

帳戶密碼正確登錄成功

.......

上面這段代碼是一個死循環代碼 問題點有兩個

  1. 條件爲True while沒有推出 會一直執行循環下去,(具體循環什麼那?)

  2. 因爲用戶輸入的name passwd 在while循環外面 當咱們輸入一次後,後面的判斷不須要咱們再次輸入 若是輸入正確 頁面打印 帳戶密碼正確登錄成功 後,再次判斷不須要用戶再次輸入,

    因此還會輸出 帳戶密碼正確登錄成功 這裏會一直判斷一直輸出這句話

    若是輸入錯誤 頁面會也會一直打印 用戶或密碼錯誤

    這種須要用戶I/0的死循環不會形成效率問題

    while True:  # 這種沒有i/o 純計算的死循環會把計算資源耗盡,帶來致命的效率問題 
    	1=2=3=4  # while 1 比while True 效率快一些

    修改代碼

    退出循環的方式

    1. 把 while 的條件改成False 改完後還會循環一次 下次才能退出

    2. 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='&&')

阿里巴巴
阿里 巴巴
阿里
巴巴
阿里

巴巴 阿里巴巴阿里&&巴巴&&

相關文章
相關標籤/搜索