<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3424字,需瀏覽 7分鐘

           ·

          2021-06-27 02:49

          說在前面

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

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

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

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



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

          其中順序碼表示在同一地址碼所標識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編定的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。校驗碼是根據(jù)前面十七位數(shù)字碼計算出來的檢驗碼。
          現(xiàn)在請你設(shè)計一個自定義函數(shù),根據(jù)輸入的身份證號,輸出該公民的出生日期和性別。
          以下代碼能夠?qū)崿F(xiàn)上述功能,請將缺失的代碼補充完整,并寫出程序執(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ù)名后面的圓括號里填寫實參id_num即可。函數(shù)返回一個包含了出生日期信息和性別的元組,我們可以使用兩個變量birthday和 sex來接收返回值。
          因為id_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校驗碼計算出來的檢驗碼。計算方法:將前面的身份證號碼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ù)字,其分別對應的身份證最后一位號碼為1、0、X、9、8、7、6、5、4、3、2。
          例如,如果余數(shù)是3,身份證的第18位數(shù)字就是9;如果余數(shù)是2,身份證的最后一位號碼就是羅馬數(shù)字X。
          現(xiàn)在請你設(shè)計一個自定義函數(shù),根據(jù)輸入的18位身份證號碼,判斷該身份證是否為有效身份證。
          以下代碼能夠?qū)崿F(xiàn)上述功能,請認真閱讀代碼,回答如下問題:

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

          (2)當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) #校驗碼系數(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)秀文章:

          閱讀代碼和寫更好的代碼

          最有效的學習方式

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

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

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

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

          瀏覽 103
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  自拍视频在线网址 | 人妻AV无码 | 亚洲欧美成人在线 | jizz麻豆 | 国产三级精品三级 |