和小家伙一起学编程 004 编码

编码,简单的说,就是将信息从一种表达方式转换成另一种表达方式。

例如,和小朋友约定,如果连续敲三下然后停一下,就表示是爸爸妈妈在敲门。

例如,当有重要而不希望其他人知晓的信息需要传递时,我们可以把信息加密;而当要节约传递和储存所需的资源时,我们会把信息压缩……

想像一下,不论是视频、图片、声音,还是文本、数字,任何我们用计算机处理的东西,最后都被编码成为只有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位的变量名的意义。

和小家伙一起学编程 004 编码_第1张图片
设置变量,以及减1按钮的代码
和小家伙一起学编程 004 编码_第2张图片
加1按钮的代码
和小家伙一起学编程 004 编码_第3张图片
小机器人的代码1

和小家伙一起学编程 004 编码_第4张图片
小机器人的代码2

理解这里的关键就是二进制加法:

0 + 0 = 0
0 + 1 = 1
1 + 1 = 0 并进位1

减法类似。

和小家伙一起学编程 004 编码_第5张图片
小机器人的代码3
和小家伙一起学编程 004 编码_第6张图片
小机器人的代码4
和小家伙一起学编程 004 编码_第7张图片
小机器人的代码5
和小家伙一起学编程 004 编码_第8张图片
小机器人的代码6

点击加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!

节点目录

和小家伙一起学编程 000 出发

和小家伙一起学编程 001 条件

和小家伙一起学编程 002 循环

和小家伙一起学编程 003 随机

和小家伙一起学编程 004 编码

和小家伙一起学编程 005 对象

和小家伙一起学编程 006 函数

和小家伙一起学编程 007 算法

你可能感兴趣的:(和小家伙一起学编程 004 编码)