之前看过其他相关类似的代码,但是感觉大家都是简单的判断了一下倒数第二位是单数还是双数,感觉判断不是很严谨,所以自己又添加了一些东西进去;

解题思路:
1.首先判断用户输入的数据长度是否是18位;
2.然后判断前17位是否是纯数字且最后一位是否是"X"或者数字;
3.然后获取用户输入数据的倒数第二位,并且转换成int类型,因为input输入的数字默认是str类型;
4.拿下标16的数进行取余,判断是 单数还是双数;

这个时候我们需要了解一个常识问题:身份证号码上的第17位数字(也就是倒数第二位)表示性别
单数表示男性,双数表示女性

# 方案一:
id = input('请输入身份证号:')  # input() 用户输入数据
if len(id) != 18:  # 如果输入的数据长度不是18位
    print('您输入的身份证位数不正确')  # 提示输入位数不正确
else:  # 如果是18位
    id_1 = id[0:17]  # 取前17位
    id_2 = id[17]  # 取最后一位
    if id_1.isdigit() and (id_2 == 'X' or id_2.isdigit()):  # 如果前17位是是纯数字,后一位是X或者数字
        n = int(id[16])  # 取数据的倒数第二位并且转换成int类型
        if n % 2 == 0:  # 如果可以整除,是偶数,则为女性
            print('您的性别是女')
        else:  # 否则是男性
            print('您的性别为男')
    else:  # 前17位是不是纯数字,后一位不是X或者数字
        print("请输入正确的身份证号码")


方案二:
id = input('请输入身份证号:')  # input() 用户输入数据
if len(id) != 18:  # 如果输入的数据长度不是18位
    print('您输入的身份证位数不正确')  # 提示输入位数不正确
else:  # 如果是18位
    id_1 = id[0:17]  # 取前17位
    id_2 = id[17]  # 取最后一位
    if not(id_1.isdigit() and (id_2 == 'X' or id_2.isdigit())):  # 如果前17位是不是纯数字,后一位不是X或者数字
        print("请输入正确的身份证号码")  # 则不正确
    else:  # 
        n = int(id[16])  # 取数据的倒数第二位,并且转换成int类型
        if n % 2 == 0:  # 如果可以整除,是偶数,则为女性
            print('您的性别是女')
        else:  # 否则是男性
            print('您的性别为男')
# 判断数据类型
# id = input("请输入数字:")
# print(type(id))  # <class 'str'>

如果你看到感觉还是其他写法可以评论补充哦~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