05 if結(jié)構(gòu)While、For循環(huán)

====== if ======

python中的分之結(jié)構(gòu)只有 if 語(yǔ)句,沒(méi)有 switch

1.什么時(shí)候需要使用 if

如果做某件事情(執(zhí)行某段代碼)需要滿足某個(gè)條件才可以,就考慮使用 if

2.怎么使用 if

a.語(yǔ)法1:

if 條件語(yǔ)句
    代碼段1

其他語(yǔ)句

b.說(shuō)明:

if —— 關(guān)鍵字, 是如果的意思(如果xxxx,就xxxx)
條件語(yǔ)句 —— 任意一個(gè)有結(jié)果的語(yǔ)句, 其結(jié)果最好是 布爾值(如果不是布爾值,在判斷的時(shí)候會(huì)轉(zhuǎn)換成布爾值)
: —— 固定寫(xiě)法, 在Python中只要有冒號(hào)( : ), 冒號(hào)后面的第一行必須有 縮進(jìn),冒號(hào)縮進(jìn)組合形成代碼段, 相當(dāng)于其它語(yǔ)言中的大括號(hào)
代碼段1 —— 和 if 保持一個(gè)縮進(jìn)的語(yǔ)句, 也可以是一行語(yǔ)句, 也可以是多行語(yǔ)句(任意語(yǔ)句)

c.執(zhí)行過(guò)程: 先判斷條件語(yǔ)句的結(jié)果是否為 True

如果為 True 就執(zhí)行代碼段1, 然后再執(zhí)行后面的其它語(yǔ)句;

如果為 False 就不執(zhí)行代碼段1, 直接執(zhí)行 if 后面的其它語(yǔ)句(直接執(zhí)行其它語(yǔ)句)

age = 19
# print('你可以出去耍')
if age >=18 :
    print('你可以出去耍')
    print('也可以去網(wǎng)吧耍')  # 和 if 保持一個(gè)縮進(jìn)的代碼, 都是滿足 if 后面的條件才會(huì)執(zhí)行的代碼

print('======')  # 沒(méi)有和 if 保持一個(gè)縮進(jìn)的代碼, 不管條件是否滿足都會(huì)執(zhí)行

總結(jié): 需要滿足某個(gè)條件,才執(zhí)行的語(yǔ)句就寫(xiě)在 if 里面;

不管條件是否滿足都要執(zhí)行的語(yǔ)句,寫(xiě)在 if 的外面(空出一行,不縮進(jìn),Enter)

練習(xí): 輸入一個(gè)數(shù), 如果這個(gè)數(shù)能夠被 3 整除, 就打印: 'xxx能是3的倍數(shù)'
num = int(input('請(qǐng)輸入一個(gè)數(shù)字:'))
if num % 3 == 0 :
    print('%d能是3的倍數(shù)' % num)  # 12能是3的倍數(shù)    (輸入11不執(zhí)行if里面,也沒(méi)有其它語(yǔ)句,故無(wú)異常)

====== if-else結(jié)構(gòu) ======

a.語(yǔ)法:

if 條件語(yǔ)句:
    代碼段1
else:
    代碼段2
    
其它語(yǔ)句

b.說(shuō)明

else —— 關(guān)鍵字, 固定寫(xiě)法; 相當(dāng)于 否則, 不滿足 if 條件的其它情況

c.執(zhí)行過(guò)程: 先判斷條件語(yǔ)句是否為 True ,如果為 True 就執(zhí)行代碼段1,否則執(zhí)行代碼段2

練習(xí): 輸入一個(gè)整數(shù), 如果這個(gè)數(shù)是偶數(shù)就打印'xx是偶數(shù)', 不是偶數(shù)就打印'xx是奇數(shù)'
num = int(input('請(qǐng)輸入一個(gè)數(shù)字:'))
if num % 2 == 0:
    print('%d 是偶數(shù)' % num)  # 滿足條件才執(zhí)行
else:
    print('%d 是奇數(shù)' % num)  # 不滿足條件才執(zhí)行

