最近在力扣(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算法之旅”微信公众号撰写原创文章近百篇,愿意和大家一起探讨中小学算法教育课题,请多多指教。

python身份证的秘密_Python算法之旅字符串游戏之身份证号的秘密相关推荐

  1. Python算法之旅字符串游戏之无效的身份证

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

  2. python的编码表_Python算法之旅列表的纷争之二进制编码

    列表的纷争之二进制编码 小美:最近数学老师给我们玩了有趣的猜年龄游戏,他显示了6张表格,你只要观察这6张表格,然后回答"是"与"不是"就可以了.老师可以根据你的 ...

  3. python count函数时间复杂度_Python(算法)-时间复杂度和空间复杂度

    时间复杂度 算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用"O"表述,使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况 时间 ...

  4. python求数组最大值_Python算法与数据结构--求所有子数组的和的最大值

    Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. ...

  5. python 递归 写平方_Python算法:推导、递归和规约

    注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心知识:Induction(推导).R ...

  6. python求梅花数_python 算法

    算法的复杂度 算法的时间复杂度是指算法需要消耗的时间资源 时间复杂度用"O(数量级)"来表示 常见的时间复杂度有: O(1)常数阶: 问题规模越大效率越高,时间不变, a = [1 ...

  7. python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)

    冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序. 算法原理:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队 ...

  8. python表示差值_Python算法之差值查找-Testfan打卡学测开0116

    原标题:Python算法之差值查找-Testfan打卡学测开0116 本期技术分享讲师:Arthur老师 题目内容:什么是差值查找? 解析: 之前我们介绍过"二分查找"发.考虑一个 ...

  9. 剑指offer有用python版的吗_Python算法面试通关,剑指offer就靠它了

    原标题:Python算法面试通关,剑指offer就靠它了 北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫算法工程师. 算法,晦涩难懂,却又是IT领域最受重视的素养之一可以说, ...

最新文章

  1. 穷大学生耍了三大花招成为大富翁!
  2. 四、HTTP响应报文格式
  3. pandas 替换 某列大于_pandas数据分析总结大全(入门加进阶)
  4. python画图三维-对python mayavi三维绘图的实现详解
  5. office2016打开PPT出现解决VBE6EXT.OLB不能被加载问题的解决办法
  6. python爬虫获取小说根据正文调用函数传入章节地址列表_python爬虫之小说章节获取,聊斋志异小说完整版...
  7. protobuf3 自定义option_Protobuf3语法详解
  8. python合法的字符串_Python判断字符串是否为合法标示符操作
  9. C#:导出json数据到Excel表格
  10. 打断点是什么意思_英语微课堂:“Give me a break”是什么意思呢?
  11. 模糊PID控制算法 之 C语言实现
  12. 三菱fx2n64mr说明书_可编程控制器FX2N-64MR-D手册三菱FX2N-64MR-D使用说明书 - 广州凌控...
  13. 工商银行网银U盾在win7 64位操作系统无法使用的问题
  14. Struck Structured Output Tracking with Kernels阅读笔记
  15. 2021年贵阳六中高考成绩查询,贵阳市第六中学2021年招生简章
  16. 7-3 是不是太胖了
  17. 循环结构简单题之分硬币
  18. 六度分离理论、150法则与弱链接 (转载)
  19. 智哪儿高端建材市场调研:智能家居产品占几成?结果超出你的想象
  20. 解决easyExcel读取EXCEL用String去接收数字,出现小数点BUG

热门文章

  1. 【基于CART的随机森林学习笔记】
  2. week1:猜数字游戏
  3. 遇见更好的自己—2019年终总结
  4. 网页中插入能全屏播放swf,flv视频的播放器
  5. JAVA Socket实现实时接收TCP消息,让你的服务端通信更高效!
  6. 不知道网站权重是啥,就如同不知道《啥是佩奇》一样
  7. 几楼电路精灵——Cadence Allegro PCB对比
  8. 金融信息交换协议(FIX)
  9. mysql重装时没有权限_重装mysql遇到的问题
  10. 《疯狂杀戮》NDS游戏完工