第五章 流程控制

柠檬の夏天發表於2024-04-29

1. if 判斷

1.1 單項分支

if 條件表示式:
    code1
    code2
# 當條件表示式成立,返回True,執行對應的程式碼塊

zhiye = "程式設計師"
if zhiye == "程式設計師":
    print("拿高新")
    print("錢多,話少,死的早")
    print("髮量日漸稀少")

1.2 雙項分支

"""
if 條件表示式
    code1 
else:
    code2
    
如果條件表示式成立,返回True,執行if這個區間的程式碼塊
如果條件表示式不成立,返回False,執行else這個區間的程式碼塊
if  分支的程式碼塊也叫做真區間
else 分支的程式碼塊也叫做假區間
"""

# 模擬網站登入
# 如果admin = xiaoming 密碼:password = 111 顯示登入成功,否則顯示登入失敗
admin = input("請輸入賬號:")
password  = input("請輸入密碼:")
if admin == "xiaoming" and password == "111":
    print("登入成功")
    
else:
    print("登入失敗")      

1.3 多項分支

"""
if 條件表示式1:
    code1
    
elif 條件表示式2:
     code2
     
elif 條件表示式3:
     code3
     
else:
    code4
    
如果條件表示式1成立,執行對應的分支code1,反之判斷條件表示式2是否成立    
如果條件表示式2成立,執行對應的分支code2,反之判斷條件表示式3是否成立    
如果條件表示式3成立,執行對應的分支code3,如果不成立,直接走else分支,到此程式執行完畢  

 elif 可以是0個 或者多個
 else 可以是0個 或者一個
"""


youqian = True
youfang = True
youche = True
if youqian == True:
    print("說明這個人很有實力")
elif youfang == True:
    print("能交個朋友嗎")
elif youche == True:
    print("開了雅迪艾瑪電動車我們碰一碰吧")  
else:
    print("你還是去做美團騎手吧")

1.4 巢狀分支

# 單項分支,雙向分支,多項分支的互相巢狀結合
youqian = False
youfang = False
youche = False
youyanzhi = True
youtili == True
if youqian == True:
    if youfang == True
        if youche == True:
            if youyanzhi == True:
                if youtili == True:
                    print("我要嫁給你")
                else:
                    print("你去吃點大腰子再來~")
            else:
                print("你去一下泰國+韓國,整整容")
else:
    print("你是個好人吶~")

2.while 迴圈

""" 
特點:減少冗餘程式碼,提升程式碼效率

語法:
while 條件表示式
    code1
(1)初始化一個變數
(2)寫上迴圈的條件
(3)自增自減的值
"""

2.1 while練習

# (1) 列印1~100
i = 1
while i <= 100:
    print(i)
    i += 1


# (2) 1~100的累加和
i = 1
total = 0
while i <= 100:
     total += 1
     i += 1
print(total)


# (3)用死迴圈的方法實現1~100累加和
i = 1
total = 0
sign = True
while sign:
    total += i
    i += 1
    if i == 101:
       sign = False
print(total)


# (4) 列印一行十個小星星*
"""
# help 檢視某個方法的文件
# help(print)
# end='' 列印時,尾部預設不加換行
"""
i = 0
while i < 10:
    print("*",end='')
    i += 1
print()


# (5) 九九乘法表
# 正向列印
i = 1
while i <= 9:
    j = 1
    while j <=i:
        print("%d*%d=%2d " %(i,j,i*j),end="")
        j += 1   
    print()
    i += 1


# 反向列印
i = 9
while i >= 1:
    j = 1
    while j <=i:
        print("%d*%d=%2d " %(i,j,i*j),end="")
        j += 1
    print()
    i -= 1


# (6)求吉利數字100~999之間找111 222 333 123 456 654 321...
"""
// 可以獲取一個數高位
%  可以獲取一個數低位
"""

# 方法1
i = 100
while i <= 999:
    baiwei = i //100
    shiwei = i //10%10
    gewei = i % 10
    print(gewei)
    
    if shiwei == gewei and shiwei == baiwei:
        print(i)
    # 123
    elif shiwei == gewei -1 and shiwei == baiwei +1:
        print(i)
    # 987
    elif shiwei == gewei + 1 and shiwei == baiwei -1:
        print(i)
    i += 1
    
    

