第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))
#代码结束