1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        新教材習(xí)題解析之python自定義函數(shù)

        共 3424字,需瀏覽 7分鐘

         ·

        2021-06-27 02:49

        說在前面

        一些老師在教授自定義函數(shù)時,把重點(diǎn)放在了語法教學(xué)上,我認(rèn)為這是不妥當(dāng)?shù)摹ython的自定義函數(shù)語法相當(dāng)復(fù)雜,其形式參數(shù)就有必需參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)參數(shù)、不定長參數(shù)等多種類型,更別說各種實(shí)參的變異寫法和復(fù)雜的閉包語法了。這些復(fù)雜的語法不是光靠死記硬背就能掌握的,需要多次實(shí)踐的積累才能逐步理解。

        我認(rèn)為自定義函數(shù)的教學(xué)重點(diǎn)應(yīng)該是讓學(xué)生理解模塊化編程的作用、初步掌握模塊化編程的方法、能夠根據(jù)需要設(shè)計(jì)自定義函數(shù)(包括明確函數(shù)功能、設(shè)置參數(shù)和返回值、并給出樣例演示等)。其中設(shè)計(jì)自定義函數(shù)是重中之重,需要反復(fù)練習(xí)和比較,力求達(dá)到意義明確、格式規(guī)范、表述簡明的目標(biāo)。

        從考查的角度來說,最理想的狀態(tài)是可以給出自定義函數(shù)的說明,讓學(xué)生根據(jù)說明自行編寫完整代碼,實(shí)現(xiàn)函數(shù)功能(這是機(jī)試的方法);由于是筆試,為了閱卷的方便,通常采用改錯或者填空的方法——也許今后會參考數(shù)學(xué)或物理大題目的做法,讓學(xué)生給出較為完整的代碼,根據(jù)知識點(diǎn)或結(jié)果給分——但這確實(shí)給閱卷帶來很大的困難。

        今天給大家分享的是2道以公民身份證號碼為背景的題目。由于新教材是塊新大陸,我們都是在摸索前行,加之本人水平有限,在描述題目用語和控制題目難度方面都存在不足,敬請大家批評指正。



        例5.(開放題)每位具有中華人民共和國國籍的公民都有一個唯一的, 不變的18位身份證號碼。公民身份號碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗(yàn)碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗(yàn)碼。

        其中順序碼表示在同一地址碼所標(biāo)識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編定的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。校驗(yàn)碼是根據(jù)前面十七位數(shù)字碼計(jì)算出來的檢驗(yàn)碼。
        現(xiàn)在請你設(shè)計(jì)一個自定義函數(shù),根據(jù)輸入的身份證號,輸出該公民的出生日期和性別。
        以下代碼能夠?qū)崿F(xiàn)上述功能,請將缺失的代碼補(bǔ)充完整,并寫出程序執(zhí)行后輸出的內(nèi)容。

        '''

        函數(shù)功能:根據(jù)輸入的身份證號,返回該公民的出生日期和性別

        函數(shù)名:id_Inf(id_num)

        參數(shù)表:id_num -- 存儲了18位身份證號碼的字符串。

        返回值:一個元組,包含了出生日期信息和性別。

        示例1:對于id_num='330281201010310640',返回(2010-10-31,女)

        示例2:對于id_num='330281200605302813',返回(2006-05-30,男)

        '''

        def id_Inf(id_num):

            birthday = id_num[6:10] + '-' +id_num[10:12] + '-' + ①      

            sex = '女男'

            r = ②        

            return (birthday, sex[r])

         

        id_num = '330281202002020648'

        birthday, sex = id_Inf(③       )

        print(birthday, sex)



        解析:本題考查自定義函數(shù)、字符串切片和拼接、字符串轉(zhuǎn)換成整數(shù)以及奇偶數(shù)判斷方法。

        根據(jù)題意可知字符串id_num中存儲了18位身份證號,其中id_num[6:14]存儲了出生日期碼,故第①空答案為id_num[12:14]。
        三位順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性,故只需判斷第17個數(shù)字的奇偶性即可。我們先提取第17個數(shù)字字符,使用int函數(shù)將其轉(zhuǎn)換為整數(shù),再對2求余數(shù)確定其奇偶性。注意第17個字符同時也是倒數(shù)第2個字符,所以第②空答案為int(id_num[16]) % 2 或 int(id_num[-2]) % 2。
        調(diào)用函數(shù)時,我們只需在函數(shù)名后面的圓括號里填寫實(shí)參id_num即可。函數(shù)返回一個包含了出生日期信息和性別的元組,我們可以使用兩個變量birthday和 sex來接收返回值。
        因?yàn)閕d_num='330281202002020648',故程序執(zhí)行后輸出:2020-02-02 女。

        答案:

        ① id_num[12:14]  

        ② int(id_num[16]) % 2 或 int(id_num[-2]) % 2  

        ③ id_num


        拓展思考:

        7.(開放題)每位具有中華人民共和國國籍的公民都有一個唯一的, 不變的18位身份證號碼。身份證號最后一位是根據(jù)前面十七位數(shù)字碼,按照ISO 7064:1983.MOD 11-2校驗(yàn)碼計(jì)算出來的檢驗(yàn)碼。計(jì)算方法:將前面的身份證號碼17位數(shù)分別乘以不同的系數(shù)。

        從第一位到第十七位的系數(shù)分別為:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
        將這17位數(shù)字和系數(shù)相乘的結(jié)果相加;用加出來的和除以11,看余數(shù)是多少,余數(shù)只可能有0、1、2、3、4、5、6、7、8、9、10這11個數(shù)字,其分別對應(yīng)的身份證最后一位號碼為1、0、X、9、8、7、6、5、4、3、2。
        例如,如果余數(shù)是3,身份證的第18位數(shù)字就是9;如果余數(shù)是2,身份證的最后一位號碼就是羅馬數(shù)字X。
        現(xiàn)在請你設(shè)計(jì)一個自定義函數(shù),根據(jù)輸入的18位身份證號碼,判斷該身份證是否為有效身份證。
        以下代碼能夠?qū)崿F(xiàn)上述功能,請認(rèn)真閱讀代碼,回答如下問題:

        (1)將缺失的代碼補(bǔ)充完整;

        (2)當(dāng)id_num='330281201010310640'時,函數(shù)返回值是什么?

        (3)能否使用求和函數(shù)sum(),結(jié)合列表生成式,用一行代碼代替原來的for循環(huán),快速求出17位數(shù)字和系數(shù)相乘的結(jié)果s?

        '''

        函數(shù)功能:根據(jù)輸入的18位身份證號碼,判斷該身份證是否為有效身份證。

        函數(shù)名:check_id_num(id_num)

        參數(shù)表:id_num -- 存儲了18位身份證號碼的字符串。

        返回值:如果是有效身份證號返回True,否則返回False。

        示例1:對于id_num='330281200605302813',返回True

        示例2:對于id_num='330281201010310641',返回False

        '''

        def check_id_num(id_num):

            factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) #校驗(yàn)碼系數(shù)

            remainder = '10X98765432' #余數(shù)表

            s = 0 #用來存儲17位數(shù)字和系數(shù)相乘的結(jié)果

            for i in range(len(factor)):

                s = ①      

            r = ②       

            return remainder[r] == id_num[-1]

        需要本文word版和拓展思考答案的,可以加入“Python算法之旅”知識星球參與討論和下載文件,Python算法之旅”知識星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。

        我們專注Python算法,感興趣就一起來!

        相關(guān)優(yōu)秀文章:

        閱讀代碼和寫更好的代碼

        最有效的學(xué)習(xí)方式

        函數(shù)與模塊典型例題

        字符串專題之中文大寫金額數(shù)字轉(zhuǎn)換工具

        新教材習(xí)題解析之python循環(huán)結(jié)構(gòu)

        新教材習(xí)題解析之python循環(huán)結(jié)構(gòu)(2)

        瀏覽 103
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲一级A片 | 色妞色视频一区二区三区四区 | 成人AAAA免费全部观看 | www午夜红桃视频 | 福利小视频在线观看 | 健身房被教练啪到腿软 | 国产精品国产自产拍几百部网站 | www.av天堂.com | 免费大香蕉伊人 | 免费高潮视频 |