print('======')   # 沒(méi)有和 if 或 else 保持一個(gè)縮進(jìn)的代碼, 不管條件是否滿足都會(huì)執(zhí)行
練習(xí): 輸入一個(gè)字符串,判斷字符串的開(kāi)頭是否是小寫(xiě)字母,如果是,將字符串的第一個(gè)字符轉(zhuǎn)換成大寫(xiě)字母并打印,否則直接打印
例如: 輸入'aBc=123' -> 'ABc=123'
輸入'1abc' -> '1abc'
輸入'大da123' -> '大da123’
str1 = input('請(qǐng)輸入一個(gè)任意字符串:')
first_char = str1[0]  # 獲取第一個(gè)字符  first char 意思是 第一個(gè)字符
if 'a' <= first_char <= 'z' :
    print('第一個(gè)字符是小寫(xiě)字母')
    print(first_char.upper() + str1[1:])
else :
    print('第一個(gè)字符不是小寫(xiě)字母')
    print(str1)

====== if-elif-else結(jié)構(gòu) ======

a.語(yǔ)法:

if 條件語(yǔ)句1:
    代碼段1
elif 條件語(yǔ)句2: 
    代碼段2
elif 條件語(yǔ)句3: 
    代碼段3
......
else:
    代碼段N

其它語(yǔ)句 

b.說(shuō)明

elif —— 關(guān)鍵字;在前面的條件不滿足的前提下,判斷其它條件是否滿足

c.執(zhí)行過(guò)程: 先判斷條件語(yǔ)句1是否成立

如果成立,直接執(zhí)行代碼段1,然后整個(gè) if 結(jié)構(gòu)結(jié)束,接著執(zhí)行 其它語(yǔ)句;
如果條件語(yǔ)句1不成立,在判斷條件語(yǔ)句2是否成立,如果成立直接執(zhí)行代碼段2,然后整個(gè) if 結(jié)構(gòu)結(jié)束,接著執(zhí)行其它語(yǔ)句;
以此類推,如果條件語(yǔ)句都不成立,就執(zhí)行 else 后面的代碼段 N

注意:

a. 后面的條件語(yǔ)句的判斷都是在前面的條件不成立的前提下執(zhí)行的

b. else不是一定要寫(xiě),根據(jù)情況后面的else結(jié)構(gòu)可以沒(méi)有!

示例1:

salary = 20000
if salary <= 5000 :
    print('家中蹲!')
elif salary <= 10000 :
    print('同城蹲!')
elif salary <= 15000 :
    print('國(guó)內(nèi)蹲!')
else:
    print('出國(guó)蹲!')

示例2:

# 先打印:

# 請(qǐng)選擇:  1   ->  提示輸入姓名、電話、年齡
#         2   ->  提示輸入要查看學(xué)生的名字
#         3   ->  打印目前正在修改學(xué)生信息
#         4   ->  打印目前正在刪除學(xué)生信息
#         5   ->  打印退出

# 補(bǔ)充:python中可以使用三個(gè)雙引號(hào)或者是哪個(gè)單引號(hào)括起來(lái),來(lái)表示一個(gè)字符串;這種字符串中可以直接輸入回車換行

str1 = '''
====================================
歡迎XXX:

    ? 1.  添加學(xué)生
    ? 2.  查看學(xué)生
    ? 3.  修改學(xué)生信息
    ? 4.  刪除學(xué)生
    ? 5.  返回
======================================'''
print(str1)
input_str = input('請(qǐng)選擇(1-5):')
if input_str == '1':
    name = input('姓名:')
    age = input('年齡:')
    tel = input('電話:')
elif input_str == '2':
    find_name = input('請(qǐng)輸入要查看的學(xué)生的姓名:')

elif input_str == '3':
    print('目前正在修改學(xué)生信息')

elif input_str == '4':
    print('目前正在刪除學(xué)生信息')
else:
    print('退出!')

====== if嵌套和三目運(yùn)算符 ======

1. if 的嵌套

在 if 結(jié)果中還可以再寫(xiě) if 結(jié)構(gòu)

輸入一個(gè)數(shù),如果這個(gè)數(shù)是偶數(shù),打印'xx是偶數(shù)',

同時(shí)判斷它是否能被 4 整除,如果可以,再打印'xx還是4的倍數(shù)'

如果不是偶數(shù),只打印'xx是奇數(shù)'

num = int(input('請(qǐng)輸入一個(gè)整數(shù):'))
if num % 2 == 0 :
    print('%d是偶數(shù)' % num)

    # if 中嵌套的 if
    if num % 4 == 0 :
        print('%d還是4的倍數(shù)!' % num)
    else :
        print('是偶數(shù)但不是4的倍數(shù)!')
