四道python例题及代码举例(某校python综合练习一)

新手码农,请多指教。

1【问题描述】我国身份证号码由数字与字母混合组成。早期身份证由15位数字构成,后来考虑到千年虫问题(15位的身份证号码只能为1900年1月1日到1999年12月31日出生的人编号),所以又增加了18位身份证号码编号规则。最后一位(第18位)校验码的计算方法如下:
     第一步:将身份证前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,将17位数字和系数相乘的结果相加。
     第二步:将上一步结果除以11求余数,则余数只可能是0-10,身份证最后一位的对应字符为1、0、X、9、8、7、6、5、4、3、2。
     例如余数结果为3,则对应身份证号码的最后一位就是9,如果是10,身份证最后一位便是2。
     请根据上述算法判断输入的身份证号是否合法。
【输入形式】一行18位的字符串,代表一个身份证号
【输出形式】如果输入的是合法身份证号,请输出“YES”,否则输出“NO”
【样例输入】110000000000000000
【样例输出】NO
【样例说明】不合法身份证号,输出“NO”
【评分标准】共5个测试用例,全部通过为满分

a = input()
alist = []
for i in range(0,17):
    alist.append(a[i])
alist = [int(x) for x in alist]
s = 7*alist[0]+9*alist[1]+10*alist[2]+5*alist[3]+8*alist[4]+4*alist[5]+2*alist[6]+1*alist[7]+6*alist[8]+3*alist[9]+7*alist[10]+9*alist[11]+10*alist[12]+5*alist[13]+8*alist[14]+4*alist[15]+2*alist[16]
blist=[0,1,2,3,4,5,6,7,8,9,10]
blist = [int(y)for y in blist]
if s%11 == 0 and int(a[17])==1:
    print("YES")
elif s%11 == 1 and a[17]=="0":
    print("YES")
elif s%11 == 3 and a[
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值