一、前言
學(xué)習(xí)就是一個不斷的自下而上,自上而下的過程。
前段時間,學(xué)著用python實現(xiàn)網(wǎng)站的數(shù)據(jù)爬取,隱約get到python的一些語法和用法,感覺就是語法不難,關(guān)鍵在于解決問題的思維。
這是需求驅(qū)動后的學(xué)習(xí)。接下來,就需要對python進行系統(tǒng)地了解。
很早之前搜知乎的時候,就搜到MOOC上的一門《python語言程序設(shè)計》課程,講得很好,而且,我還下載了課件,溜了一遍,感覺就挺有趣的。
趁著有了實戰(zhàn)經(jīng)驗,就把這門入門課刷了一遍。果然是門好課!很適合小白入門,并系統(tǒng)學(xué)習(xí),整個教學(xué)過程循序漸進,深入淺出,提綱挈領(lǐng),很有意思!
課程是北京理工大學(xué)嵩天老師的《python語言程序設(shè)計》課程,現(xiàn)在已經(jīng)開了11次課了。課程每個小視頻短則幾分鐘,最長也不超過20分鐘,不容易勸退。每章講解有復(fù)習(xí)回顧及小結(jié),在平臺python123上有每章的練習(xí)和測試,直接反饋結(jié)果,激發(fā)繼續(xù)學(xué)下去的興趣。
個人感覺,老師說話速度慢了些,調(diào)成了2倍速播放,然后,花了大約3天的時間,把所有的視頻,課件,練習(xí)和測試都刷了一遍,感覺對python的了解更系統(tǒng)了!
趁熱打鐵,把每章的知識點和練習(xí)、測試再進行整理回顧一下。
以下內(nèi)容均來自課程:《python語言程序設(shè)計》 及平臺python123,感興趣的看課程視頻,親自練習(xí),效果更好~
二、知識點
1. 程序的分支結(jié)構(gòu)
-
單分支結(jié)構(gòu)
單分支示例:
guess=eval(input()) if guess==99: print('猜對了') -
二分支結(jié)構(gòu)
①二分支示例:
guess=eval(input()) if guess==99: print('猜對了') else: print('猜錯了')②緊湊形式:適用于簡單表達式的二分之結(jié)構(gòu)
<表達式1> if <條件> else <表達式2>guess=eval(input()) print('猜{}了'.format('對' if guess==99 else '錯')) -
多分支結(jié)構(gòu)
①多分支結(jié)構(gòu)示例:
score=eval(input()) if score>=60: grade='D' elif score>=70: grade='C' elif score>=80: grade='B' elif score>=90: grade='A' print('輸入成績屬于級別{}'.format(grade))②程序的控制結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
-
條件判斷及組合
①操作符
操作符 描述 <小于 <=小于等于 >=大于等于 >大于 ==等于 !=不等于 x and y兩個條件x和y的邏輯 與x or y兩個條件x和y的邏輯 或not x條件x的邏輯 非②示例
guess=eval(input()) if guess>99 or guess<99: print('猜錯了') else: print('猜對了') -
程序的異常處理
①異常處理的基本使用
try: <語句塊1> except: <語句塊2>②示例1
try: num=eval(input('請輸入一個整數(shù):')) print(num**2) except: print('輸入不是整數(shù)')③示例2
# 標(biāo)注異常類型后,僅響應(yīng)此類異常,異常類型名字等同于變量名 try: num=eval(input('請輸入一個整數(shù):')) print(num**2) except NameError: print('輸入不是整數(shù)')④異常處理的高級使用
try: <語句塊1> except: <語句塊2> # else對應(yīng)語句塊3,在不發(fā)生異常時執(zhí)行 else: <語句塊3> # finally對應(yīng)語句塊4,一定執(zhí)行 finally: <語句塊4>
2. 實例5:身體質(zhì)量指數(shù)BMI
描述:同時輸出國際和國內(nèi)對應(yīng)的分類
BMI=體重(kg)/身高2(m2)

