|
发表于 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 = [chr(i) for i in range(65, 91)]
- b = []
- for i in range(5, 31):
- s = bin(i)[2:]
- length = len(s)
- if length < 5:
- s = s.zfill(5)
- b.append(s)
- dict1 = dict(zip(b, a)) # 二进制对应字母
- dict2 = dict(zip(a, b)) # 字母对应二进制
- a = [str(i) for i in range(10)]
- b = []
- for i in a:
- s = bin(int(i))[2:]
- 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[0].isdigit():
- s = '0000000011'
- for i in contents:
- if i == ' ':
- s += '00001'
- else:
- s += dict4[i]
- s += '11111'
- return s
- elif contents[0].isalpha():
- contents = contents.upper()
- s = '0000000010'
- for i in contents:
- if i == ' ':
- s += '00001'
- else:
- s += dict2[i]
- s += '11111'
- return s
- if decode:
- firstOne = contents.index('1')
- alpha = True
- digit = False
- if contents[firstOne + 1] == '1':
- digit = True
- alpha = False
- elif contents[firstOne + 1] == '0':
- digit = False
- alpha = True
- s = contents[firstOne + 2:]
- length = len(s)
- chars = []
- i = 0
- while i < length:
- chars.append(s[i:i+5])
- i += 5
- result = ''
- for char in chars:
- if char == '11111':
- break
- elif char == '00001':
- result += ' '
- else:
- if digit:
- result += dict3[char]
- elif alpha:
- result += dict1[char]
- 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
复制代码 |
|