None

None也是一种数据类型,表示空,即什么也没有,当一个变量里什么数据都没有的时候,就是None

1
2
3
4
5
6
name = None
print(name)
print(type(name))
------运行结果---------
None
<class 'NoneType'>

定义一个变量,名为name,赋值为None,那么这个变量就是个空变量,数据类型是NoneType

数据的混合使用

这章主要讲讲基本数据混合使用,通过案例一步一步写代码,加深对基本数据的使用。

班级表

使用基本数据构建出下表。

学校 课程 职位 姓名 性别 手机号码 成绩1 成绩2
A学校 python 老师 王老师 133****6000
A学校 python 学生 小明 143****3754 54 78
A学校 python 学生 小红 137****2788 97 86
A学校 java 老师 张老师 136****6020
A学校 java 学生 小东 133****2458 73 86
A学校 c++ 老师 陈老师 166****3687
A学校 c++ 学生 小磊 145****4532 45 95
A学校 c++ 学生 小琪 129****3874 96 62
A学校 c++ 学生 小艾 178****1238 97 68
B学校 python 老师 李老师 165****5438
B学校 python 学生 小皮 143****3751 81 88
B学校 python 学生 小丽 149****4537 76 72
B学校 java 老师 赵老师 128****3456
B学校 java 学生 小谷 135****5432 76 82
B学校 java 学生 小涂 169****1278 97 97
B学校 java 学生 肖肖 178****3873 88 73
B学校 c# 老师 张老师 187****7850
B学校 c# 学生 小戴 136****3733 79 84
B学校 c# 学生 小强 168****3643 74 91
B学校 c# 学生 小美 187****3895 75 80
B学校 c# 学生 小蔡 178****4539 81 77

首先我们对整个表做简单的分析,先看表头,有学校、课程、职位、姓名、性别、手机号码、成绩这几个列。可以发现,姓名、性别、手机号码和成绩是和个人信息有关的,那么我们可以把这几个看作是同一类,而学校、课程、职位和教育机构有关,也可以看成一类。

graph TD 个人信息 --> 姓名 个人信息 --> 性别 个人信息 --> 手机号码 个人信息 --> 成绩 教育机构 --> 学校 教育机构 --> 课程 教育机构 --> 职位

现在问题就分成两部分了,先来解决简单的,个人信息里的成绩,这里成绩又分成了成绩1和成绩2,所以,我们也把成绩分成2个。

graph TD 个人信息 --> 姓名 个人信息 --> 性别 个人信息 --> 手机号码 个人信息 --> 成绩 成绩 --> 成绩1 成绩 --> 成绩2 教育机构 --> 学校 教育机构 --> 课程 教育机构 --> 职位

个人信息已经解决,回过头来解决教育机构。从职位,课程,学校这样的顺序来解决,首先职位分成了老师和学生,不管是老师还是学生,他们的个人信息的格式都是一样的,那么我们就可以把个人信息合并起来。这里需要注意的是,老师是没有成绩,为了同意个人信息,成绩这个信息还是保留,但是数据是空的。

graph TD 教育机构 --> 学校 教育机构 --> 课程 教育机构 --> 职位 职位 --> 老师 职位 --> 学生 老师 --> 个人信息 学生 --> 个人信息 个人信息 --> 姓名 个人信息 --> 性别 个人信息 --> 手机号码 个人信息 --> 成绩 成绩 --> 成绩1 成绩 --> 成绩2

再看课程,课程分成了pthon、java、c++、c#,同样的我们把课程分成这几部分,每个课程又有老师和学生两种职位,把职位也合并进去。

graph TD 教育机构 --> 学校 教育机构 --> 课程 课程 --> python 课程 --> java 课程 --> c++ 课程 --> c# python --> 职位 java --> 职位 c++ --> 职位 c# --> 职位 职位 --> 老师 职位 --> 学生 老师 --> 个人信息 学生 --> 个人信息 个人信息 --> 姓名 个人信息 --> 性别 个人信息 --> 手机号码 个人信息 --> 成绩 成绩 --> 成绩1 成绩 --> 成绩2

最后就差学校了,学校分成A和B,然后和课程合并起来。

graph TD 教育机构 --> 学校 学校 --> A学校 学校 --> B学校 A学校 --> 课程 B学校 --> 课程 课程 --> python 课程 --> java 课程 --> c++ 课程 --> c# python --> 职位 java --> 职位 c++ --> 职位 c# --> 职位 职位 --> 老师 职位 --> 学生 老师 --> 个人信息 学生 --> 个人信息 个人信息 --> 姓名 个人信息 --> 性别 个人信息 --> 手机号码 个人信息 --> 成绩 成绩 --> 成绩1 成绩 --> 成绩2