height, weight=eval(input('請輸入身高(米)和體重(公斤)[逗號隔開]:'))
bmi=weight/pow(height,2)
print('BMI數(shù)值為:{:.2f}'.format(bmi))
who,nat='',''
if bmi<18.5:
who,nat='偏瘦','偏瘦'
elif 18.5<=bmi<24:
who,nat='正常','正常'
elif 24<=bmi<25:
who,nat='正常','偏胖'
elif 25<=bmi<28:
who,nat='偏胖','偏胖'
elif 28<=bmi<30:
who,nat='偏胖','肥胖'
else:
who,nat='肥胖','肥胖'
print("BMI指標(biāo)為:國際'{0}',國內(nèi)'{1}'".format(who.nat))
3.程序的循環(huán)結(jié)構(gòu)
-
遍歷循環(huán)
①語法:
for <循環(huán)遍歷> in <遍歷結(jié)構(gòu)>: <語句塊>②舉例:
#計數(shù)循環(huán)(N次) for i in range(N): <語句塊> #計數(shù)循環(huán)(特定次) for i in range(M,N,k): <語句塊> #字符串遍歷循環(huán) for i in s: <語句塊> #列表遍歷循環(huán),ls是一個列表,遍歷其每個元素,產(chǎn)生循環(huán) for item in ls: <語句塊> #文件遍歷循環(huán),fi是一個文件標(biāo)識符,遍歷其每行,產(chǎn)生循環(huán) for line in fi: <語句塊> -
無限循環(huán):由條件控制的循環(huán)運行方式
#反復(fù)執(zhí)行語句塊,直到條件不滿足時結(jié)束 while <條件>: <語句塊> #示例,無限循環(huán)的條件 a=3 while a>0: a=a-1 print(a) -
循環(huán)控制保留字:
break和continue①
break:跳出并結(jié)束當(dāng)前整個循環(huán),執(zhí)行循環(huán)后的語句,僅跳出當(dāng)前最內(nèi)層循環(huán)②
continue:結(jié)束當(dāng)次循環(huán),繼續(xù)執(zhí)行后續(xù)次數(shù)循環(huán)③
break和continue:可以與for和while循環(huán)搭配使用

-
循環(huán)的高級用法:循環(huán)與
else①當(dāng)循環(huán)沒有被break語句退出時,執(zhí)行else語句塊
②else語句塊作為“正?!蓖瓿裳h(huán)的獎勵
③這里else的用法與異常處理中else用法相似

4.模塊3:random庫的使用
-
random庫基本介紹
①random庫是使用隨機數(shù)的Python標(biāo)準(zhǔn)庫
②random庫主要用于生成隨機數(shù)
③使用:
import random④需要掌握的能力:能夠利用隨機數(shù)種子產(chǎn)生“確定”偽隨機數(shù);能夠產(chǎn)生隨機整數(shù);能夠?qū)π蛄蓄愋瓦M行隨機操作;
-
基本隨機數(shù)函數(shù)
函數(shù) 描述 seed(a=None)初始化給定的隨機數(shù)種子,默認為當(dāng)前系統(tǒng)時間 random()生成一個[0.0,1.0)之間的隨機小數(shù)

-
擴展隨機數(shù)函數(shù)
函數(shù) 描述 randint(a,b)生成一個[a,b]之間的整數(shù) randrange(m,n[,k])生成一個[m,n)之間以k為步長的隨機整數(shù)<br /> randrange(10,100,10)結(jié)果可能為80getrandbits(k)生成一個k比特長的隨機整數(shù)<br /> random.getrandbits(16)結(jié)果可能為37885uniform(a,b)生成一個[a,b]之間的隨機小數(shù)<br /> random.uniform(10,100)結(jié)果可能為13.096321648808136choice(seq)從序列seq中隨機選擇一個元素<br /> random.choice([1,2,3,4,5,6,7,8,9])結(jié)果可能為8shuffle(seq)將序列seq中元素隨機排列,返回打亂后的序列<br /> s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s)結(jié)果可能為[3,5,8,9,6,1,2,7,4]- PS:哈哈,就喜歡這種態(tài)度!

