【筆記】《python語言程序設(shè)計》——程序的控制結(jié)構(gòu)

一、前言

學(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)

  1. 單分支結(jié)構(gòu)

    單分支示例:

    guess=eval(input())
    if guess==99:
        print('猜對了')
    
  2. 二分支結(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 '錯'))
    
  3. 多分支結(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)

  4. 條件判斷及組合

    ①操作符

    操作符 描述
    < 小于
    <= 小于等于
    >= 大于等于
    > 大于
    == 等于
    != 不等于
    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('猜對了')
    
  5. 程序的異常處理

    ①異常處理的基本使用

    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

bmi.png
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)

  1. 遍歷循環(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:
        <語句塊>
    
  2. 無限循環(huán):由條件控制的循環(huán)運行方式

    #反復(fù)執(zhí)行語句塊,直到條件不滿足時結(jié)束
    while <條件>:
        <語句塊>
    #示例,無限循環(huán)的條件
    a=3
    while a>0:
        a=a-1
        print(a)
    
  3. 循環(huán)控制保留字:breakcontinue

    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)

    breakcontinue:可以與forwhile循環(huán)搭配使用

循環(huán)保留字.png
  1. 循環(huán)的高級用法:循環(huán)與else

    ①當(dāng)循環(huán)沒有被break語句退出時,執(zhí)行else語句塊

    ②else語句塊作為“正?!蓖瓿裳h(huán)的獎勵

    ③這里else的用法與異常處理中else用法相似

循環(huán)與else.png

4.模塊3:random庫的使用

  1. random庫基本介紹

    ①random庫是使用隨機數(shù)的Python標(biāo)準(zhǔn)庫

    ②random庫主要用于生成隨機數(shù)

    ③使用:import random

    ④需要掌握的能力:能夠利用隨機數(shù)種子產(chǎn)生“確定”偽隨機數(shù);能夠產(chǎn)生隨機整數(shù);能夠?qū)π蛄蓄愋瓦M行隨機操作;

  2. 基本隨機數(shù)函數(shù)

    函數(shù) 描述
    seed(a=None) 初始化給定的隨機數(shù)種子,默認為當(dāng)前系統(tǒng)時間
    random() 生成一個[0.0,1.0)之間的隨機小數(shù)
基本隨機數(shù)函數(shù).png
  1. 擴展隨機數(shù)函數(shù)

    函數(shù) 描述
    randint(a,b) 生成一個[a,b]之間的整數(shù)
    randrange(m,n[,k]) 生成一個[m,n)之間以k為步長的隨機整數(shù)<br />randrange(10,100,10)結(jié)果可能為80
    getrandbits(k) 生成一個k比特長的隨機整數(shù)<br />random.getrandbits(16)結(jié)果可能為37885
    uniform(a,b) 生成一個[a,b]之間的隨機小數(shù)<br />random.uniform(10,100)結(jié)果可能為13.096321648808136
    choice(seq) 從序列seq中隨機選擇一個元素<br />random.choice([1,2,3,4,5,6,7,8,9])結(jié)果可能為8
    shuffle(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)度!
學(xué)不會就學(xué)不會.png

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ù)類型。

  1. 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。

  1. k=10000
    while k>1:
        print(k)
        k=k/2
    

哪個選項給出了上述程序的輸出次數(shù)?

A 15 B 1000 C 13 D 14

請跟隨程序計算或在IDLE中運行程序獲得結(jié)果。

  1. 哪個選項是程序的三種基本結(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)等說法

  1. 哪個選項關(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)是有其作用的。

  1. 關(guān)于Python語句P=-P,哪個選項的描述是正確的?

    A 給P賦值為它的負數(shù)

    B P等于它的負數(shù)

    C P=0

    D P的絕對值

turtle.pendown()只是放下畫筆,并不繪制任何內(nèi)容。

  1. 哪個選項是用來判斷當(dāng)前Python語句在分支結(jié)構(gòu)中?

    A 縮進 B 冒號 C 引號 D 大括號

縮進表達層次關(guān)系。

  1. 哪個選項是下面代碼的執(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)。

  1. 哪個選項是random庫中用于生成隨機小數(shù)的函數(shù)?

    A randrange() B randint() C random() D getrandbits()

randint()、getrandbits()、randrange()都產(chǎn)生隨機整數(shù),random()產(chǎn)生0到1之間的隨機小數(shù)。

  1. 關(guān)于try-except,哪個選項的描述是錯誤的??

    A NameError是一種異常類型

    B 用于對程序的異常進行捕捉和處理

    C 表達了一種分支結(jié)構(gòu)的特點

    D 使用了異常處理,程序?qū)⒉粫俪鲥e

使用了異常處理,程序可能運行不會出錯,但邏輯上可能出錯。程序錯誤是一個大概念,不僅指代碼運行錯誤,更代表功能邏輯錯誤。

2.程序設(shè)計題

  1. 四位玫瑰數(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)
  1. 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ù)格式化

【筆記】《python語言程序設(shè)計》——程序設(shè)計方法學(xué)

【筆記】《python語言程序設(shè)計》——python計算生態(tài)概覽

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 一、程序的分支結(jié)構(gòu) 1、單分支結(jié)構(gòu) 根據(jù)判斷條件結(jié)果而選擇不同向前路徑的運行方式 if <條件>: <...
    墨小涼閱讀 521評論 0 0
  • 4.1 分支結(jié)構(gòu) 4.1.1 單分支結(jié)構(gòu) 基本構(gòu)成: if <條件>: <語句1> 基本實例: guess=e...
    d4829fc4d3cc閱讀 304評論 0 0
  • 即使面對同一個人,你的所見所聽所想,也會在不同心境下,感受到不同的味道。即使面對曾經(jīng)是戀人的那個ta,以前ta訴說...
    思遠說閱讀 403評論 2 6
  • 我有一段幻象 在混沌的晨霧升騰與工業(yè)煙塵毒害鼻腔之前 是剜出的荷魯斯之眼 在廉價旅館的單薄的床單 床單上面是瘋狂情...
    RealSugarCane閱讀 747評論 1 5
  • 今天, 我在國旗下面敬禮時總會想:國旗在天空中飛揚,他能看見我們的一舉一動,他身上那五顆星星不時的發(fā)出一絲光亮,他...
    牛廣宇閱讀 911評論 0 0

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