头歌python 身份证号的奥秘

第1关:判断性别

任务描述

通过身份证的第17位也就是倒数第二位的数字可以辨别该身份证所属人的性别,奇数为男性,偶数为女性。
本关任务:输入身份证号,第17位若是偶数,输出男性,否则输出女性

相关知识

为了完成本关任务,你需要掌握:
1.如何截取字符串的一个字符
2.判断一个数是奇数还是偶数
3.分支语句

如何截取字符串的一个字符
在这里插入图片描述

如何判断一个数是奇数还是偶数
通过判断一个数除以2的余数是否为0,可以判断一个数是奇数还是偶数。
如果一个数除以2的余数为0,则该数是偶数,否则为奇数
分支语句
在这里插入图片描述

编程要求

根据提示,在右侧编辑器补充代码
接收用户输入身份证号
若第17位是偶数,显示女性,否则显示男性

测试说明

平台会对你编写的代码进行测试:

测试输入:请输入身份证号320302196404272039
预期输出:
男性

测试输入:请输入身份证号530127199406163521
预期输出:
女性

代码如下:

sfzh=input("请输入身份证号")
#代码开始
sex = sfzh[:17]
sex = int(sex)
if sex % 2 == 0:
    print("女性")
else:
    print("男性")
#代码结束

第2关:提取出生年月

任务描述

身份证号的第七位到第十位是出生的年份,第十一位到第十二位是出生的月份,第十三位到第十四位是出生的日号。
本关任务:编写一个小程序,输入身份证号,按9999年99月99日格式输出其出生日期。

相关知识

为了完成本关任务,你需要掌握:1.字符串切片,2.格式输出。

字符串切片
在这里插入图片描述

格式输出
在这里插入图片描述

编程要求

根据提示,在右侧编辑器补充代码。
输入身份证号,按9999年99月99日格式输出其出生日期。

测试说明

平台会对你编写的代码进行测试:

测试输入:
请输入身份证号320302196404272039
预期输出:
出生日期1964年04月27日

测试输入:
请输入身份证号530127199406163521
预期输出:
出生日期1994年06月16日

代码如下:
sfzh=input("请输入身份证号")
#代码开始
year = sfzh[6:10]
month = sfzh[10:12]
day = sfzh[12:14]
print("出生日期%s年%s月%s日"%(year,month,day))
#代码结束

第3关:判断出生地

任务描述

sfz.txt文件中存储了地区编码和地区名称
在这里插入图片描述

身份证的前6位为地区编码,可以在sfz.txt文件中查询到地区编号对应的地区名称
在这里插入图片描述

编写程序,输入身份证号,查询并显示对应的地区名称
若该地区编码不在文件中,显示地区名称 未知

相关知识

为了完成本关任务,你需要掌握:

  • 文件操作
  • 字符串的find方法
  • 字典的建立
  • 字典的查找

文件操作
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

注意:字符串.strip(指定字符)方法,返回去除字符串尾部的指定字符后的字符串。若不指定字符,则去除尾部的空格和换行符。

字典的建立
在这里插入图片描述

若要建立以地区编码为键,地区名称为值的字典,可以打开文件,读取一行,将前六个字符(地区编号)作为键,第七个字符到最后(地区名称)作为值,建立字典。
在这里插入图片描述

对所有的行循环,就可以建立所有地区编号和名称的字典。
在这里插入图片描述

字典的查找
<字典>.get(<键>,<默认值>)
在字典中,若存在该键,则返回相应的值,否则返回默认值
如果地区字典dqzd已经建立,通过get方法可以查找编码对应的地区名称,若无法找到,则返回未知
在这里插入图片描述

测试说明

平台会对你编写的代码进行测试

请输入身份证号530127199406163521
预期输出:
地区名称 云南省昆明市嵩明县

测试输入:
输入身份证号320302196404272039
预期输出:
地区名称 江苏省徐州市鼓楼区

测试输入:
输入身份证号132335195901011867
预期输出:
地区名称 未知

注意:地区名称和地区之间有空格

代码如下:
sfzh=input("请输入身份证号")
#代码开始
dqzd = {}
f1 = open("sfz.txt","r")
for line in f1:
    dqzd[line[:6]] = line[6:].strip()
dq = dqzd.get(sfzh[:6],"未知")
print("地区名称 {}".format(dq))
#代码结束
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值