【520表白日】制作一个专属的表白密码(含加密和解密)
520表白日刚刚过去,不知道你是否有收到表白呢?{:10_254:}相信对于很多人来说,表白还是很难直接开口的,那么我们就制作一段属于我们专用的表白密码吧。
转换规则很简单,类似于摩斯密码:
00000 表示未开始
00001 表示空格(不允许出现在开头)
00010 表示字母
00011 表示数字
00100 A
00101 B
00111 C
01000 D
01001 E
01010 F
01011 G
01100 H
01101 I
01110 J
01111 K
10000 L
10001 M
10010 N
10011 O
10100 P
10101 Q
10110 R
10111 S
11000 T
11001 U
11010 V
11011 W
11100 X
11101 Y
11110 Z
11111 表示已结束
以‘00000’开头和‘11111’结尾的好处是可以避免在开头和结尾处的信息丢失。(可以在开头处多加一些0,也可以在结尾处多加一些1,不会对文本造成影响)
print(easy_codes('000000001100101000100000011111'))
print(easy_codes('00000000100110100001100001001111010010010000111101100111100111111'))
print(easy_codes('520'))
print(easy_codes('I love you'))
同一个函数可以双向转换
输出:
520
I LOVE YOU
000000001100101000100000011111
00000000100110100001100001001111010010010000111101100111100111111
源代码:
**** Hidden Message ***** 于是我收到了这样的表白:
000000001010110010011100011001101101001000001100011110100001100011001110010010011110111111{:10_256:} 数字化的实在是太不够人性化了。
感觉现在的云词做出来的东西还是比较适合用来表白的。 ooxx7788 发表于 2017-5-22 12:56
数字化的实在是太不够人性化了。
感觉现在的云词做出来的东西还是比较适合用来表白的。
这个背景纯粹是我乱写的{:10_278:}
现在这年代还表啥白,直接推到墙角“壁咚”了{:10_275:} jerryxjr1220 发表于 2017-5-22 14:17
这个背景纯粹是我乱写的
现在这年代还表啥白,直接推到墙角“壁咚”了
嘿嘿嘿 www.csctc317.com 表示很新奇 666666666666666666666666666666666666666 666 henhao 观摩,学习 感觉hen6想看看那 收藏了,老铁 {:5_90:} 不错 66 666 支持加油 jj
本帖最后由 shigure_takimi 于 2018-3-13 10:37 编辑
楼主题目有问题。
字母A, B二进制对应有问题。
00100 A ---> 00101
00101 B ---> 00110
00111 C
01000 D
01001 E
……
#!/usr/bin/python
a =
b = []
for i in range(5, 31):
s = bin(i)
length = len(s)
if length < 5:
s = s.zfill(5)
b.append(s)
dict1 = dict(zip(b, a)) # 二进制对应字母
dict2 = dict(zip(a, b)) # 字母对应二进制
a =
b = []
for i in a:
s = bin(int(i))
length = len(s)
if length < 5:
s = s.zfill(5)
b.append(s)
dict3 = dict(zip(b, a)) # 二进制对应十进制数字
dict4 = dict(zip(a, b)) # 十进制数字对应二进制
def easyCode(contents):
global dict1, dict2, dict3, dict4
encode = True
decode = False
if contents.startswith('00000') and contents.endswith('11111'):
decode = True
encode = False
else:
encode = True
decode = False
if encode:
if contents.isdigit():
s = '0000000011'
for i in contents:
if i == ' ':
s += '00001'
else:
s += dict4
s += '11111'
return s
elif contents.isalpha():
contents = contents.upper()
s = '0000000010'
for i in contents:
if i == ' ':
s += '00001'
else:
s += dict2
s += '11111'
return s
if decode:
firstOne = contents.index('1')
alpha = True
digit = False
if contents == '1':
digit = True
alpha = False
elif contents == '0':
digit = False
alpha = True
s = contents
length = len(s)
chars = []
i = 0
while i < length:
chars.append(s)
i += 5
result = ''
for char in chars:
if char == '11111':
break
elif char == '00001':
result += ' '
else:
if digit:
result += dict3
elif alpha:
result += dict1
return result
print(easyCode('520'))
print(easyCode('I love you'))
print(easyCode('000000001100101000100000011111'))
print(easyCode('0000000000000000100110100001100001001111010010010000111101100111100111111111111111'))
print(easyCode('000000001010110010011100011001101101001000001100011110100001100011001110010010011110111111'))
## 000000001100101000100000011111
## 00000000100110100001100001001111010010010000111101100111100111111
## 520
## I LOVE YOU
## RETURN MY MONEY