5.實例6:圓周率的計算
描述:求解圓周率可以采用蒙特卡羅方法,在一個正方形中撒點,根據(jù)在1/4圓內(nèi)點的數(shù)量占總?cè)鳇c數(shù)的比例計算圓周率值。
from random import random
from time import perf_counter
DARTS=1000*1000
hits=0.0
start=perf_counter()
for i in range(1,DARTS+1):
x,y=random(),random()
dist=pow(x**2,y**2,0.5)
if dist<=1.0:
hits=hits+1
pi=4*(hits/DARTS)
print('圓周率值是:{}'.format(pi))
print('運行時間是:{:.5f}s'.format(perf_counter()-start))
三、練習(xí)
1.實例5:身體質(zhì)量指數(shù)BMI
同上
2. 實例6:圓周率的計算
同上
3. 整數(shù)的加減和
描述:編寫程序計算如下數(shù)列的值:
1-2+3-4...966
其中,所有數(shù)字為整數(shù),從1開始遞增,奇數(shù)為正,偶數(shù)為負
r=1
for i in range(2,967):
if i%2==0:
r=eval(str(r)+'-'+str(i))
else:
r=eval(str(r)+'+'+str(i))
print(r)
4. 三位水仙花數(shù)
描述:"水仙花數(shù)"是指一個三位整數(shù),其各位數(shù)字的3次方和等于該數(shù)本身。
例如:ABC是一個"3位水仙花數(shù)",則:A的3次方+B的3次方+C的3次方 = ABC。
請按照從小到大的順序輸出所有的3位水仙花數(shù),請用"逗號"分隔輸出結(jié)果。
k=''
for i in range(100,1000):
k1=i//100
k2=(i-k1*100)//10
k3=i-k1*100-k2*10
if pow(k1,3)+pow(k2,3)+pow(k3,3)==i:
k+=str(i)+','
print(k.rstrip(','))
5.用戶登錄的三次機會
描述:給用戶三次輸入用戶名和密碼的機會,要求如下:
1)如輸入第一行輸入用戶名為‘Kate’,第二行輸入密碼為‘666666’,輸出‘登錄成功!’,退出程序;
2)當(dāng)一共有3次輸入用戶名或密碼不正確輸出“3次用戶名或者密碼均有誤!退出程序?!?。
for i in range(1,4):
ID=input()
pw=input()
if (ID=='Kate')&(pw=='666666'):
print('登錄成功!')
break
else:
print('3次用戶名或者密碼均有誤!退出程序。')
四、測試
1.選擇題
for var in ___:
print(var)
哪個選項不符合上述程序空白處的語法要求?
A "Hello"
B (1,2,3)
C range(0,10)
D {1;2;3;4;5}
for .. in .. 中 in 的后面需要是一個迭代類型(組合類型),{1;2;3;4;5}不是Python的有效數(shù)據(jù)類型。
for i in range(0,2): print(i)
哪個選項是以上程序的輸出結(jié)果?
A 1 B 1 2 C 0 1 2 D 0 1
range(0, 2)輸出兩個值:0和1。
k=10000 while k>1: print(k) k=k/2
哪個選項給出了上述程序的輸出次數(shù)?
A 15 B 1000 C 13 D 14
請跟隨程序計算或在IDLE中運行程序獲得結(jié)果。
-
哪個選項是程序的三種基本結(jié)構(gòu)?
A 順序結(jié)構(gòu),跳轉(zhuǎn)結(jié)構(gòu),循環(huán)結(jié)構(gòu)
B 過程結(jié)構(gòu),對象結(jié)構(gòu),函數(shù)結(jié)構(gòu)
C 順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu)
D 過程結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu)
無對象結(jié)構(gòu)、跳轉(zhuǎn)結(jié)構(gòu)、過程結(jié)構(gòu)等說法
-
哪個選項關(guān)于循環(huán)結(jié)構(gòu)的描述是錯誤的?
A 條件循環(huán)和遍歷循環(huán)結(jié)構(gòu)都是基本的循環(huán)結(jié)構(gòu)
B 循環(huán)是一種程序的基本控制結(jié)構(gòu)
C 循環(huán)是程序根據(jù)條件判斷結(jié)果向后反復(fù)執(zhí)行的一種運行方式
D 死循環(huán)無法退出,沒有任何作用
死循環(huán)能夠用于測試性能,形式上的死循環(huán)可以用break來退出,例如:
x = 10 while True: x = x - 1 if x == 1: break死循環(huán)是有其作用的。
-
關(guān)于Python語句P=-P,哪個選項的描述是正確的?
A 給P賦值為它的負數(shù)
B P等于它的負數(shù)
C P=0
D P的絕對值
turtle.pendown()只是放下畫筆,并不繪制任何內(nèi)容。
-
哪個選項是用來判斷當(dāng)前Python語句在分支結(jié)構(gòu)中?
A 縮進 B 冒號 C 引號 D 大括號
縮進表達層次關(guān)系。
- 哪個選項是下面代碼的執(zhí)行結(jié)果?
for s in "PYTHON":
if s=="T":
continue
print(s,end="")
A TT B PYTHON C PY D PYHON
continue結(jié)束當(dāng)次循環(huán),但不跳出當(dāng)前循環(huán)。
-
哪個選項是random庫中用于生成隨機小數(shù)的函數(shù)?
A randrange() B randint() C random() D getrandbits()
randint()、getrandbits()、randrange()都產(chǎn)生隨機整數(shù),random()產(chǎn)生0到1之間的隨機小數(shù)。
-
關(guān)于try-except,哪個選項的描述是錯誤的??
A NameError是一種異常類型
B 用于對程序的異常進行捕捉和處理
C 表達了一種分支結(jié)構(gòu)的特點
D 使用了異常處理,程序?qū)⒉粫俪鲥e
使用了異常處理,程序可能運行不會出錯,但邏輯上可能出錯。程序錯誤是一個大概念,不僅指代碼運行錯誤,更代表功能邏輯錯誤。
2.程序設(shè)計題
- 四位玫瑰數(shù)
描述:四位玫瑰數(shù)是4位數(shù)的自冪數(shù)。自冪數(shù)是指一個 n 位數(shù),它的每個位上的數(shù)字的 n 次冪之和等于它本身。
例如:當(dāng)n為3時,有1^3 + 5^3 + 3^3 = 153,153即是n為3時的一個自冪數(shù),3位數(shù)的自冪數(shù)被稱為水仙花數(shù)。
請輸出所有4位數(shù)的四位玫瑰數(shù),按照從小到大順序,每個數(shù)字一行。
for i in range(1000,10000):
k1=i//1000
k2=(i-k1*1000)//100
k3=(i-k1*1000-k2*100)//10
k4=i-k1*1000-k2*100-k3*10
if pow(k1,4)+pow(k2,4)+pow(k3,4)+pow(k4,4)==i:
print(i)
- 100以內(nèi)素數(shù)之和
描述:求100以內(nèi)所有素數(shù)之和并輸出。
素數(shù)指從大于1,且僅能被1和自己整除的整數(shù)。
提示:可以逐一判斷100以內(nèi)每個數(shù)是否為素數(shù),然后求和。
m=0
for i in range(2,101):
for k in range(2,101):
if (i%k==0)&(i!=k):
break
else:
m=m+i
print(m)
【筆記】《python語言程序設(shè)計》—Python基本語法元素
【筆記】《python語言程序設(shè)計》—Python基本圖形繪制
【筆記】《python語言程序設(shè)計》——基本數(shù)據(jù)類型
【筆記】《python語言程序設(shè)計》——程序的控制結(jié)構(gòu)
【筆記】《python語言程序設(shè)計》——函數(shù)和代碼復(fù)用
【筆記】《python語言程序設(shè)計》——組合數(shù)據(jù)類型
【筆記】《python語言程序設(shè)計》——文件和數(shù)據(jù)格式化