|
楼主 |
发表于 2020-11-24 16:56:10
|
显示全部楼层
突然想起 vin[8] 如果是错误的车架号 可能不是0-9、x 而是a、b之类的其他字母,再次调整一下
# 车架号校验函数
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
letter = "0123456789abcdefghijklmnopqrstuvwxyz"#字母数字集合
dict1 = dict({'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8,'j':1,'k':2,'l':3,'m':4,'n':5,'p':7,'r':9,'s':2,'t':3,'u':4,'v':5,'w':6,'x':7,'y':8,'z':9,'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9})
dict2 = dict({'a':100,'b':100,'c':100,'d':100,'e':100,'f':100,'g':100,'h':100,'j':100,'k':100,'l':100,'m':100,'n':100,'p':100,'r':100,'s':100,'t':100,'u':100,'v':100,'w':100,'x':10,'y':100,'z':100,'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9})
while True:
count1 = 0#辅助判断
weighted = 0 #加权
check = 0 #校验码
# 以下部分判断是否全部为数字字母
for each in vin:
if each in letter:#用in判断是否包含在字母数字集合内
count1 = count1 + 1
else:
count1 = count1 + 0
if len(vin) != 17 :
print("车架号不为17位")
elif count1 != 17 :
print("车架号只能为数字与字母的组合")
elif "o"in vin or "i"in vin or "q"in vin:
print("车架号不应该存在O、I、Q字母")
else:
for (y1,y2) in zip(vin,[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2]):#两个参数的for 应该用zip实现
weighted = weighted + dict1.get(y1)*y2 #get方法获取dict对应的value
check = weighted % 11 # 用%获取余数
if check == dict2.get(vin[8]): #vin[8]可能是x,使用int会报错,调整为字典方法对比校验码
print("车架号符合规则,校验通过")
else:
print("车架号不符合规则,校验未通过")
VIN = input("请输入车架号")
vin = str.lower(VIN)#转化为小写
|
|