一肘交、分支結(jié)構(gòu)
python中的分支結(jié)構(gòu)只有if語(yǔ)句
1. if語(yǔ)句
1)結(jié)構(gòu)1:滿(mǎn)足某個(gè)條件才執(zhí)行某段代碼
a.語(yǔ)法:
if 條件語(yǔ)句:
代碼段
其他語(yǔ)句
b.說(shuō)明:
if:關(guān)鍵字啊胶,固定寫(xiě)法
條件語(yǔ)句:可以是一個(gè)具體的數(shù)據(jù)胧华,也可以是一個(gè)已經(jīng)賦值過(guò)的變量,或者是運(yùn)算表達(dá)式(不能是賦值語(yǔ)句)
冒號(hào):固定結(jié)構(gòu)
代碼段:一條或者多條和if保持一個(gè)縮進(jìn)的語(yǔ)句(任何語(yǔ)句)
c.執(zhí)行過(guò)程:
先判斷條件語(yǔ)句的結(jié)果是否為T(mén)rue(如果條件語(yǔ)句不是布爾值介却,則先轉(zhuǎn)換為布爾值)
如果為T(mén)rue則執(zhí)行代碼段柱搜,然后再執(zhí)行其他語(yǔ)句;如果為False則跳過(guò)代碼段癣蟋,直接執(zhí)行其它語(yǔ)句
d.補(bǔ)充:布爾值的轉(zhuǎn)換
python中所有的數(shù)據(jù)類(lèi)型都能轉(zhuǎn)換為布爾類(lèi)型
所有為0透硝、為空的值都會(huì)轉(zhuǎn)換為False,其他則為T(mén)rue
練習(xí):
# 判斷奇偶性
num = input('請(qǐng)輸入一個(gè)整數(shù):')
if not int(num) & 1:
print('偶數(shù)疯搅!')
else:
print('奇數(shù)濒生!')
# 輸入年齡,如果輸入的年齡大于等于18歲幔欧,打印‘可以進(jìn)網(wǎng)吧’
if int(input('請(qǐng)輸入年齡:')) >= 18:
print('可以進(jìn)網(wǎng)吧')
2)結(jié)構(gòu)2:(if - else)
滿(mǎn)足某個(gè)條件執(zhí)行某段代碼罪治,不滿(mǎn)足條件時(shí)執(zhí)行另外一段代碼
a.語(yǔ)法:
if 條件語(yǔ)句:
代碼段1
else:
代碼段2
其他代碼
b.說(shuō)明:
if/else:關(guān)鍵字,固定寫(xiě)法
條件語(yǔ)句:可以是一個(gè)具體的數(shù)據(jù)礁蔗,也可以是一個(gè)已經(jīng)賦值過(guò)的變量觉义,或者是運(yùn)算表達(dá)式(不能是賦值語(yǔ)句)
冒號(hào):固定結(jié)構(gòu)
代碼段1:和if保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句(滿(mǎn)足if后面的條件才會(huì)執(zhí)行)
代碼段2:和else保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句(if后面的條件不成立才會(huì)執(zhí)行)
c.執(zhí)行過(guò)程:
先判斷條件語(yǔ)句是否為T(mén)rue,如果為T(mén)rue執(zhí)行代碼段1浴井,否則執(zhí)行代碼段2
3)結(jié)構(gòu)3:(if - elif - elif... - else)
條件有多個(gè)(有關(guān)聯(lián))的時(shí)候執(zhí)行不同的代碼段
a.語(yǔ)法:
if 條件語(yǔ)句1:
代碼段1
elif 條件語(yǔ)句2:
代碼段2
elif 條件語(yǔ)句3:
代碼段3
...
else:
代碼段n
其他語(yǔ)句
b.執(zhí)行過(guò)程:
先判斷條件語(yǔ)句1是否為T(mén)rue晒骇,如果為T(mén)rue執(zhí)行代碼段1,然后整個(gè)if結(jié)構(gòu)結(jié)束磺浙,直接執(zhí)行其他語(yǔ)句厉碟;
如果條件語(yǔ)句1為False,則判斷條件語(yǔ)句2是否為T(mén)rue屠缭,為T(mén)rue則執(zhí)行代碼段2箍鼓,然后執(zhí)行其他語(yǔ)句;
如果條件語(yǔ)句2為False呵曹,則判斷條件語(yǔ)句3是否為T(mén)rue款咖,為T(mén)rue則執(zhí)行代碼段3,然后執(zhí)行其他語(yǔ)句奄喂;
以此類(lèi)推
如果所有的條件語(yǔ)句都是False铐殃,則執(zhí)行else后面的代碼段n,然后執(zhí)行其他語(yǔ)句
練習(xí):
# 根據(jù)輸入的年齡,判斷年齡的階段
# 0-3:幼兒跨新,4-12:兒童富腊,13-18:青少年,19-28:青年
# 29-50:壯年域帐,50以上:老年
age = int(input("請(qǐng)輸入年齡:"))
if age < 0 or age > 150:
print('輸入范圍錯(cuò)誤')
exit()
if age <= 3:
print('幼兒')
elif age <= 12:
print('兒童')
elif age <= 18:
print('青少年')
elif age <= 28:
print('青年')
elif age <= 50:
print('壯年')
else:
print('老年')
2. if語(yǔ)句嵌套
在if結(jié)構(gòu)中的if赘被、else是整、elif后面的代碼段中,還可以寫(xiě)其他的if語(yǔ)句
練習(xí):
# 練習(xí):輸入一個(gè)數(shù)民假,如果這個(gè)數(shù)是偶數(shù)浮入,打印‘偶數(shù)‘,如果是奇數(shù)羊异,打印‘奇數(shù)‘事秀,如果這個(gè)數(shù)能被4整除,打印‘4的倍數(shù)’
num = int(input('請(qǐng)輸入一個(gè)數(shù):'))
if num & 1:
print('奇數(shù)')
else:
print('偶數(shù)')
if not num % 4:
print('4的倍數(shù)')
二野舶、循環(huán)語(yǔ)句
python的中的循環(huán)有兩種:for-in循環(huán)和while循環(huán)
如果某段代碼需要重復(fù)執(zhí)行易迹,就使用循環(huán)結(jié)構(gòu)
1. for循環(huán)
1)語(yǔ)法:
for 變量名 in 序列:
循環(huán)體
2)說(shuō)明:
for:關(guān)鍵字
變量名:要求和聲明變量時(shí)的變量名相同
in:關(guān)鍵字
序列:容器型數(shù)據(jù)類(lèi)型的數(shù)據(jù),例如:字符串平道、列表睹欲、元組、字典巢掺、集合句伶、迭代器劲蜻、生成器陆淀、range
循環(huán)體:和for保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句;循環(huán)體中的代碼解釋需要重復(fù)執(zhí)行的代碼
3)執(zhí)行過(guò)程:
讓變量去序列中一個(gè)一個(gè)地取值,直到取完為止先嬉;每取一個(gè)值執(zhí)行一次循環(huán)體
注意:
python中for循環(huán)的循環(huán)次數(shù)轧苫,是通過(guò)in后面序列元素的個(gè)數(shù)來(lái)控制的
2. range()函數(shù)
產(chǎn)生指定范圍內(nèi)的數(shù)字序列
1)range(N):產(chǎn)生0 ~ N - 1的整數(shù)數(shù)列(N個(gè)數(shù)字)
for x in range(11):
print(x)
# 如果for后面的變量不用,變量名用_
for _ in range(11):
print('!')
2)range(M, N):產(chǎn)生M ~ N - 1的整數(shù)序列
for x in range(1, 10):
print(x)
3)range(M, N, step):從M開(kāi)始每次加step產(chǎn)生下一個(gè)數(shù)疫蔓,直到N前一個(gè)為止
# 0-100的偶數(shù)
for x in range(0, 101, 2):
print(x)
練習(xí)
# 練習(xí)1:使用循環(huán)計(jì)算1 + 2 + ... + 100
sum1 = 0
for num in range(1, 101):
sum1 += num
print(sum1) # 5050
# 練習(xí)2:統(tǒng)計(jì)100以?xún)?nèi)能夠被2整除但不能被3整除的數(shù)的個(gè)數(shù)
count1 = 0
for num in range(101):
if not num & 1 and num % 3:
count1 += 1
print(count1) # 34
# 優(yōu)化解
count1 = 0
for num in range(0, 101, 2):
if num % 3:
count1 += 1
print(count1) # 34
2. while循環(huán)
1)語(yǔ)法:
while 條件語(yǔ)句:
循環(huán)體
其它語(yǔ)句
2)說(shuō)明:
while:關(guān)鍵字
條件語(yǔ)句:只要是有結(jié)果的表達(dá)式都可以(賦值語(yǔ)句除外)
循環(huán)體:和while保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句含懊;(需要重復(fù)執(zhí)行的代碼就放到循環(huán)體中)
3)執(zhí)行過(guò)程:
先判斷條件語(yǔ)句是否為T(mén)rue,如果為T(mén)rue就執(zhí)行循環(huán)體
執(zhí)行完循環(huán)體再判斷條件語(yǔ)句是否為T(mén)rue衅胀,如果為T(mén)rue繼續(xù)執(zhí)行循環(huán)體
以此類(lèi)推
當(dāng)判斷條件語(yǔ)句為False時(shí)岔乔,整個(gè)循環(huán)結(jié)束,執(zhí)行循環(huán)后面的其它語(yǔ)句
4)for和while循環(huán)怎么選滚躯?
如果循環(huán)次數(shù)確定或者需要遍歷操作雏门,采用for循環(huán)
如果循環(huán)次數(shù)不能確定或者需要執(zhí)行死循環(huán),采用while循環(huán)
練習(xí)
# 練習(xí):從鍵盤(pán)輸入數(shù)字掸掏,直到輸入的數(shù)字為0結(jié)束
num2 = 1
while num2:
num2 = int(input('請(qǐng)輸入數(shù)字:'))
print('完成')
# 密碼錯(cuò)誤重新輸入
pwd = '123456'
while pwd != input('請(qǐng)輸入密碼:'):
print('密碼錯(cuò)誤茁影!')
print('密碼正確!')
3. continue丧凤、break和else
1)continue
continue是只能出現(xiàn)在循環(huán)體中的關(guān)鍵字
當(dāng)執(zhí)行循環(huán)體時(shí)遇到continue募闲,當(dāng)次循環(huán)直接結(jié)束,直接進(jìn)入到下次循環(huán)的判斷
# 計(jì)算1-99中不能被7整除的數(shù)的和
sum1 = 0
num = 0
while num < 100:
num += 1
if not num % 7:
continue
sum1 += num
print(sum1)
2)break
只能在循環(huán)體中的關(guān)鍵字
執(zhí)行循環(huán)體時(shí)愿待,如果遇到break浩螺,整個(gè)循環(huán)直接結(jié)束
# 從1 + 2 + 3 + ... + x? sum<100000
# 建議使用while
# 解法1
sum1 = 0
num = 0
while True:
sum1 += num
if sum1 >= 100000:
print(num - 1, sum1 - num) # 446 99681
break
num += 1
# 解法2
sum1 = 0
for num in range(100000):
sum1 += num
if sum1 >= 100000:
print(num - 1, sum1 - num) # 446 99681
break
3)else
執(zhí)行過(guò)程:
如果循環(huán)是自然死亡(自然結(jié)束)靴患,else后面的代碼段會(huì)執(zhí)行
如果循環(huán)是因?yàn)閎reak而結(jié)束,else后面的代碼段不會(huì)執(zhí)行
for 變量 in 序列:
循環(huán)體
else:
代碼段
while 條件語(yǔ)句:
循環(huán)體
else:
代碼段