else :
    print('%d是奇數(shù)' % num)

    # else 中也可以嵌套 if
    if num % 10 == 5 :
        print('這個(gè)奇數(shù)是5的倍數(shù)')

2. python中的三目運(yùn)算符

C語(yǔ)言/java/JS語(yǔ)言中有一個(gè)三目運(yùn)算符: 表達(dá)式?值1:值2 -->>判斷表達(dá)式的值是否為T(mén)rue,為T(mén)rue整個(gè)表達(dá)式的結(jié)果是值1,否則是值2(需了解)

Python中的三目運(yùn)算符:值1 if 表達(dá)式 else 值2 -->>判斷表達(dá)式的值是否為T(mén)rue,為T(mén)rue整個(gè)表達(dá)式的結(jié)果是值1,否則是值2(需掌握)

應(yīng)用條件:根據(jù)某個(gè)條件是否成立,獲取不同的值的時(shí)候才使用三目運(yùn)算符

num1, num2 = 10, 100
max = num1 if num1 > num2 else num2
print(max)  # 100
練習(xí):輸入一個(gè)年份,獲取指定的年份是否是潤(rùn)年
是,拿到結(jié)果'潤(rùn)年';
不是,拿到結(jié)果'不是潤(rùn)年'
潤(rùn)年的條:年份是否能被4,不能被100整除;或者能被400整除
year = int(input('年份:'))
result = '潤(rùn)年' if (year % 4 == 0 and year  != 0) or (year % 400 == 0) else '不是潤(rùn)年'
print(result)

====== for循環(huán) ======

1.為什么要使用循環(huán)

python中的循環(huán)結(jié)構(gòu)有兩種:a. for 循環(huán)。b. while 循環(huán)

什么時(shí)候會(huì)用到 循環(huán) :當(dāng)實(shí)現(xiàn)某個(gè)功能的時(shí)候發(fā)現(xiàn)某個(gè)操作需要重復(fù)執(zhí)行,這個(gè)時(shí)候就考慮使用循環(huán)

# 1+2+3+...+100
print(1+2+3+4.+100)  # 重復(fù)的 +
# 統(tǒng)計(jì)1~10000能夠被13整數(shù)的數(shù)的個(gè)數(shù)

1. for 循環(huán)

a.語(yǔ)法

for 變量 in 序列 :
    循環(huán)體

b.說(shuō)明

for —— 關(guān)鍵字
變量 —— 一個(gè)變量名,新的變量 或 (已經(jīng)賦值過(guò)的變量)
in —— 固定寫(xiě)法
序列 —— 屬于序列的數(shù)據(jù);Python中的序列有:字符串、列表、字典、集合、元祖、range、迭代器、生成器★★
: —— 固定寫(xiě)法
循環(huán)體 —— 需要重復(fù)執(zhí)行的代碼就放在循環(huán)體中;循環(huán)體需要和 for 保持一個(gè)縮進(jìn)

c.執(zhí)行過(guò)程:(重要!★★★)

讓 變量 去 序列 中取值,一個(gè)一個(gè)的取,取完為止;每取一個(gè)值,執(zhí)行一次一次循環(huán)體(序列中元素的個(gè)數(shù)決定了循環(huán)體執(zhí)行的次數(shù))

for char in 'abc' :
    print('===')
# 結(jié)果為===
#      ===
#      ===
    print(char)
# 結(jié)果為===
#      a
#      ===
#      b
#      ===
#      c
"""
釋義:
第一次循環(huán):char = 'a' print('===') print(char)
第二次循環(huán):char = 'b' print('===') print(char)
第三次循環(huán):char = 'c' print('===') print(char)
"""
練習(xí):給一個(gè)字符串'hosee 23jh!hs89_=sssAsK',統(tǒng)計(jì)這個(gè)字符串中數(shù)字字符的個(gè)數(shù)
str1 ='hosee 23jh!hs89_=sssAsK'
count = 0  # 用來(lái)保存數(shù)字字符的個(gè)數(shù),默認(rèn)為 0
for char in str1 :
    if '0' <= char <= '9' :   # 數(shù)字在0~9的范圍之間
        count += 1   # 取到數(shù)字便加1

print('%s中有%d個(gè)數(shù)字字符' % (str1, count))
# 結(jié)果為hosee 23jh!hs89_=sssAsK中有4個(gè)數(shù)字字符

