发布: 江湖程序员 来源: 本站原创 时间: 2024/08/30 12:11
(4157) 点赞: (148) 标签: 功底课程
1行代码1个程序
python 1行代码1个程序,代码可以连成一行,且代码中不包含分号、for、while、if、else等常规语法,取而代之的是lambda、and、or等,使之更加晦涩难以解读,虽有悖于pep08规范,但也是别具一格!
"""
二代身份证校验码说明:
身份证18位分别代表的含义,身份证15位升级到18位,原来年用2位且没有最后一位,从左到右方分别表示
①1-2 升级行政区代码
②3-4 地级行政区划分代码
③5-6 县区行政区分代码
④7-10 11-12 13-14 出生年、月、日
⑤15-17 顺序码,同一地区同年、同月、同日出生人的编号,奇数是男性,偶数是女性
⑥18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示
"""
#“一行代码一个程序”的代码构建过程、 蜕变如下:
#①计算2的n次方的结果
print((lambda a,b,c,d = lambda x,y,z,f,z1 = []:x != -1 and f(x-1,2**x,z1.append(y),f) or z1[1:]:d(a,b,c,d))(17,2,0))
#②计算加权因子:
print((lambda a,b,c,d = lambda x,y,z,f,z1 = []:x != -1 and f(x-1,2**x,z1.append(y%11),f) or z1[1:]:d(a,b,c,d))(17,2,0))
#③用每个号码分别 * 加权因子
print(
(lambda i:(
(lambda a,b,c,d = lambda x,y,z,f,z1 = []:
x < 17 and f(x+1,y,z1.append(int(y[x])*z[x]) or z,f) or z1:d(a,b,c,d))
)(
0, i, (lambda a,b,c,d = lambda x,y,z,f,z1 = []:x != -1 and f(x-1,2**x,z1.append(y%11),f) or z1[1:]:d(a,b,c,d))(17,2,0))
)('12345678901234567')
)
#④用每个号码分别 * 加权因子、并求和:
print(
repr(
(lambda i:(
(lambda a,b,c,d = lambda x,y,z,f,z1 = type('z1', (int,), {'__init__': lambda self, value: setattr(self, '_value', value), '__iadd__': lambda self, other: setattr(self, '_value', self._value + other), '__repr__': lambda self: str(self._value)})(0):
x < 17 and f(x+1,y,z1.__iadd__(int(y[x])*z[x]) or int(z1) or z,f) or z1:d(a,b,c,d))
)(
0, i, (lambda a,b,c,d = lambda x,y,z,f,z1 = []:x != -1 and f(x-1,2**x,z1.append(y%11),f) or z1[1:]:d(a,b,c,d))(17,2,0))
)('12345678901234567')
)
)
#⑤将计算结果与11求余,然后再取出[校验码对照表]中对应的值即可:
print(
(lambda d,s:d.get(int(s)%11, 'null'))(
{0:1,1:2,2:'X',3:9,4:8,5:7,6:6,7:5,8:4,9:3,10:2},
repr(
(lambda i:(
(lambda a,b,c,d = lambda x,y,z,f,z1 = type('z1', (int,), {'__init__': lambda self, value: setattr(self, '_value', value), '__iadd__': lambda self, other: setattr(self, '_value', self._value + other), '__repr__': lambda self: str(self._value)})(0):
x < 17 and f(x+1,y,z1.__iadd__(int(y[x])*z[x]) or int(z1) or z,f) or z1:d(a,b,c,d))
)(
0, i, (lambda a,b,c,d = lambda x,y,z,f,z1 = []:x != -1 and f(x-1,2**x,z1.append(y%11),f) or z1[1:]:d(a,b,c,d))(17,2,0))
)('12345678901234567')
)
)
)
输出结果:
[131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2]
[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
[7, 18, 30, 20, 40, 24, 14, 8, 54, 0, 7, 18, 30, 20, 40, 24, 14]
368
7
>>>
作者:江湖程序员 (python帮助网)
转载请注明出处: www.pythonhelp.cn
---= 已经到底 =---