整个表的结构就梳理完了,接下来就是如何用代码构造出数据了。从上往下,先是学校,从结构图中可以看到,每个学校都有不同的课程,使用字典是最方便的。

1
2
3
4
5
6
7
8
educational_agency = {
"A学校":None,
"B学校":None
}

print(educational_agency)
------运行结果---------
{'A学校': None, 'B学校': None}

这里先把学校的结构数据构建出来,但课程还没有构建,所以先用None。还有就是,像[]{}()是可以换行的。还有就是,也是可以换行。为了能更直观的观测数据,这里该换行的地方就换行。

根据原表可以每个学校都有对应的课程,可以继续用字典来构造,并且和学校合起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
educational_agency = {
"A学校":{
"python":None,
"java":None,
"c++":None
},
"B学校":{
"python":None,
"java":None,
"c#":None
}
}

print(educational_agency)
------运行结果---------
{'A学校': {'python': None, 'java': None, 'c++': None}, 'B学校': {'python': None, 'java': None, 'c#': None}}

每个课程都有老师和学生,为了更好的区分开,还是可以用字典来构造。

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
educational_agency = {
"A学校":{
"python":{
"老师":None,
"学生":None
},
"java":{
"老师":None,
"学生":None
},
"c++":{
"老师":None,
"学生":None
}
},
"B学校":{
"python":{
"老师":None,
"学生":None
},
"java":{
"老师":None,
"学生":None
},
"c#":{
"老师":None,
"学生":None
}
}
}

print(educational_agency)
------运行结果---------
{'A学校': {'python': {'老师': None, '学生': None}, 'java': {'老师': None, '学生': None}, 'c++': {'老师': None, '学生': None}}, 'B学校': {'python': {'老师': None, '学生': None}, 'java': {'老师': None, '学生': None}, 'c#': {'老师': None, '学生': None}}}

最后就差把老师的信息和学生的信息加上去了,个人的信息可以用字典,这样每个信息只要通过键就能查询到。由于每个课程的学生不只一个,这里用列表来把所有的学生信息聚集起来,而每个学生信息又是一个字典。注意,老师是没有成绩的,为了能和学生信息同意,这里老师的信息中还是创建了成绩的键,但是值是None,学生的成就有两个,可以用列表来表示,当然,如果不希望学生成绩被更改,可以用元组。这里就用列表。

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
educational_agency = {
"A学校":{
"python":{
"老师":{
"姓名":"王老师",
"性别":"男",
"手机号码":"133****6000",
"成绩":None
},
"学生":[
{
"姓名":"小明",
"性别":"男",
"手机号码":"143****3754",
"成绩":[54,78]
},
{
"姓名":"小红",
"性别":"女",
"手机号码":"137****2788",
"成绩":[97,86]
}
]
},
"java":{
"老师":{
"姓名":"张老师",
"性别":"女",
"手机号码":"166****3687",
"成绩":None
},
"学生":[
{
"姓名":"小东",
"性别":"男",
"手机号码":"133****2458",
"成绩":[73,86]
}
]
},
"c++":{
"老师":{
"姓名":"陈老师",
"性别":"女",
"手机号码":"166****3687",
"成绩":None
},
"学生":[
{
"姓名":"小磊",
"性别":"男",
"手机号码":"145****4532",
"成绩":[45,95]
},
{
"姓名":"小琪",
"性别":"女",
"手机号码":"129****3874",
"成绩":[96,62]
},
{
"姓名":"小艾",
"性别":"女",
"手机号码":"178****1238",
"成绩":[97,68]
}
]
}
},
"B学校":{
"python":{
"老师":{
"姓名":"李老师",
"性别":"男",
"手机号码":"165****5438",
"成绩":None
},
"学生":[
{
"姓名":"小皮",
"性别":"男",
"手机号码":"143****3751",
"成绩":[81,88]
},
{
"姓名":"小丽",
"性别":"女",
"手机号码":"149****4537",
"成绩":[76,72]
}
]
},
"java":{
"老师":{
"姓名":"赵老师",
"性别":"男",
"手机号码":"128****3456",
"成绩":None
},
"学生":[
{
"姓名":"小谷",
"性别":"男",
"手机号码":"135****5432",
"成绩":[76,82]
},
{
"姓名":"小涂",
"性别":"女",
"手机号码":"169****1278",
"成绩":[97,97]
},
{
"姓名":"肖肖",
"性别":"女",
"手机号码":"178****3873",
"成绩":[88,73]
}
]
},
"c#":{
"老师":{
"姓名":"张老师",
"性别":"女",
"手机号码":"187****7850",
"成绩":None
},
"学生":[
{
"姓名":"小戴",
"性别":"女",
"手机号码":"136****3733",
"成绩":[79,84]
},
{
"姓名":"小强",
"性别":"男",
"手机号码":"168****3643",
"成绩":[74,91]
},
{
"姓名":"小美",
"性别":"女",
"手机号码":"187****3895",
"成绩":[75,80]
},
{
"姓名":"小蔡",
"性别":"女",
"手机号码":"178****4539",
"成绩":[81,77]
}
]
}
}
}