2. range函數(shù)

range(N) -->> 產(chǎn)生數(shù)字序列 0 ~ N-1(N必須是整數(shù))

range(M, N)-->> 產(chǎn)生數(shù)字序列 M ~ N-1(M,N必須是整數(shù),N > M)

range(M,N,step)-->>從M開(kāi)始,每次值加step產(chǎn)生下一個(gè)數(shù)字,直到N前一個(gè)為止。(M,N必須是整數(shù),step>0,N>M;step<0,N<M)

for num in range(11) :
    print('num:', num, end='')  # end='' 為禁止換行,按順序打印,后面加一個(gè)空位打印print(),起到不連續(xù)打印的效果
# 結(jié)果為num: 0num: 1num: 2num: 3num: 4num: 5num: 6num: 7num: 8num: 9num: 10
print()

for num in range(11, 21) :
    print('num:', num, end='')  # end='' 為禁止換行,按順序打印,后面加一個(gè)空位打印print(),起到不連續(xù)打印的效果
# 結(jié)果為num: 11num: 12num: 13num: 14num: 15num: 16num: 17num: 18num: 19num: 20
print()

for num in range(1, 100, 2) :
    print('num:', num, end='')
#結(jié)果為num: 1num: 3num: 5num: 7num: 9num: 11num: 13num: 15num: 17num: 19num: 21num: 23num: 25num: 27num: 29num: 31num: 33num: 35num: 37num: 39num: 41num: 43num: 45num: 47num: 49num: 51num: 53num: 55num: 57num: 59num: 61num: 63num: 65num: 67num: 69num: 71num: 73num: 75num: 77num: 79num: 81num: 83num: 85num: 87num: 89num: 91num: 93num: 95num: 97num: 995050
print()

# 示例:計(jì)算1+2+3+...+100
sum1 = 0
for num in range(1,101) :
    sum1 += num
print(sum1)
# 結(jié)果為 5050
"""釋義
sun1 = 0
sum = 1     sum1 += num, sum1 = sum1+num =0+1
sum = 2     sum1 += num, sum1 = sum1+num =1+2
sum = 3     sum1 += num, sum1 = sum1+num =1+2+3
......
sum = 100   sum1 += num, sum1 = sum1+num =1+2+3+4+...+100
"""

示例:求100以內(nèi)所有能被13或者7整除的數(shù)的和

sum1 = 0
for num in range(100) :
    if num % 13 == 0 or num % 7 == 0 :
        sum1 += num
print(sum1)
# 結(jié)果為 1008

通過(guò)遍歷字符串字符下標(biāo)遍歷字符串

str1 = 'hello word!'
# index是字符對(duì)應(yīng)的下標(biāo),從前往后取
for index in range(len(str1)) :
    print(str1[index],end='')  # end='' 為禁止換行,按順序打印,后面加一個(gè)空位打印print(),起到不連續(xù)打印的效果
# 結(jié)果為 hello word!

index是字符對(duì)應(yīng)的下標(biāo), 從后往前取

for index in range(-1, -len(str1)-1, -1) :
    print(str1[index], end='')  # end='' 為禁止換行,按順序打印,后面加一個(gè)空位打印print(),起到不連續(xù)打印的效果
# 結(jié)果為 !drow olleh

====== while循環(huán) ======

1.while

a.語(yǔ)法

while 條件語(yǔ)句:
    循環(huán)體

b.說(shuō)明

while —— 關(guān)鍵字;當(dāng)...的時(shí)候
條件語(yǔ)句 —— 和 if 后邊的條件要求一樣(賦值語(yǔ)句不行,別的語(yǔ)句都可以)
: —— 固定寫(xiě)法
循環(huán)體 —— 需要重復(fù)執(zhí)行的語(yǔ)句寫(xiě)在循環(huán)體中;循環(huán)體和while保持一個(gè)縮進(jìn)

c.執(zhí)行過(guò)程

當(dāng)程序執(zhí)行到while循環(huán),就先判斷條件語(yǔ)句是否為T(mén)rue,為T(mén)rue就執(zhí)行一次循環(huán)體,執(zhí)行完循環(huán)體再判斷條件語(yǔ)句是否為T(mén)rue;
為T(mén)rue,又執(zhí)行循環(huán)體...以此類推,直接判斷條件語(yǔ)句的結(jié)果是False,循環(huán)就結(jié)束,直接執(zhí)行后面的其它語(yǔ)句

