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)

原文地址:https://www.cnblogs.com/SCP-514/p/13326264.html