# 方法2
i  = 100
while i<= 999:
    strvar = str(i)
    gewei = int(strvar[-1])
    shiwei = int(strvar[1])
    baiwei = int(strvar[0])
    if shiwei == gewei and shiwei == baiwei:
        print(i)
    # 123
    elif shiwei == gewei - 1 and shiwei == baiwei +1:
        print(i)
    # 987
    elif shiwei == gewei +1 and shiwei == baiwei -1:
        print(i)
    i+=1

3.for迴圈

# 遍歷 迴圈 迭代 ,把容器中的元素一個一個獲取出來

# while迴圈在遍歷資料時的侷限性
"""
lst = [1,2,3,4,5]
i = 0
while i <len(lst):
    print(lst[i])
    i +=1
    


# for迴圈的基本語法
Iterable 可迭代資料:容器型別資料 range物件 迭代器
for 變數 in Iterable:
    code1

# 字串
count = "北京天氣很好"
for i in count:
    print(i)


# 列表
count = [1,2,3,"中","22"]
for i in count:
    print(i)


# 元組
for i in count:
    print(i)


# 集合
for i in count:
    print(i)


# 字典 (迴圈的是字典的鍵)
for i in count:
    print(i)
"""

# 1.遍歷不等長多級容器
"""
cont = [1, 2, 3, 4, ("大", "567"), {"jw", "type", "iok"}]
for i in cont:
    # 判斷當前元素是否是容器,如果是,進行二次遍歷,如果不是,直接列印
    if isinstance(i, tuple):
        #
        for j in i:
            # 判斷當前元素是否是集合,如果是,進行三次遍歷,如果不是,直接列印
            if isinstance(j, set):
                for k in j:
                    print(K)
            else:
                print(j)
    # 列印資料
    else:
        print(i)
"""


# 2.遍歷不等長多級容器
container = [("小", "大", "知道"), ("大學", "新思想", "屬性"), ("sww",)]
for i in container:
    for j in i:
        print(j)
        
 
 
 # 3.遍歷等長的容器
cont = [("馬雲","小馬哥","馬化騰"),["王思聰","王健林","馬保國"],{"王寶強","馬蓉","宋小寶"}]

for a,b,c in cont:
    for j in a,b,c:
        print(j)

# ### range物件
"""
range(開始值,結束值,步長)
取頭舍尾,結束值本身獲取不到,獲取到它之前的那一個資料

"""

# range(一個值)
for i in range(5): #0~4
    print(i)
    
    
# range(二個值)
for i in range(3,8):
    print(i)
    
    
# range(三個值) 正向的從左到右
for i in range(1,11,3):
    print(i)
    
    
# range(三個值) 正向的從右到到
for i in range(10,0,-1):
    print(i)
    
   
    
"""
while  一般用於處理複雜的邏輯關係
for    一般用於迭代資料
"""

# 九九乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print("%d*%d=%2d  " %(i,j,i*j),end="")
    print()    

4.關鍵字

# ### 關鍵字的使用 pass break continue
# pass過(佔位用)

if  20 == 20:
    pass
    
while True:
    pass
    
# break 終止當前迴圈
# 1~10 遇到5終止迴圈
i =1
while i <= 10:
    print(i)
    if i == 5:
        break
    i +=1
    

i = 1
while i<=3:
    j = 1
    while j <=3:
        if j == 2:
            break
        print(i,j)
        j +=1
    
    i +=1
    
# continue 跳過當前迴圈,從下一次迴圈開始
# 列印 1~100 跳過5
i =1
while i<=10:
    if i ==5:
        # 在跳過之前,因為會終止執行後面的程式碼,從下一次迴圈開始
        # 為了避免死迴圈,手動加1
        i+=1
        continue
    print(i)
    i+=1

    
# 1~100 列印所有不含有4的數字
i =1
while i<=100:
    strvar = str(i)
    print(strvar)
    if "4" in strvar
        i+=1
        continue
    print(i)