PTA 乙级 1031 查验身份证 (15分) Python
PTA又改格式了,看起来怪别扭的
思路:
字典存储校验码的对应关系
身份证列表化,方便逐位进行计算
注意错误的身份证可能会使校验码字典超范围,产生异常,所以用到了异常处理
利用标志位确定是否全部通过
Python
1 xs = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] 2 jym = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'} #对应关系做成字典 3 sum = 0 4 flag = True #是否全部通过标志位 5 n = eval(input()) 6 s = [] #存储错误身份证 7 for j in range(n): 8 id = input() 9 idlist = list(id) 10 try: #由于会出现超出字典范围的情况,所以加上了异常处理 11 for i in range(17): #计算求和对11取模 12 num = eval(idlist[i])*xs[i] 13 sum += num 14 idmod = sum % 11 15 if jym.get(idmod) != idlist[17]: #检查最后一位校验码 16 s.append(id) 17 flag = False 18 except: #超出范围,直接认定为错误身份证 19 s.append(id) 20 flag = False 21 sum = 0 22 if(flag): 23 print("All passed") 24 else: 25 for i in s: 26 print(i)
默默地一点点变强,细节决定成败