for和while的選擇:

嚴(yán)格來(lái)說(shuō):for循環(huán)可以做到的,while循環(huán)都可以做到;
while循環(huán)可以做到的,for循環(huán)不一定可以做到。
什么時(shí)候使用for: a.遍歷序列 b.循環(huán)次數(shù)確定
什么時(shí)候使用while: a.死循環(huán) b.循環(huán)次數(shù)不確定
# 死循環(huán)
 while True :
     input('請(qǐng)輸入:')

控制while循環(huán)次數(shù)

變量 = 0
while 變量 < 次數(shù)
    需要重復(fù)執(zhí)行的代碼
    變量 += 1

num = 0
while num < 4 :
    print('======')
    num += 1
# 結(jié)果為
# ======
# ======
# ======
# ======

用while循環(huán)遍歷字符串

str1 = 'hao are you!'
index = 0
while index < len(str1) :
    print(str1[index], end = '')
    index += 1
# 結(jié)果為hao are you!
練習(xí):寫(xiě)一個(gè)程序,錄入學(xué)生的成績(jī)。錄入以輸入'end'來(lái)結(jié)束
輸入:23 輸入:90.8 輸入:112 ... 輸入:end 結(jié)束
input_value = input('請(qǐng)輸入:')
while input_value != 'end' :
    input_value = input('請(qǐng)輸入:')
練習(xí):注冊(cè)輸入密碼,直到輸入的密碼合理位置,要求密碼至少6位
請(qǐng)輸入密碼:1234 -->> 提示輸入密碼有誤
請(qǐng)輸入密碼:asdf -->> 提示輸入密碼有誤
......
password = input('請(qǐng)輸入密碼:')
while len(password) < 6 :
    print('密碼有誤,重新輸入!')
    password = input('請(qǐng)輸入密碼:')

====== 循環(huán)相關(guān)的關(guān)鍵字(continue,break) ======

1. continue

continue是Python關(guān)鍵字,只能用在循環(huán)體中!

功能:執(zhí)行循環(huán)體執(zhí)行到continue的時(shí)候,結(jié)束當(dāng)次循環(huán),直接進(jìn)入下次循環(huán)的判斷(for循環(huán)就是讓變量去取下一個(gè)值;while循環(huán)就是直接去判斷while后面的條件是否為T(mén)rue)

for x in range(3) :
    print('===')
    print('---')
    if x == 2 :
        continue
    print('123')
# 結(jié)果為
# ===
# ---
# 123
# ===
# ---
# 123
# ===
# ---

x = 0
while x < 100 :
    x += 1
    if x % 3 == 0 :
        continue
    print(x)  # 1,2,3...97,98,100

2. break

break是Python關(guān)鍵字,只能用在循環(huán)體中!

功能:執(zhí)行循環(huán)體的時(shí)候,遇到break,循環(huán)直接結(jié)束,直接執(zhí)行循環(huán)后面的其它語(yǔ)句

找到大于111的數(shù)字當(dāng)中第一個(gè)能夠被17整除的數(shù)
num = 111
while True :
    if num % 17 == 0 :
        print(num)
        break     # break 直接結(jié)束
    num +=1     # 119

for x in 'abc' :
    print(x)
    break
print(x)   # a a

3. else

for 變量 in 序列:
    循環(huán)體
else:
    代碼段
    
while 條件語(yǔ)句:
    循環(huán)體
else:
    代碼段

執(zhí)行過(guò)程:循環(huán)執(zhí)行過(guò)程不變,else后面代碼段,如果循環(huán)是自然死亡就會(huì)執(zhí)行如果是因?yàn)橛龅絙reak而結(jié)束的,就不會(huì)執(zhí)行

for x in range(5) :
    print(x, end='')
else :
    print('for循環(huán)自然死亡')
# 01234for循環(huán)自然死亡

for x in range(5) :
    print(x, end='')
    if x == 3 :
        break
else :
    print('for循環(huán)自然死亡')  # 循環(huán)遇到break不會(huì)執(zhí)行
print('=====')     # # 不管循環(huán)怎么結(jié)束都會(huì)執(zhí)行
# 0123=====

index = 0
while index < 5:
    if index == 3:
        break
    index += 1
else:
    print('while自然死亡')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容