小白學Python,分享下我自己的學習筆記【二】
大家好,我又來啦!第二次給螞蟻老師投稿了,上次作為初級小白整理了最基礎概念部分的學習筆記,不僅找到了很好學習方法,自信心還倍增。這一個周又向前邁了一大步,學習了計算機的流程控制中關于各種結構,以及里面的幾種循環(huán),并且通過分類能夠區(qū)分它們之間的相似和不同處。也整理了流程控制語句break和continue、的用法和它們之間的區(qū)別、內置函數range的使用,以及它們跟各種循環(huán)的搭配使用,嵌套等使用。
程序的組織結構(計算機的流程控制)
任何簡單或復雜的算法都可以由順序結構、選擇結構和循環(huán)結構這三種基本結構組成。程序的組織結構包含以下三種:
1.順序結構
2.選擇結構:if語句
3.循環(huán)結構:while語句、for in語句
順序結構
程序從上到下順序地執(zhí)行代碼,中間沒有任何的判斷和跳轉,知道程序結束 例:“把大象放進冰箱一共分幾步”
例:“把大象放進冰箱一共分幾步”
print('1.把大象門打開')
print('2.把大象放進冰箱')
print('3.把冰箱門關上')
1.把大象門打開
2.把大象放進冰箱
3.把冰箱門關上
選擇結構
程序根據判斷條件的布爾值選擇性地執(zhí)行部分代碼,明確的讓計算機知道在什么條件下,該去做什么。選擇結構包含以下六種:
1.單分支結構
中文語義:如果......就......
語法結構:if 條件表達式:
條件執(zhí)行式 例:
money=1000???#余額
s=int(input('請輸入取款金額'))??#取款金額
請輸入取款金額600
if?money>=?s:???#判斷余額是否充足,這是條件表達式
????money=money-s??#只有條件為True,才會執(zhí)行
????print('取款成功,余額為:',money)
取款成功,余額為:400
2.雙分支結構
二選一執(zhí)行
中文語義:如果......不滿足......就...... ? (二選一執(zhí)行)
語法結構:if條件表達式:
條件執(zhí)行體1
else:
條件執(zhí)行體2 例:從鍵盤輸入一個整數,編寫程序讓計算機判斷是奇數還是偶數
num=int(input('請輸入一個整數'))
請輸入一個整數8
if?num%2==0:???????????????#條件判斷,如果是偶數和2的余數為0,奇數和2的余數為1. 二選一執(zhí)行。
????print(num,'是偶數')?????
else:
????print(num,'是奇數')
8 是偶數
3.多分支結構
多選一執(zhí)行,常用于解決連續(xù)的區(qū)間段問題
中文語義:身高在180以上嗎?不是
身高在170-180之間嗎?不是
身高在160-170之間嗎?不是
身高在150-160之間嗎?不是
身高在150以下嗎?是
語法結構:if 條件表達式1:? (條件表達式的為True,就不會往下繼續(xù)執(zhí)行了,條件表達式1為False,就會繼續(xù)往下執(zhí)行2)
條件執(zhí)行體1
elif條件表達式2:
條件執(zhí)行體2
elif條件表達式N:
條件執(zhí)行式N
[else:] (方括號的else是可以省略的,可寫可不寫)
條件執(zhí)行體N+1 例:從鍵盤錄入一個整數成績90-100 A 80-89 B 70-79 C 60-69 D 0-59 E 小于0或大于100 為非法數據(不在范圍內)
score=int(input('輸入一個成績:'))?
輸入一個成績:98
if?score>=90?and?score<=100:
????print('A級')
elif?score>=80?and?score<=89:
????print('B級')
elif?score>=70?and?score<=79:
????print('C級')
elif?score<=60?and?score<=69:
????print('D級')
elif?score>=0?and?score<=59:
????print('E級')
else:
????print('對不起,成績有誤,不在有限范圍')
A級
4.嵌套if
語法結構:
if 條件表達式1:#外分支結構條件表達式
if 內層條件表達式1:#內分支結構條件表達式,只有外分支結構的條件表達式1為True,才能執(zhí)行此行
內存條件執(zhí)行體1 #內分支結構條件執(zhí)行式
else:
內存條件執(zhí)行體2
else:條件執(zhí)行體 #外分支結構的條件執(zhí)行式,當外分支結構的條件表達式為False的時候,執(zhí)行此行
例:會員 ? ?>=200 ?8折
>=100 9折
不打折
非會員 ? >=200 9折
不打折
例1:會員
answer=input('您是會員嗎?y/n')
money=float(input('請輸入您的購物金額'))
您是會員嗎?y/ny
請輸入您的購物金額300
if?answer=='y':??????#是會員
????if?money>=200:
????????print('打8折,付款金額為:',money*0.8)
????elif?mone>=100:
????????print('打9折,付款金額為:',money*0.9)
else:???????????????#非會員
????if?money>=200:
????????print('打9.5折,付款金額:',money*0.95)
????else:
????????print('不打折,付款金額:',money)????????
打8折,付款金額為:240.0
例2:非會員
answer=input('您是會員嗎?y/n')
money=float(input('請輸入您的購物金額'))
您是會員嗎?y/nn
請輸入您的購物金額300
if?answer=='y':??????#是會員
????if?money>=200:
????????print('打8折,付款金額為:',money*0.8)
????elif?mone>=100:
????????print('打9折,付款金額為:',money*0.9)
else:???????????????#非會員
????if?money>=200:
????????print('打9.5折,付款金額:',money*0.95)
????else:
????????print('不打折,付款金額:',money)??
打9.5折,付款金額: 285.0
5.條件表達式
條件表達式是 :if......else的簡寫
語法結構:X if 判斷條件 else Y
運算法則:如果判斷條件的布爾值為True,條件表達式的返回值為X,否則條件表示的返回值為False
例:從鍵盤錄入兩個整數,比較兩個整數的大小
num_a=int(input('請輸入一個整數'))
num_b=int(input('請輸入一個整數'))
請輸入一個整數10
請輸入一個整數20
if?num_a>=num_b:
????print(num_a,'大于等于',num_b)
else:
????print(num_a,'小于',num_b)
10 小于 20
條件表達式的寫法(簡化代碼),也就是if......else的簡寫寫法如下:
print(str(num_a)+'大于等于'+str(num_b)??if?num_a>=num_b?else??str(num_a)+'小于'+str(num_b))
10小于20
6.pass語句
語句什么都不做,只是一個占位符,用在語法上需要語句的地方
什么時候使用:先搭建語法結構,還沒想好代碼怎么寫的時候
哪些語句一起使用:
if語句的條件執(zhí)行體
for-in語句的循環(huán)體
定義函數時的函數體
answer=input('您是會員嗎?y/n')????#判斷是否是會員
if?answer=='y':
????pass????????#沒想好是會員的時候代碼怎么寫,先用pass搭建語法結構,這樣語法不會報錯??
else:
????pass???????#沒想好是會員的時候代碼怎么寫,先用pass搭建語法結構,這樣語法不會報錯?
您是會員嗎?y/ny
循環(huán)結構
反復做同一件事情的情況,稱為循環(huán)
循環(huán)結構的流程圖
循環(huán)的分類:while
for-in
while循環(huán)語法機構:
while 條件表達式:
條件執(zhí)行式(循環(huán)體)
選擇機構的if與循環(huán)結構while的區(qū)別:if是判斷一次,條件為True執(zhí)行一行 while是判斷N+1次,條件為True執(zhí)行N次
#例:while 循環(huán)
a=1
#判斷條件表達式
while?a<10:???????
????#執(zhí)行條件執(zhí)行體
????print(a)
????a+=1
1
2
3
4
5
6
7
8
9
while循環(huán)的執(zhí)行流程
四部循環(huán)法:
初始化變量
條件判斷
條件執(zhí)行體(循環(huán)體)
改變變量 (初始化變量與條件判斷的變量與改變的變量為同一個)
while循環(huán)的執(zhí)行流程
例:計算0到4之間的累加和
sum=0?????????????????#用于存儲累加和
a=0???????????????????#1.初始化標量
while?a<5:???????????#2.條件判斷
????sum+=a???????????#3.條件執(zhí)行體(循環(huán)體)
????a+=1?????????????#4.改變變量
print('和為',sum)????
和為 10
例:計算0-100之間的偶數和
sum=0
a=1
while?a<=100:
????if?a%2==0:????????#替代代碼??偶、奇數?if?bool(a%2)==0:?????if?not?bool?(a%2):?
????????sum+=a
????a+=1
print('1-100之間的偶數和',sum)
1-100之間的偶數和 2550
for-in 循環(huán)
in表達從(字符串、序列等)中依次取值,又稱為遍歷
for-in遍歷的對象必須是可迭代對象
for-in 語法結構
for 自定義變量 in 可迭代對象:
循環(huán)體
for-in的執(zhí)行圖
循環(huán)體內不需要訪問自定義變量,可以將自定義變量替代為下_線
for?item?in?'Python':
????print(item)
P
y
t
h
o
n
for?i?in?range(10):
????print(i)
0
1
2
3
4
5
6
7
8
9
如果在循環(huán)中不需要使用自定義變量,可將自定義變量寫為“_”
for?_?in?range(5):????
????print('我愛學習')
我愛學習
我愛學習
我愛學習
我愛學習
我愛學習
例:使用for循環(huán)計算1-100之間的偶數和
sum=0???#用于儲存偶數和
for?a?in?range(1,101):
????if?a%2==0:
????????sum+=a
print('1-100之間偶數和:',sum)
1-100之間偶數和: 2550
流程控制語句break
用于結束循環(huán)結構,通常與分支結構if一起使用
for ...in ... :
......
if ... :
break
while(條件):
......
if ... :
break
例:從鍵盤錄入密碼,最多錄入3次,如果正確就結束循環(huán)
例1.(for ... in...)輸入三次不正確就結束循環(huán)
for?item?in?range(3):
????pwd=input('請輸入密碼:')?
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')????
請輸入密碼:999
密碼不正確
請輸入密碼:777
密碼不正確
請輸入密碼:666
密碼不正確
例2.(for?...?in...)輸入正確就結束循環(huán)
for?item?in?range(3):
????pwd=input('請輸入密碼:')?
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
請輸入密碼:888
密碼正確
例3.用(while)輸入三次不正確就結束循環(huán)
a=0????????????????????????????#自定義變量
while?a<3:????????????????????#條件判斷
????pwd=input('請輸入密碼:')??#條件執(zhí)行體(循環(huán)體)
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
????a+=1??????????????????????#改變變量
請輸入密碼:777
密碼不正確
請輸入密碼:999
密碼不正確
請輸入密碼:666
密碼不正確
例4.用(while)輸入正確就結束循環(huán)
a=0????????????????????????????#自定義變量????????
while?a<3:????????????????????#條件判斷
????pwd=input('請輸入密碼:')??#條件執(zhí)行體(循環(huán)體)
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
????a+=1?????????????????????#改變變量
請輸入密碼:888
密碼正確
流程控制語句continue
用于結束當前循環(huán),進入下一次循環(huán),通常與分支結構中的if一起使用
for ... in ...:
......
if ... :
continue
...
while(條件):
......
if ... :
continue
...
例:要求輸出1到50之間所有5的倍數,5,10,15,20.....
for?item?in?range(1,51):
????if?item%5!=0:
????????continue
????print(item)
5
10
15
20
25
30
35
40
45
50
else語句
與else語句配合使用的三種情況( if ?,else ?,while )
if......:
.....
else:
......
if條件表達式不成立時執(zhí)行else
while......:
......
else:
......
for......:
......
else:
......
與while,for搭配使用,沒有碰到break時執(zhí)行else
例1:與for搭配使用時,遇到break
for?item?in?range(3):
????pwd=input('請輸入密碼:')?
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
else:????????????????????????????????#這里的else是和for搭配使用的
????print('對不起,三次密碼均錯誤')
請輸入密碼:888
密碼正確
for?item?in?range(3):
????pwd=input('請輸入密碼:')?
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
else:????????????????????????????????#這里的else是和for搭配使用的
????print('對不起,三次密碼均錯誤')
請輸入密碼:777
密碼不正確
請輸入密碼:666
密碼不正確
請輸入密碼:999
密碼不正確
對不起,三次密碼均錯誤
例2.與while搭配使用時,遇到break
a=0
while?a<3:
????pwd=input('請輸入密碼')
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
????a+=1
else:
????print('對不起,三次密碼均錯誤')
請輸入密碼888
密碼正確
a=0
while?a<3:
????pwd=input('請輸入密碼')
????if?pwd=='888':
????????print('密碼正確')
????????break
????else:
????????print('密碼不正確')
????a+=1
else:
????print('對不起,三次密碼均錯誤')
請輸入密碼777
密碼不正確
請輸入密碼999
密碼不正確
請輸入密碼666
密碼不正確
對不起,三次密碼均錯誤
嵌套循環(huán)
循環(huán)結構中又嵌套了另外的完整的循環(huán)結構,其中內層循環(huán)作為外層循環(huán)的循環(huán)體執(zhí)行
例:輸出一個三行四咧的矩形
for?i?in?range(1,4):???????????#行數,執(zhí)行三次,一次是一行
????for?i?in?range(1,5):???????#列數,一行中執(zhí)行4次輸出
????????print('*',end='\t')?????#輸出的是*,不換行輸出
????print()
* * * *
* * * *
* * * *
for?i?in?range(1,10):
????for?j?in?range(1,i+1):
????????print(i,'*',j,'=',i*j,end='\t')
????print()
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
二重循環(huán)中的break和continue
二重循環(huán)中的break和contiue用于控制本層循環(huán)
流程控制語句break與continue在二重循環(huán)中的使用
例:
for?i?in?range(5):??????????#代表外層循環(huán)中要執(zhí)行5次
????for?j?in?range(1,10):???
????????if?j%2==0:
????????????break
????????print(j)
1
1
1
1
1
for?i?in?range(5):
????for?j?in?range(1,10):
????????if?j%2==0:
????????????continue
????????print(j,end='\t')
????print()
1 3 5 7 9
1 3 5 7 9
1 3 5 7 9
1 3 5 7 9
1 3 5 7 9
內置函數range()
內置函數:不需要加任何前綴,可以直接使用的函數(print,input都屬于內置函數)
range()函數
用于生成一個整數序列
創(chuàng)建range對象的三種方式:
1.range(stop):創(chuàng)建一個[0,stop)之間的整數序列,步長為1
2.range(start,stop):創(chuàng)建一個[start,stop)之間的整數序列,步長為1
3.range(start,stop,step):創(chuàng)建一個[start,stop)之間的整數序列,步長為step
返回值是一個迭代器對象
range類型的特點:不管range對象表示的整數序列有多長,所有range對象占用的內存空間都是相同的,因為僅僅需要存儲start,stop和step,只有當用到range對象時,才會去計算序列中的相關元素
in與not in 判斷整數序列中是否存在(不存在)指定的整數
1.第一種創(chuàng)建方式:只有一個參數(小括號中只給了一個數)
a=range(10)
print(a)?????
range(0, 10)
print(list(a))????#用于查看range對象中的整數序列,默認從0開始,默認相差1稱為步長,list是列表的意思
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2.第二種創(chuàng)建方式:給了兩個參數(小括號中給了兩個數)
a=range(1,10)?????#指定了起始值,從1開始,到10結束(不包括10),默認步長1
print(list(a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3.第三種創(chuàng)建方式:給了三個參數(小括號中給了三個數)
a=range(1,10,2)
print(list(a))???#指定了起始值,從1開始,到10結束(不包括10),指定了步長2
[1, 3, 5, 7, 9]
判斷指定的整數,在序列中是否存在 ? in與not in
print(10?in?a)
False
print(9?in?a)
True
print(10?not?in?a)
True
print(9?not?in?a)
False
對象的布爾值
python一切皆對象,所有的對象都有一個布爾值
獲取對象的布爾值,使用內置函數bool()
測試對象的布爾值,以下對象的布爾值為False,其它對象的布爾值均為True
print(bool(False))
False
print(bool(0))???#數字0
False
print(bool(0.0))??
False
print(bool(None))??
False
print(bool(''))???#長度為零的空字符串
False
print(bool(""))???#長度為零的空字符串
False
print(bool([]))????#空列表
False
print(bool(list()))??#空列表
False
print(bool())?????#空元組
False
print(bool(tuple()))???#空元組
False
print(bool({}))??#空字典
False
print(bool(dict()))??#空字典
False
對象的布爾值對執(zhí)行的影響,例:
age=int(input('請輸入您的年齡:'))??#輸入的0的布爾值為False
請輸入您的年齡:0
if?age:
????print(age)
else:
????print('年齡為:',age)????????#因為布爾值是False,所以執(zhí)行了else
年齡為: 0
?最后,依然是推薦螞蟻老師的《零基礎學Python》的系列課程:
