和小家伙一起学编程 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位的变量名的意义。

设置变量,以及减1按钮的代码
加1按钮的代码
小机器人的代码1

小机器人的代码2

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

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

减法类似。

小机器人的代码3
小机器人的代码4
小机器人的代码5
小机器人的代码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 算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349