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