【问题描述】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
给定身份证号码(本题中的身份证号为51362219810927512X),解析其不同位置上的数字所表达的含义。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
输出结果:HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
51:第1位和第2位代表所在省(直辖市、自治区)的代码HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
36:第3位和第4位代表所在地级市(自治州)的代码HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
22:第5位和第6位代表所在区(县、自治县、县级市)的代码HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
19810927:第7位—第14位代表出生年、月、日HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
51:第15位和第16位代表所在地的派出所的代码HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
2:第17位代表性别(注:奇数=>男 偶数=>女)HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
X:校验码,X表示10HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【题前思考】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
根据问题描述,填写表10-2-2。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
表10-2-2 问题分析HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【解题思路】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
根据身份证号码中不同位置上的数字的含义,应用前面学过的正则表达式的知识可以写出相应的正则表达式。使用( )将需要捕获的数位括起来,使用匹配对象的group( )或groups( )方法输出每个捕获组。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【程序代码】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【代码分析】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
①:写出了身份证号码的分离样式,如图10-2-3所示。“^”和“$”是断言符号,“^”表示从字符串开始匹配,“$”表示匹配字符串结束位置。如样式^the$只能匹配字符串“the”,不能匹配“clothe”“there”和“northern”等情况。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
②:re.match( )方法匹配成功将返回一个匹配对象,其中保存了匹配的完整字符串和捕获组的文本,可以使用匹配对象的group( )或groups( )方法访问各捕获组,访问方法如图10-2-3中第3、4、5行所示。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
图10-2-3 身份证号码分离样式及分组访问方法HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
③:groups( )方法返回一个元组,其中每个元素都是一个捕获组文本,通过for循环输出。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【优化提升】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
Python中没有switch case语句,除了使用示例提供的多分支方法外,我们还可以通过字典方式实现。下面的代码可实现相同的功能。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
【技术全貌】HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库
本案例中,正则表达式'^(\d{2})(\d{2})(\d{2})(\d{8})(\d{2})(\d)([0-9X])$'如果改写为'^(\d{2}){3}(\d{8})(\d{2})(\d)([0-9X])$',将不能正确分离前六位号码。正则表达式捕获组的数量是由( )次数决定的,而且要排除掉非捕获组(?:),没有匹配的组是空串。样式'(\d{2}){3}'虽然匹配3次,但只保存一个组,即最后一次匹配的文本。HDJ100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库