Python算法之旅字符串游戏之身份证号的秘密

    最近在力扣(LeetCode)网闲逛,发现很多题目的官方题解都是用Python语言来描述的,这说明大家已经逐渐认识到Python语言描述算法的优越性:它语法简明,内置函数丰富,表述直截了当,可以用最简明清晰的方式实现算法思想。

    现在的编程教育起点偏高,难度堪比奥数,令大量孩子望而却步,成了少数算法思维特别强的学生的“专利”。将来高中信息技术要学习Python语言,初中小学也要跟进,全面提升学生的计算思维。现有的编程教程要么内容太浅,只简单地介绍了Python语法知识,要么难度太大,目标直奔信息奥赛,不适合普通学生学习。

    笔者不才,愿意做一个架桥铺路的人,希望通过设置一些难度适当、生动有趣的案例,帮助孩子进一步掌握Python的基本数据结构,进一步理解顺序、选择和循环等算法结构,学会使用解析、枚举和模拟等算法思想来解决问题,提升算法思维和逻辑能力。

    经过一段时间的调研,我设计了一条从入门到提高的算法教学路径,并搜集了大量相关素材,整理好后将逐步在“Python算法之旅”微信公众号推送系列文章。

    为了使表述的方法更灵活,视角更多元,语言更生动,我打算使用人物对话的方式来展示解题思路和知识点,希望大家能够喜欢。


出场人物介绍:

小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序。她做事风风火火,对所有的事情都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨的小丫头。

阿福:一个酷爱编程的8年级男生。大家都说他长得像国宝大熊猫,动作缓慢,憨态可掬。他做事情确实够慢的,连说话也慢条斯理,可是他一点也不担心,他常常说:“慢就是快,只要坚持下去,蜗牛也能爬上金字塔。”

古老师:虽然年近不惑,但依然对生活充满热情。“爱生活爱运动”是他的人生信条,和孩子们一起编程是他最大的乐趣。他神出鬼没,总是在孩子们最需要帮助的时候出现。当然,你也不能动不动就找古老师,因为他很忙,非常非常忙。所以,遇到问题还是自己先思考吧。


字符串游戏之身份证号的秘密

小美:最近听我们老师说网上有很多骗子利用人们泄露的身份信息进行诈骗活动,很多人都上当了呢。老师提醒我们不要随意把自己的身份证号告诉别人,以防被坏人利用。身份证号上面真的包含了很多关于我们的个人信息吗?

阿福:是的,每位具有中华人民共和国国籍的公民都有一个唯一的、不变的18位身份证号码。

小美:18位?那么多啊!

阿福:是的,必须要这么多,否则太短了不够用。这18个号码排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。例如我的身份证号是“330281200605302813”,那么“330281”代表我的出生地 “浙江省余姚市”,“20060530”代表我的出生日期是2006年5月30日,“281”是顺序码,最后一个数字“3”是校验码。

小美:地址码和出生日期码我能理解。什么是顺序码和校验码呢?

阿福:顺序码表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。校验码是根据前面十七位数字码计算出来的检验码,它是判断身份证号是否有效的一个依据。

小美:原来是这样啊!那就是说只要知道了我的身份证号,就可以知道我哪天生日了?

阿福:是的,不仅仅是知道你的生日,还有出生地和性别呢。小美,其实我们可以使用Python编写一个程序,根据输入的18位身份证号,输出该公民的出生日期和性别。

小美:这个简单,不就是使用字符串的切片方法访问子串吗,看我的。


问题:根据输入的18位身份证号,输出该公民的出生日期和性别。


代码:

id_num = input("请输入身份证号:")

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

sex = '男' if int(id_num[14:17])% 2 == 1 else '女'

print(birthday, sex)


古老师:小美真棒!这段代码很漂亮啊!阿福,你能把这段代码的功能抽象成一个函数吗?

阿福:当然可以啦,我还可以写出和小美不一样的代码呢。


函数功能:根据输入的18位身份证号,返回该公民的出生日期和性别。

函数名:id_Inf(id_num:str) -> tuple

参数表:id_num -- 存储了18位身份证号码的字符串。

返回值:一个元组,包含了出生日期信息和性别。

示例1:输入id_num='330281200605302813',返回(2006-05-30, 男)

示例2:输入id_num='330281201010310641',返回(2010-10-31, 女)


代码:

def id_Inf(id_num: str) -> tuple:

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

   sex = '女男'

    r =int(id_num[16]) % 2

   return (birthday, sex[r])


小美:阿福,你不错啊!竟然使用sex字符串来代替了我的if语句,而且只提取了顺序码的最后一个数字来判断其奇偶性,确实比我强!不过我知道提取第17个字符还有另外一种写法,那就是id_num[-2]。

古老师:确实是这样,你们两个都很不错,都熟练地掌握了字符串切片和拼接的方法。但是我要指出的是,阿福在示例2中给出的身份证号“330281201010310641”是一个无效的身份证号。

小美、阿福:啊!无效的身份证号?老师你是怎么看出来的?

古老师:这个嘛。。。。。。不好意思我还有别的事情要忙,这个问题你们还是自己先思考一下吧。再会。


作者简介:巧若拙,微信昵称“斌哥”。高中信息技术教师,专心研究中小学编程和算法教学,在“Python算法之旅”微信公众号撰写原创文章近百篇,愿意和大家一起探讨中小学算法教育课题,请多多指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 常用模块 认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文...
    go以恒阅读 1,945评论 0 6
  • 在进行互联网产品设计时,尤其是互联网金融产品,实名认证是很重要的环节。今天和大家聊聊一个很容易被忽视的话题:身份证...
    威理阅读 1,340评论 4 7
  • 哈喽,大家好!以前我们总觉得光凭一个身份证号能看出点啥,不就是一个出生日期吗?其实远不止于此,一个身份证号码不仅包...
    68fe71350827阅读 1,105评论 0 0
  • 1/579文件IO文件介绍I/O流流的概念读写文件文件备份IO介绍大家应该听说过一句话:“好记性不如烂笔头”。不仅...
    清清子衿木子水心阅读 1,428评论 0 1
  • 红尘路上我走过,情感世界我来过。人生一切都是空,爱是空来情是空。道是空来法是空,万事万物皆是空。空空来来空空走。一...
    禅意自在阅读 161评论 0 0