.net mvc actionresult 返回字符串_字符串游戏之无效的身份证
?出場人物介紹
小美:小學4年級學生,參加了學校的編程興趣小組,已經了解了Python語言的基本語法,能夠看懂一些簡單的程序。她做事風風火火,對所有的事情都很好奇,喜歡打破砂鍋問到底,是一個叫人又愛又恨的小丫頭。
阿福:一個酷愛編程的8年級男生。大家都說他長得像國寶大熊貓,動作緩慢,憨態可掬。他做事情確實夠慢的,連說話也慢條斯理,可是他一點也不擔心,他常常說:“慢就是快,只要堅持下去,蝸牛也能爬上金字塔。”
古老師:雖然年近不惑,但依然對生活充滿熱情。“愛生活愛運動”是他的人生信條,和孩子們一起編程是他最大的樂趣。他神出鬼沒,總是在孩子們最需要幫助的時候出現。當然,你也不能動不動就找古老師,因為他很忙,非常非常忙。所以,遇到問題還是自己先思考吧。
“Python算法之旅”微信群等著你掃碼加入“Python算法之旅”微信群,和斌哥面對面交流,更多資料和更有趣的話題等你一起來分享。
?正文
字符串游戲之無效的身份證
小美:阿福,上次古老師留下的檢驗身份證號問題,你找到答案了嗎?
阿福:找到了。身份證最后一位是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。
計算方法:將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
將這17位數字和系數相乘的結果相加;用加出來的和除以11,看余數是多少,余數只可能有0、1、2、3、4、5、6、7、8、9、10這11個數字,其分別對應的身份證最后一位號碼為1、0、X、9、8、7、6、5、4、3、2。
例如,如果余數是0,身份證的第18位數字就是1;如果余數是2,身份證的最后一位號碼就是羅馬數字X。
小美:原來是這樣。那你上次在示例2中給出的身份證號“330281201010310641”,是先將前17位數字和系數相乘的結果相加,即3*7+3*9+0*10+2*5+8*8+1*4+2*2+0*1+1*6+0*3+1*7+0*9+3*10+1*5+0*8+6*4+4*2 = 210,再將210對11求余數,結果為1。所以,身份證號最后一位數字應該是0。
阿福:沒錯。既然你已經知道了檢驗的原理,那你能不能設計一個函數,根據輸入的18位身份證號碼,判斷該身份證是否為有效身份證呢?
小美:這有什么難的!看我的。
?問題1
函數功能:根據輸入的18位身份證號碼,判斷該身份證是否為有效身份證。
函數名:check_id_num(id_num: str) -> bool
參數表:id_num -- 存儲了18位身份證號碼的字符串。
返回值:如果是有效身份證號返回True,否則返回False。
示例1:輸入id_num='330281200605302813',返回True
示例2:輸入id_num='330281201010310641',返回False
?代碼1
def check_id_num(id_num): factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) #校驗碼系數 remainder = '10X98765432' #余數表 s = 0 for i in range(len(factor)):????????s?+=?factor[i]?*?int(id_num[i]) r = s % 11 return remainder[s%11] == id_num[-1]古老師:小美進步很大啊!函數已經寫得有模有樣了。對了,阿福,你聽說過map()函數嗎?阿福:知道啊,map()函數是一個高階函數,它接收兩個參數,一個是函數,一個是迭代器(可迭代對象),map將傳入的函數依次作用到序列的每個元素,并把結果作為新的迭代器返回。例如我們有一個函數f(x) = x * x,把該函數作用在一個列表[1, 2, 3, 4, 5, 6]上,就可以用map()實現如下:
?代碼2
def f(x): return x * xa = list(map(f, [1, 2, 3, 4, 5, 6]))這樣就可以得到列表a = [1, 4, 9, 16, 25, 36]。古老師:不錯,知識點記得挺牢啊!那你知道匿名函數嗎?能不能把上面的語句用匿名函數表示?阿福:可以,這樣只需要一條語句就夠了:?代碼3
a = list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6]))?知識小貼士
python 使用 lambda 來創建匿名函數。所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。lambda的主體是一個表達式,而不是一個代碼塊,它的語法只包含一個語句,如下:lambda [arg1 [,arg2,.....argn]]:expression
古老師:沒錯。那你現在再看看小美寫的check_id_num()函數,能不能使用map()函數來表達呢?
阿福:這個。。。。。。我明白了!可以先使用map()函數生成一個新的序列,再使用內置函數sum()對序列求和,這樣可以用一條賦值語句代替原來的for循環。
?代碼4
def check_id_num(id_num): factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) #校驗碼系數 remainder = '10X98765432' #余數表 s = sum(map(lambda x, y: x * int(y), factor, id_num)) return remainder[s%11] == id_num[-1]古老師:不錯不錯!看來你已經領會到map()函數的精髓了。繼續努力,迎接更大的挑戰。今天就到這吧,下次有事記得叫我。溫馨提示:
有事沒事最好拉到文末看看,說不定作者今天提供了彩蛋哦!說在后面Python算法之旅系列文章源于我平時收集和整理的一些題目,我嘗試用自己的語言把這些題目進行了再創作。由于本人水平有限,表述中難免出現疏漏甚至錯誤之處,敬請諒解。
無論是贊同還是反對我的看法,都請你給我留言。如果你有新的想法,千萬不要憋在心里,請發出來大家一起討論。讓我們相互學習,共同進步!
需要本文word版的,可以加入“Python算法之旅”知識星球參與討論和下載文件,“Python算法之旅”知識星球匯集了數量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。
我們專注Python算法,感興趣就一起來!
?彩蛋
除了使用map()函數生成一個新的序列,我們還可以用列表生成器來生成新序列,然后使用sum()函數對序列求和。
?代碼5
def check_id_num(id_num): factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) #校驗碼系數 remainder = '10X98765432' #余數表 s = sum([factor[i] * int(id_num[i]) for i in range(len(factor))]) r = s % 11 return remainder[s%11] == id_num[-1]相關優秀文章:
閱讀代碼和寫更好的代碼
最有效的學習方式
字符串游戲之身份證號的秘密
總結
以上是生活随笔為你收集整理的.net mvc actionresult 返回字符串_字符串游戏之无效的身份证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wordpress怎么设置文章页面不打开
- 下一篇: cad把图形切成两部分_0基础7天速成C