jerryxjr1220 发表于 2017-5-21 21:24:16

【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 *****

jerryxjr1220 发表于 2017-5-21 21:38:06

于是我收到了这样的表白:
000000001010110010011100011001101101001000001100011110100001100011001110010010011110111111{:10_256:}

ooxx7788 发表于 2017-5-22 12:56:46

数字化的实在是太不够人性化了。
感觉现在的云词做出来的东西还是比较适合用来表白的。

jerryxjr1220 发表于 2017-5-22 14:17:25

ooxx7788 发表于 2017-5-22 12:56
数字化的实在是太不够人性化了。
感觉现在的云词做出来的东西还是比较适合用来表白的。

这个背景纯粹是我乱写的{:10_278:}
现在这年代还表啥白,直接推到墙角“壁咚”了{:10_275:}

新手·ing 发表于 2017-5-22 20:16:51

jerryxjr1220 发表于 2017-5-22 14:17
这个背景纯粹是我乱写的
现在这年代还表啥白,直接推到墙角“壁咚”了

嘿嘿嘿

jerryxjr1220 发表于 2017-5-31 16:01:57

www.csctc317.com

929507112 发表于 2017-6-2 12:05:24

表示很新奇

qq244610909 发表于 2018-1-8 22:27:12

666666666666666666666666666666666666666

uwuw 发表于 2018-1-9 04:49:30

666

Tom的猫 发表于 2018-1-30 23:03:25

henhao

ddaaxj8888 发表于 2018-2-3 06:31:36

观摩,学习

回忆001 发表于 2018-2-10 12:35:42

感觉hen6想看看那

chenboss 发表于 2018-2-10 12:45:48

收藏了,老铁

A13 发表于 2018-2-16 22:23:07

{:5_90:}

不知现在几点 发表于 2018-2-17 15:44:20

不错

数字城堡 发表于 2018-2-17 17:18:31

66

qiuyouzhi 发表于 2018-2-19 10:27:28

666

wenjain 发表于 2018-3-12 21:11:09

支持加油

shigure_takimi 发表于 2018-3-12 21:56:19

jj

shigure_takimi 发表于 2018-3-13 10:25:03

本帖最后由 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
页: [1] 2 3
查看完整版本: 【520表白日】制作一个专属的表白密码(含加密和解密)