Python代码编程基础第08课 神秘字符

知识要点

  1. 十进制与二进制
  2. 编码、解码与ASCII编码
  3. 列表操作函数
  4. RGB颜色模式

一、PPT课件

二、知识要点

1.十进制与二进制

十进制数字的特点:

(1)十进制由十个不同的字符组成:0、1、2、3、4、5、6、7、8、9

(2)十进制遵循每相邻两位“逢十进一”的原则。

计算机中所有的数据都用二进制的数字来表示。

二进制数字的特点:

(1)二进制数字由两个字符组成:0、1。

(2)二进制遵循每相邻两位“逢二进一”的原则。

2.编码与解码

  • 编码:真实字符与二进制数字的对应关系,真实字符 → 二进制数字
  • 解码:二进制数字与真实字符的对应关系,二进制数字 → 真实字符

3.ASCII编码

如果每个人用自己的一套方式去进行编码解码的话,那么在用电脑交流的过程中肯定有很多混乱,为了避免这种情况的发生,大家需要遵守相同的编码规则,所以就有了ASCII编码。

大写字母’A’用ASCII编码是65,用二进制表示是01000001,计算机中存储信息的就是这个二进制数。

当选择用ASCII解码的时候,计算机读到01000001的时候到ASCII表里查询会发现对应字母’A’,所以我们在电脑上看到的是大写字母’A’。

三、代码示例

1.case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# -*- coding: utf-8 -*-
# 神秘字符参考代码

import turtle
import random

turtle.colormode(255) # 进入RGB颜色模式。
turtle.pensize(5)

list1 = []
str = input('输入英文的单词、词组、句子(可以包括标点符号)等等等: ')

for aa in str:
list1.append(ord(aa)) # ord()函数返回一个字符对应的ASCII码,如 ord('A')的结果是65。
# append()函数用于在列表末尾添加新的元素。
print(list1)

for string in list1:
if string == 32:
list1.remove(string) # remove()函数用于移除列表中某个值的第一个匹配项。
print(list1)

index1 = random.randint(0, len(list1) - 1)
index2 = random.randint(0, len(list1) - 1)
index3 = random.randint(0, len(list1) - 1)
index4 = random.randint(0, len(list1) - 1)
index5 = random.randint(0, len(list1) - 1)
index6 = random.randint(0, len(list1) - 1)
index7 = random.randint(0, len(list1) - 1)

iLoop = list1[index1] # 内层循环次数
oLoop = list1[index2] # 外层循环次数
iDegree = 180 - list1[index3] # 内层转过角度
oDegree = 180 - list1[index4] # 外层转过角度
print(iLoop)
print(oLoop)
print(iDegree)
print(oDegree)

for i in range(oLoop // 10):
r = random.randint(0, list1[index5])
g = random.randint(0, list1[index6])
b = random.randint(0, list1[index7])
print(r, g, b)
turtle.color(r + 10, g, b) # 在RGB颜色模式下设置画笔颜色。

turtle.right(oDegree)
for j in range(iLoop // 10):
turtle.forward(100)
turtle.right(iDegree)

turtle.done()

2.homework

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-
# 课后作业参考代码

listOne = []

answer = input('请输入英文句子: ')

for char in answer:
# 判断是否是小写
if ord(char) > 90:
listOne.append(97 + (ord('z') - ord(char)))
else:
listOne.append(65 + (ord('Z') - ord(char)))

for element in listOne:
if element == 123:
listOne.remove(l)

print(listOne)

3.plus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- coding: utf-8 -*- 
# 拓展卡片内容
# 凯撒加密: 凯撒密码作为一种最为古老的对称加密体制,
# 在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。
# 明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
# 例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。

# 补充知识点: chr() 将十进制ASCII码转换成字符,如 chr(65) 结果是'A'
# join() 把序列中的元素连接生成一个新的字符串

s = input('输入想要加密的英语字符串:')
t = input('输入想要移动的步长:')
s = str(s)
t = int(t)
listOne = []
for i in range(len(s)): # len()函数返回字符串或者列表的长度。
listOne.append(chr(ord(s[i]) + t))

print(''.join(listOne)) # 'str'.join(seq) 以str作为分隔符,将seq所有的元素合并成一个新的字符串

s = ''.join(listOne)
listOne = []
for i in range(len(s)):
listOne.append(chr(ord(s[i]) - t))
print(''.join(listOne))

4.homework2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding: utf-8 -*-
# 课后作业参考代码
# 大小写转换

listOne = []

answer = input('请输入英文句子: ')

for char in answer: # 判断是否是小写

if ord(char) > 90:
listOne.append(ord(char)-32) # 小写转大写
else:
listOne.append(ord(char)+32) # 大写转小写

print(listOne)

listTwo = []
for i in listOne :
listTwo.append(chr(i))
print(''.join(listTwo)) # 'str'.join(seq) 以str作为分隔符,将seq所有的元素合并成一个新的字符串