print(educational_agency)
------运行结果---------
{'A学校': {'python': {'老师': {'姓名': '王老师', '性别': '男', '手机号码': '133****6000', '成绩': None}, '学生': [{'姓名': '小明', '性别': '男', '手机号码': '143****3754', '成绩': [54, 78]}, {'姓名': '小红', '性别': '女', '手机号码': '137****2788', '成绩': [97, 86]}]}, 'java': {'老师': {'姓名': '张老师', '性别': '女', '手机号码': '166****3687', '成绩': None}, '学生': [{'姓名': '小东', '性别': '男', '手机号码': '133****2458', '成绩': [73, 86]}]}, 'c++': {'老师': {'姓名': '陈老师', '性别': '女', '手机号码': '166****3687', '成绩': None}, '学生': [{'姓名': '小磊', '性别': '男', '手机号码': '145****4532', '成绩': [45, 95]}, {'姓名': '小琪', '性别': '女', '手机号码': '129****3874', '成绩': [96, 62]}, {'姓名': '小艾', '性别': '女', '手机号码': '178****1238', '成绩': [97, 68]}]}}, 'B学校': {'python': {'老师': {'姓名': '李老师', '性别': '男', '手机号码': '165****5438', '成绩': None}, '学生': [{'姓名': '小皮', '性别': '男', '手机号码': '143****3751', '成绩': [81, 88]}, {'姓名': '小丽', '性别': '女', '手机号码': '149****4537', '成绩': [76, 72]}]}, 'java': {'老师': {'姓名': '赵老师', '性别': '男', '手机号码': '128****3456', '成绩': None}, '学生': [{'姓
名': '小谷', '性别': '男', '手机号码': '135****5432', '成绩': [76, 82]}, {'姓名': '小涂', '性别': '女', '手机号码': '169****1278', '成绩': [97, 97]}, {'姓名': '肖肖', '性别': '女', '手机号码':
'178****3873', '成绩': [88, 73]}]}, 'c#': {'老师': {'姓名': '张老师', '性别': '女', '手机号码': '187****7850', '成绩': None}, '学生': [{'姓名': '小戴', '性别': '女', '手机号码': '136****3733',
'成绩': [79, 84]}, {'姓名': '小强', '性别': '男', '手机号码': '168****3643', '成绩': [74, 91]}, {'姓名': '小美', '性别': '女', '手机号码': '187****3895', '成绩': [75, 80]}, {'姓名': '小蔡', '性
别': '女', '手机号码': '178****4539', '成绩': [81, 77]}]}}}

这样整个表的数据结构就构建完成了,因为现在还没有学对象,所以这些都是用基本的数据结构来构建的,等学了对象后,就会用对象来构建,会变得更加的简单。

混合数据的操作

这里接着上边构建好的数据结构,我们通过几个题目来加深混合数据的查询。

  1. 查询A学校java课程第一个学生的名字
  2. 查询B学校c#课程的老师信息
  3. 修改B学校python课程第二个学生的成绩为86和98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
educational_agency = {
...省略内容
}

print(educational_agency["A学校"]["java"]["学生"][0]["姓名"])

print(educational_agency["B学校"]["c#"]["老师"])

print(educational_agency["B学校"]["python"]["学生"][1]["成绩"])
educational_agency["B学校"]["python"]["学生"][1]["成绩"] = [86,98]
print(educational_agency["B学校"]["python"]["学生"][1]["成绩"])
------运行结果---------
小东
{'姓名': '张老师', '性别': '女', '手机号码': '187****7850', '成绩': None}
[76, 72]
[86, 98]

这里数据结构就省略,和前面的一样,没变,在做这种嵌套查询的时候,一层一层的查,每一层是什么数据类型就用该数据类型的查询方法,这里之讲解第1小题。

目标是A学校java课程第一个学生的名字,首先查出A学校educational_agency["A学校"],这是查字典的最基本方法,接着查课程,课程也是字典,那就再前面的基础上再加上字典的查询educational_agency["A学校"]["java"],学生同理educational_agency["A学校"]["java"]["学生"],这里要求查第一个学生,学生是列表,那就用列表的查询方式,第一个的下标是0,educational_agency["A学校"]["java"]["学生"][0],最后名字也是和前面一样,用字典查询即可educational_agency["A学校"]["java"]["学生"][0]["姓名"]

这里只是简单的列出几个查询,初学者也可以自己去查询其他的数据,这些都是最基本的,这个查询一定要学好,以后会经常使用。