第八章、Python入门教程系列——None和数据类型混合
None
None也是一种数据类型,表示空,即什么也没有,当一个变量里什么数据都没有的时候,就是None
1 | name = None |
定义一个变量,名为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 |
首先我们对整个表做简单的分析,先看表头,有学校、课程、职位、姓名、性别、手机号码、成绩这几个列。可以发现,姓名、性别、手机号码和成绩是和个人信息有关的,那么我们可以把这几个看作是同一类,而学校、课程、职位和教育机构有关,也可以看成一类。
现在问题就分成两部分了,先来解决简单的,个人信息里的成绩,这里成绩又分成了成绩1和成绩2,所以,我们也把成绩分成2个。
个人信息已经解决,回过头来解决教育机构。从职位,课程,学校这样的顺序来解决,首先职位分成了老师和学生,不管是老师还是学生,他们的个人信息的格式都是一样的,那么我们就可以把个人信息合并起来。这里需要注意的是,老师是没有成绩,为了同意个人信息,成绩这个信息还是保留,但是数据是空的。
再看课程,课程分成了pthon、java、c++、c#,同样的我们把课程分成这几部分,每个课程又有老师和学生两种职位,把职位也合并进去。
最后就差学校了,学校分成A和B,然后和课程合并起来。
整个表的结构就梳理完了,接下来就是如何用代码构造出数据了。从上往下,先是学校,从结构图中可以看到,每个学校都有不同的课程,使用字典是最方便的。
1 | educational_agency = { |
这里先把学校的结构数据构建出来,但课程还没有构建,所以先用None。还有就是,像[]
、{}
和()
是可以换行的。还有就是,
也是可以换行。为了能更直观的观测数据,这里该换行的地方就换行。
根据原表可以每个学校都有对应的课程,可以继续用字典来构造,并且和学校合起来。
1 | educational_agency = { |
每个课程都有老师和学生,为了更好的区分开,还是可以用字典来构造。
1 | educational_agency = { |
最后就差把老师的信息和学生的信息加上去了,个人的信息可以用字典,这样每个信息只要通过键就能查询到。由于每个课程的学生不只一个,这里用列表来把所有的学生信息聚集起来,而每个学生信息又是一个字典。注意,老师是没有成绩的,为了能和学生信息同意,这里老师的信息中还是创建了成绩的键,但是值是None,学生的成就有两个,可以用列表来表示,当然,如果不希望学生成绩被更改,可以用元组。这里就用列表。
1 | educational_agency = { |
这样整个表的数据结构就构建完成了,因为现在还没有学对象,所以这些都是用基本的数据结构来构建的,等学了对象后,就会用对象来构建,会变得更加的简单。
混合数据的操作
这里接着上边构建好的数据结构,我们通过几个题目来加深混合数据的查询。
- 查询A学校java课程第一个学生的名字
- 查询B学校c#课程的老师信息
- 修改B学校python课程第二个学生的成绩为86和98
1 | educational_agency = { |
这里数据结构就省略,和前面的一样,没变,在做这种嵌套查询的时候,一层一层的查,每一层是什么数据类型就用该数据类型的查询方法,这里之讲解第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]["姓名"]
。
这里只是简单的列出几个查询,初学者也可以自己去查询其他的数据,这些都是最基本的,这个查询一定要学好,以后会经常使用。