求求各位python大佬,这题咋做啊

从键盘输入一个18位身份证号,验证其正确性,如果错误,请重新输入。验证方面包括:

1、位数为18位;

2、前17位须为数字,第18位可以是数字及x或X;

3、首位不能为0;

4、月份的范围在01-12;

5、日的范围根据月份来判断,如1,3,5,7,8,10,12月中,日的范围为01-31;4,6,9,11月中,日的范围为01-30;2月,日的范围需要考虑闰年,闰年为29,非闰年为28;

正确输入身份证后,显示此人的出生日期,格式为:XXXX年XX月XX日,显示此人的性别。

参考这篇文章:https://blog.csdn.net/qq_41666983/article/details/104941331

import re

while True:
    s = input('输入一个18位身份证号:')
    if re.match(r'^[1-9]\d{16}[\dxX]$',s):
        y = int(s[6:10])
        m = int(s[10:12])
        d = int(s[12:14])
        p = 31 if m in (1,3,5,7,8,10,12) else 30
        if m==2:
            p = 29 if y%4==0 and y%100!=0 or y%400==0 else 28
        if 1<=m<=12 and 1<=d<=p:
            break
    print('错误,请重新输入!')
print('{}年{}月{}日,性别{}'.format(s[6:10],s[10:12],s[12:14],['女','男'][int(s[16])%2]))

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632