5.1 分支結(jié)構(gòu)
python中分支結(jié)構(gòu)只有if語(yǔ)句,沒(méi)有switch語(yǔ)句
5.1.1 if語(yǔ)句
- a.語(yǔ)法:
if 條件語(yǔ)句 :
代碼段 - b.說(shuō)明:
if -- 關(guān)鍵字
條件語(yǔ)句 -- 任何有結(jié)果的表達(dá)式浸卦,不管結(jié)果類型轻抱。
: -- 固定寫法,有冒號(hào)下以下必定有縮進(jìn)
代碼段 -- 和if保持一個(gè)縮進(jìn)的一條或多條語(yǔ)句唤殴。 - c.執(zhí)行過(guò)程:
先判斷條件結(jié)果是否是True,如果是True就執(zhí)行冒號(hào)后面的代碼段。否則就不執(zhí)行绑榴。
注意:
如果條件語(yǔ)句結(jié)果不是布爾,會(huì)先將結(jié)果轉(zhuǎn)換成布爾盈魁,再判斷翔怎。
除了0,空值以外的值轉(zhuǎn)為布爾都為True杨耙。
if后面可以寫哪些語(yǔ)句
注意:賦值語(yǔ)句不能寫在if后面赤套,其他都可以。
num = 10
if num & 1 == 0:
print('%d是偶數(shù)' % (num))
print('========') # 和if保持一個(gè)縮進(jìn)的語(yǔ)句是在條件成立才執(zhí)行
# 與if無(wú)關(guān)的語(yǔ)句最好換個(gè)行
print('##########') # 在if外面的語(yǔ)句不管if條件是否成立都會(huì)執(zhí)行
if 'ADS'.isupper():
print('全是大寫') #不執(zhí)行
# 練習(xí):隨機(jī)產(chǎn)生一個(gè)年齡值珊膜,如果大于等于18就打印成年容握。
import random
age = random.randint(0,100)
if age >= 18:
print('%d已經(jīng)成年了。' %(age))
else:
print('未成年')
print(age)
5.1.2 if-else
- a.語(yǔ)法:
if 條件語(yǔ)句 :
代碼段1
else:
代碼段2 - b.說(shuō)明:
if -- 關(guān)鍵字
else -- 關(guān)鍵字
條件語(yǔ)句 -- 任何有結(jié)果的表達(dá)式车柠,不管結(jié)果類型剔氏。
: -- 固定寫法,有冒號(hào)下以下必定有縮進(jìn)
代碼段 -- 和if及else保持一個(gè)縮進(jìn)的一條或多條語(yǔ)句竹祷。 - c.執(zhí)行過(guò)程:
先判斷條件結(jié)果是否是True谈跛,如果是True就執(zhí)行代碼段1。否則就執(zhí)行代碼段2溶褪。
注意:
如果條件語(yǔ)句結(jié)果不是布爾币旧,會(huì)先將結(jié)果轉(zhuǎn)換成布爾,再判斷猿妈。
除了0吹菱,空值以外的值轉(zhuǎn)為布爾都為True巍虫。
#隨機(jī)產(chǎn)生一個(gè)整數(shù),如果是奇數(shù)打印’***是奇數(shù)‘鳍刷,否則占遥,反之。
num = random.randint(0,9999)
if num & 1:
print('%d是奇數(shù)' %(num))
else:
print('%d是偶數(shù)' %(num))
5.1.3 if-elif-else
- a.語(yǔ)法:
if 條件語(yǔ)句1 :
代碼段1
elif 條件語(yǔ)句2:
代碼段2
elif 條件語(yǔ)句3:
代碼段3
...
else:
代碼段n - b.說(shuō)明:
if -- 關(guān)鍵字
elif -- 關(guān)鍵字
else -- 關(guān)鍵字
條件語(yǔ)句 -- 任何有結(jié)果的表達(dá)式输瓜,不管結(jié)果類型瓦胎。
: -- 固定寫法,有冒號(hào)下以下必定有縮進(jìn)
代碼段 -- 和if尤揣、elif及else保持一個(gè)縮進(jìn)的一條或多條語(yǔ)句搔啊。 - c.執(zhí)行過(guò)程:
先判斷條件語(yǔ)句1結(jié)果是否是True,如果是True就執(zhí)行代碼段1北戏。
否則就判斷條件語(yǔ)句2結(jié)果是否是True负芋,如果是True就執(zhí)行代碼段2。
否則就判斷條件語(yǔ)句3結(jié)果是否是True嗜愈,如果是True就執(zhí)行代碼段3旧蛾。
...
如果前面所有的條件都為False,就執(zhí)行代碼段n蠕嫁。
注意:
后面的條件判斷的前提是前面條件不成立锨天。
這里的elif根據(jù)情況可以有多個(gè),else也可以省略剃毒。
如果條件語(yǔ)句結(jié)果不是布爾病袄,會(huì)先將結(jié)果轉(zhuǎn)換成布爾,再判斷迟赃。
除了0陪拘,空值以外的值轉(zhuǎn)為布爾都為True。
# score 60以下不及格 60-70及格 71-89良好 90以上優(yōu)秀
score = random.randint(0,100)
print('成績(jī)?yōu)?d:' %(score),end="")
if score < 60:
print('不及格')
elif score <= 70:
print('及格')
elif score <= 89:
print('良好')
else:
print('優(yōu)秀')
5.1.4 if嵌套
可以在if纤壁,elif左刽,else后面的代碼段中,都可以再寫其他的if語(yǔ)句酌媒。
#判斷一個(gè)數(shù)字是否為偶數(shù)欠痴,是的話判斷是否被4整除
score = random.randint(0,100)
if score & 1:
print('%d是奇數(shù)' %score)
else:
if score % 4 == 0:
print('%d是4的倍數(shù)' % score)
else:
print('%d是偶數(shù)' %score)
"""
練習(xí):輸入一個(gè)字符串,判斷字符串的第一個(gè)字符是否是字母秒咨,如果是,打印’以字符開(kāi)頭'喇辽。
如果這個(gè)字母是大寫的再打印’大寫字母‘。
"""
str1 = input('請(qǐng)輸入一串字符:')
if str1[0].isalpha(): #if 'a' <= str1[0] <= 'z' or 'A' <= str1[0] <= 'Z':
print('以字母開(kāi)頭')
if str1[0].isupper(): #'A' <= str1[0] <= 'Z':
print('大寫字母')
else:
print('什么都不打印')
'''
l = []
num = 0
while num <= 888:
num = random.randint(0, 999)
l.append(num)
print(l)
'''
5.2 for循環(huán)
python中的循環(huán)結(jié)構(gòu)有兩種:for和while循環(huán)雨席。
什么時(shí)候用循環(huán):某個(gè)操作需要重復(fù)執(zhí)行菩咨,就考慮用循環(huán)。
5.2.1 for循環(huán)
- 語(yǔ)法:
for 變量名 in 序列:
循環(huán)體 - 說(shuō)明:
for、in -- 關(guān)鍵字
變量名 -- 滿足變量名要求即可
序列 -- 字符串抽米,列表特占,元組,字典云茸,集合是目,迭代器,range
循環(huán)體 -- 可以是一條或多條和for保持一個(gè)縮進(jìn)的語(yǔ)句(需要重復(fù)執(zhí)行的代碼) - 執(zhí)行過(guò)程:
讓變量去序列中取值标捺,一個(gè)一個(gè)的取懊纳,取完為止;每取一個(gè)值亡容,執(zhí)行一次循環(huán)體嗤疯。
(for循環(huán)中,序列中元素的個(gè)數(shù)萍倡,決定了循環(huán)的次數(shù))
注意:
如果for后的變量取到的值身弊,在循環(huán)體里不使用,那么這個(gè)變量命名時(shí)列敲,用一個(gè)_來(lái)命名。
for x in range(97,123):
print(chr(x), end='--->')
for x in 'abc':
print(x)
print('##$$#$$#$#')
5.2 range
range(n) -- 產(chǎn)生一個(gè)數(shù)字序列帖汞,序列內(nèi)容是0~n-1(結(jié)果是一個(gè)序列)
range(m,n) -- 產(chǎn)生一個(gè)數(shù)字序列戴而,序列內(nèi)容是m~n-1,m<n(結(jié)果是一個(gè)序列)
range(m,n,step) -- 產(chǎn)生一個(gè)數(shù)字序列,序列從m開(kāi)始翩蘸,每次加step直到n前為止所意,取不到n。
range一般用在:
1.需要產(chǎn)生指定范圍的數(shù)字序列
2.單純的控制for循環(huán)的循環(huán)次數(shù)
for num in range(10):
print(num, end='')
print()
for num in range(10, 20, 2):
print(num, end='--->')
#練習(xí):求1+2+催首。扶踊。+100
sum1 = 0
for num in range(1, 101):
sum1 += num
print(sum1)
print(sum([1, 2, 3]))
#練習(xí):2+4+6+8+。郎任。秧耗。+100
#方法1:不用if
sum1 = 0
for num in range(1, 51): # range(2,101,2)
sum1 += num*2
print(sum1)
#方法2:用if
sum2 = 0
for num in range(1, 101):
if not num &1:
sum2 += num
print(sum2)
"""
if num & 1:
pass
else:
sum2 += num
"""
#練習(xí):寫程序統(tǒng)計(jì)一個(gè)字符串中數(shù)字字符的個(gè)數(shù)
str1 = input('請(qǐng)輸入一個(gè)字符串:')
sum1 = 0
for i in str1:
if '0' <= i <= '9':
print(i)
sum1 += 1
print('數(shù)字字符的個(gè)數(shù)是:', sum1)
#用循環(huán)控制打印10行”*“
for _ in range(1,10):
print('*')
for x in range(1, 10):
print('*'*x)
5.3 while
5.3.1 while循環(huán)
- 語(yǔ)法:
while 條件語(yǔ)句:
循環(huán)體 - 說(shuō)明:
while -- 關(guān)鍵字
條件語(yǔ)句 -- 有結(jié)果的表達(dá)式,除了賦值語(yǔ)句
: -- 固定寫法
循環(huán)體 -- 和while保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句(會(huì)被重復(fù)執(zhí)行) - 執(zhí)行過(guò)程:
先判斷條件語(yǔ)句是否為True舶治,為True就執(zhí)行循環(huán)體分井;
執(zhí)行完循環(huán)體再判斷條件語(yǔ)句是否為True,為True又執(zhí)行循環(huán)體霉猛;
尺锚。。惜浅。瘫辩。。
以此類推,直到條件語(yǔ)句為False伐厌,就結(jié)束整個(gè)循環(huán)承绸。
#1*2*..*10
num = 1
sum1 = 1
while num <= 10:
sum1 *= num
num += 1
print(sum1)
print(1*2*3*4*5*6*7*8*9*10)
#獲取字符串a(chǎn)bc123中的每個(gè)字符
str1 = 'abc123'
num = 0
while num <= 5:
print(str1[num])
num += 1
5.3.2 for和while循環(huán)
python中,for循環(huán)能做到的while循環(huán)都能做到弧械;但是while循環(huán)能做的八酒,for循環(huán)不一定能做到。
- 使用for循環(huán):
1.獲取序列中的元素(值)
2.循環(huán)次數(shù)確定 - while循環(huán):
1.死循環(huán)
2.循環(huán)次數(shù)不確定
#練習(xí):程序不斷的輸入刃唐,知道為0為止
i = input('請(qǐng)輸入:')
while i != '0':
i = input('請(qǐng)輸入:')
5.4 continue,break和else
5.4 .1 continue
- continue是一個(gè)關(guān)鍵字羞迷,只能寫在循環(huán)體中
- 功能:當(dāng)循環(huán)遇到continue則會(huì)結(jié)束當(dāng)次循環(huán),直接進(jìn)入下次循環(huán)判斷画饥。
- 進(jìn)入下次循環(huán):for循環(huán)就是用變量取下一個(gè)值衔瓮;while循環(huán)就是直接判斷條件語(yǔ)句是否為True。
5.4 .2 break
- break是一個(gè)關(guān)鍵字抖甘,只能寫在循環(huán)體中热鞍。
- 功能:當(dāng)循環(huán)遇到break時(shí),直接結(jié)束當(dāng)前循環(huán)衔彻。
5.4.3 else python中特有
- 語(yǔ)法:
while 條件語(yǔ)句:
循環(huán)體
else:
代碼段
for 變量 in 序列:
循環(huán)體
else:
代碼段
- 執(zhí)行過(guò)程:
else結(jié)構(gòu)不會(huì)影響原循環(huán)的執(zhí)行過(guò)程薇宠。當(dāng)循環(huán)自然死亡時(shí),就會(huì)執(zhí)行else后面的代碼段艰额。
循環(huán)因?yàn)橛龅絙reak而結(jié)束時(shí)澄港,不會(huì)執(zhí)行else后面的代碼段。
for x in range(10):
print(x)
else:
print('for循環(huán)結(jié)束')