编码,简单的说,就是将信息从一种表达方式转换成另一种表达方式。
例如,和小朋友约定,如果连续敲三下然后停一下,就表示是爸爸妈妈在敲门。
例如,当有重要而不希望其他人知晓的信息需要传递时,我们可以把信息加密;而当要节约传递和储存所需的资源时,我们会把信息压缩……
想像一下,不论是视频、图片、声音,还是文本、数字,任何我们用计算机处理的东西,最后都被编码成为只有0和1两种状态的比特(bit),它们在计算机、互联网、手机以及各种数字化硬件中千变万化,川流不息……
当然,我们编程,也可以说是编码,把我们头脑中解决问题的方式表达为某种计算机语言,这样,计算机就可以帮我们解决问题了。
Scratch 简单的十进制转二进制演示
这个Scratch程序要比之前的长许多,不过别担心,我们并没有用一般的算法(需要除法、余数)来进行十进制转换二进制,而是主要依靠加减法和进位、借位,其实这只是一个同时显示十进制和二进制的计数器。
首先按图设置变量,勾选变量让它们显示在游戏区域上,双击游戏区域的变量,可以显示为图中的样式。
再画两个角色作为加、减的按钮,画面上部加减按钮之间的2个变量分别是十进制数的十位、个位。
下面一排5个变量各表示二进制数的一位,从左到右依次是:5bit(16)、4bit(8)、3bit(4)、2bit(2)、1bit(0)。
十进制数的每一位,分别表示有多少个、多少十(10)、多少一百(10 x 10)、多少一千(10 x 10 x 10),以此类推,小朋友们已经学过。
同理,二进制数的每一位,分别表示有多少个、多少2(2)、多少4(2 x 2)、多少8(2 x 2 x 2)、多少16(2 x 2 x 2 x 2)……这也就是上面表示二进制数的5位的变量名的意义。
、
理解这里的关键就是二进制加法:
0 + 0 = 0
0 + 1 = 1
1 + 1 = 0 并进位1
减法类似。
点击加1、减1按钮,就可以看到对应的十进制和二进制数了。
在Python中,整数可以用不同的进制表示,之间可以自动转换,编辑number.py并运行:
dec = int(input("输入十进制数:"))
print("十进制数:", dec)
print("转换为二进制:", bin(dec))
print("转换为八进制:", oct(dec))
print("转换为十六进制:", hex(dec))
不仅数字要编码,计算机中的文字也需要编码,最基本常用的是ASCII码,但它只能表示英文字母和其他有限的字符而无法表示中文等字符,常见的中文编码方案有GB2312、GBK等等,而在网页中我们往往会使用UTF-8编码……
在Python中可以用用chr()、ord()两个函数来查看和转换字符的ASCII编码:
>>> chr(66)
'B'
>>> chr(40)
'('
>>> ord('b')
98
>>> ord('B')
66
Python 简单的加密解密
encode.py:
raw = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "BUAKOMIZTGFELXVWRYSJNCQDHP"
source = input("输入要加密的句子:").upper()
encoded = ""
for c in source:
if c in raw:
encoded += key[raw.find(c)]
else:
encoded += c
print("加密后的句子:")
print(encoded)
运行:
输入要加密的句子:I love Python!
加密后的句子:
T EVCO WHJZVX!
key就是所谓的密钥,先把输入的句子都转换为大写字母,然后把每个字母依次替换成密钥中对应的字母,其他字符保持原样。
Python中可以用[]来取得字符串中的某一部分,而find()函数可以取得字符在字符串中的位置或者索引值,如果没找到会返回-1:
>>> s = "This is a string."
>>> s[0]
'T'
>>> s[-1]
'.'
>>> len(s)
17
>>> s[16]
'.'
>>> s[5:8]
'is '
>>> s.find('a')
8
>>> s.find('k')
-1
而解码就是把编码反过来。
decode.py:
raw = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
key = "BUAKOMIZTGFELXVWRYSJNCQDHP"
encoded = input("输入要解密的句子:")
source = ""
for c in encoded:
if c in key:
source += raw[key.find(c)]
else:
source += c
print("解密后的句子:")
print(source)
运行:
输入要解密的句子:T EVCO WHJZVX!
解密后的句子:
I LOVE PYTHON!