文章目录
1、计算机程序概述
计算机程序,是按照一定的顺序思路来解决问题的一种方式。
计算机程序,我们通常会解释说是由指令和代码组成,同样也可以说是由数据结构和算法组成;其实这两种说法的核心意义都是一样的,都是通过一系列有序的操作来完成数据的处理过程。
不论任何用来开发程序的编程语言,都有这样的解决问题的各种程序基础操作,基础操作需要理解的是:程序是用于解决实际问题的,解决问题的核心在于处理数据,处理数据的话,就得具备以下四个方面才能正常完成简单数据处理:
- 用于表示各种不同类型数据的:数据类型
- 用于临时存储数据的容器:变量
- 用于进行不同的数据之间的数学运算的:运算符
- 用于根据不同的条件进行不同的功能处理的:程序结构
所有这些在python中,以数据结构的方式进行了提供和使用的方式
2、数据结构
什么是数据结构?
通过一定的方式组织在一起的数据元素的集合,这些数据可以是数字或者字符、也可以是任意一种数据结构类型
这里需要注意的是:python中最基本的数据类型是序列
python中包含6种内建的数据序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象
3、程序设计开发基本要素
1.数据类型
- 基本数据类型
- 组合数据类型
2.变量
- 对象引用
3.操作符
- 赋值运算符
- 逻辑操作符
- 算数操作符
4.输入/输出
5.程序结构:
- 顺序结构、选择结构、循环结构
6.函数的创建/使用
3.1、基本数据类型
python中的基本数据类型有
3.1.1、整型Integer(不可变类型)
整数类型,一般情况下都是使用整数数字来表示整数类型的数据
num = 12; # 定义一个变量,变量中存放了一个数据12,整数类型
count = 50; #定义了一个变量,存放了一个数据50,整数类型
这里需要注意,一旦num定义好,并赋值12之后,这个12是不允许修改的。但是可以给num重新赋值。
num = 12; id(num); # 通过id内置方法来查看num存放的内存空间的位置 结果: num = 23; id(num); #通过id内置方法来查看num存放的内存空间的位置
结果:
3.1.2、浮点类型(不可变类型)
浮点类型,可以通过添加小数点的方式来表示小数、也可以保存复数等等
可以根据实际需要,来定义浮点数进行数据的处理过程
pi = 3.1415926; r = 8; print (pi * r * r); #用于计算半径为8的圆的面积
3.1.3、布尔类型Boolean(不可变类型)
布尔类型,一种特殊的数据类型,在python中可以取值为True或者False,用于表示只有两种结果的情况
通常情况下,是我们开发人员根据实际要解决的问题,进行类型的定义,某种情况下只需要两种结果,如使用res来表示今天是否下雨的结果,今天是否下雨:True表示下雨;False表示不下雨。
res = True; # 表示结果res为真的情况 res = Falst; # 表示结果为假的情况
3.1.4、字符串(不可变类型)
python中,字符串是包含在一对单引号或者双引号中的一串字符
name = "大牧莫邪";
print (name);
company = "奇酷信息科技有限公司"
print (company);
如果字符串中要出现单引号或者双引号,需要嵌套使用
3.2、组合数据类型
python中为了方便一部分相似数据的处理,提供了各种组合类型,常见的如列表、元组
python中的列表是可变序列,元组是不可变序列
3.2.1、列表
列表的语法结构:通过一堆方括号包含起来的数据序列,可以存放重复数据
name = ['张小凡', '碧瑶', '陆雪琪', '林惊羽']
因为列表本身也是对象,所以可以进行嵌套处理
user = [['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['陆雪琪', '青云门']]
列表数据的查看,可以通过索引/下标进行查看
> user
[['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['陆雪琪', '青云门']]
> user[1]
['碧瑶', '鬼王宗']
> user[1][0]
'碧瑶'
列表中追加数据:append()
user.append(['金瓶儿', '合欢派']);
结果: [['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['陆雪琪', '青云门'], ['金瓶儿', '合欢派']]
列表中指定位置追加数据:insert()
user.insert(2, ['秦无炎', '万毒门']);
结果:[['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['秦无炎', '万毒门'], ['陆雪琪', '青云门'], ['金瓶儿', '合欢派']]
删除列表末尾的元素:pop()
user.pop();
结果:[['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['秦无炎', '万毒门'], ['陆雪琪', '青云门']]
删除列表中指定位置的元素:pop(index)
user.pop(2);
结果:[['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['陆雪琪', '青云门']]
将列表中指定位置的数据进行替换,直接给对应的索引赋值
user[2] = ['鬼先生', '鬼王宗']
结果:[['张小凡', '鬼王宗'], ['碧瑶', '鬼王宗'], ['鬼先生', '鬼王宗']]
至此,常见的列表操作就基本介绍结束了,后续更加细致的操作手段和方式,在项目中需要进行深入的时候和熟练了。
3.2.2、元组
元组在python中,其实是列表的一种特殊的形式,一旦声明创建就不允许改变。
语法结构:使用一对圆括号包含起来的一组数据,可以存放重复数据
season = ('春' , '夏' , '秋' , '冬')
定义并给元组进行赋值之后,就可以像列表一样进行数据的查看了
season
结果: ('春' , '夏' , '秋' , '冬')
season[1]
结果:'夏'
由于元组的数据一旦定义就不可更改,在一定程度上提高了代码的安全性,所以在程序设计开发的过程中,对于一部分不需要更改的数据如果可以定义成元组的,就不要定义成列表了。
注意:元组中如果存放的是其他的内容可变的元素的话,一定要注意此时的元组中对象的数据是可变的。
如:# 定义了一个元组,此时元组中出了存放字符串,还存放了一个列表 tuple = ('张小凡', '林惊羽', ['陆雪琪', '青云门']) tuple[2][0] = '碧瑶' tuple[2][1] = '鬼王宗' tuple 结果:('张小凡', '林惊羽', ['碧瑶', '鬼王宗'])
执行过程如下图所示
3.2.3、集合
python中,还提供了一种特殊的数据类型,集合Set,和列表类似,但是不能存储相同的数据;注意:集合set中存放数据是不能重复的,并且是没有存放顺序的,也就是没有下标的。
语法:使用一对大括号/花括号包含起来的一组数据
h = {'集合元素'}
hreo = set(['将列表转换成集合'])
heros = {'寒冰艾希', '皎月戴安娜', '钢铁波比', '雪人努努', '迷失纳尔'};
heros
结果:{'寒冰艾希', '皎月戴安娜', '钢铁波比', '雪人努努', '迷失纳尔'};
heros[3] # 错误,集合中没有下标,是无序存放数据的
集合中增加数据:add()
heros.add('青钢影卡密尔');
heros
结果:{'寒冰艾希', '皎月戴安娜', '钢铁波比', '雪人努努', '迷失纳尔', '青钢影卡密尔'};
集合中删除数据:remove()
heros.remove("皎月戴安娜");
heros
结果:{'寒冰艾希', '钢铁波比', '雪人努努', '迷失纳尔', '青钢影卡密尔'};
3.2.4、 字典
为了方便数据在组合数据类型中的管理,python 还提供了一种特殊存储数据的组合数据类型:字典。通过key-value键值对的形式来存储数据,可以很方便的通过key来对value进行增删改查的操作
语法结构:
# 定义一个字典,每一个数据都是成对出现的 key:value
heros = {"皎月女神":"戴安娜", "虚空遁地者":"雷克赛", "沙漠皇帝":"阿兹尔", "无双剑姬":"菲奥娜"}
# 通过字典的名称使用字典
heros
结果:{"皎月女神":"戴安娜", "虚空遁地者":"雷克赛", "沙漠皇帝":"阿兹尔", "无双剑姬":"菲奥娜"}
# 通过字典中数据的key来获取对应的value数据
heros['皎月女神']
结果:'戴安娜'
查询字典中的数据,使用方括号或者get()函数
# 使用方括号的形式查询数据
heros['皎月女神']
结果:'戴安娜'
# 使用get()函数查询数据
heros.get('皎月女神')
结果:'戴安娜'
修改字典中指定的数据,通过给指定的key直接赋值就可以修改
heros['沙漠皇帝'] = '兹尔大帝'
heros.get('沙漠皇帝')
结果:'兹尔大帝'
删除字典中的数据,通过删除指定的key对应的数据即可删除
heros.pop('沙漠皇帝')
heros
结果:{'皎月女神': '戴安娜', '虚空遁地者': '雷克赛', '无双剑姬': '菲奥娜'}
以上四种数据类型的比较:
- 元组Tuple是存放固定的数据
- 集合Set中的数据插入和遍历的时间,随数据增多而变慢
- 列表List中的数据插入和查询的时间,随数据的增多而变慢
- 字典Dict中的数据插入和查询的速度非常快,不会因为数据太多而变慢
元组、集合和列表占用内存较少,字典占用内存较多,字典是一种通过占用空间来换取操作速度的一种数据类型
3.3、变量
变量就是用来临时存放数据的一个容器
3.3.1、 变量的使用
python中的变量,不需要声明即可使用
python中的变量命名:驼峰命名法,见名知意,只能是字母、数字和下划线组成,变量第一个字符只能是字母或者下划线
stockCount = 12; # 意义:库存数量 12
price = 499.00; # 意义:单价为499.00
_pi = 3.1415; # 意义:定义了圆周率pi为3.1415
$name = 'jerry' # 错误:变量中不能包含$符号
3.3.2、变量的回收
变量一旦定义,在程序中也是使用内存空间来存储数据的,所以当变量一旦不在需要使用,需要删除变量释放它占用的内存空间,python中通过del关键字来删除变量
stockCount = 12; # 使用库存变量
del stockCount; # 删除变量stockCoutn
print (stockCount) # 报错,stockCount变量未定义
这里一定要注意,在Python中,认为一切都是对象,所以变量进行赋值时,其实就是python在内存中创建了这个对象,然后将对象在内存中的地址存储在变量中了。
count = 100; # 内存中创建了一个对象,对象的数据是100 id(count); 结果:1867079904 # 表示count中存放的内存地址 count = 200; # 内存中创建了一个对象200 id(count) 结果:1867560352 # 表示此时count中存放的内存地址
注意1:python将所有的数据都存储为内存对象,变量其实就是指向对象的一个引用,只要需要,就可以让变量随时引用一个不同的对象
注意2:python内置了函数type(),用于检测给定数据的数据类型
注意3:使用赋值符=等号,用来将一个变量和内存中的对象绑定起来,如果对象在内存中存在就直接绑定,否则赋值运算符后面的对象会被即时创建之后进行绑定。
那就存在问题了,创建的100和200这两个数据,内存中进行了什么样的处理的呢?
python将这样没有引用变量指向的对象,回收到了对象缓冲池(PS:对象缓冲池也是内存中的一个区域),方便下次使用的时候直接获取,所以在使用python的时候,一定要注意内存泄漏的问题。关于python内存管理这一部分,后续会单独进行讲解
3.3.3、 变量的命名规则
只能包含字母、数字、下划线,且不能以数字开头
变量名称区分大小写,name和Name就是两个不同的变量
禁止使用python2和python3的保留字
3.3.4、 特殊变量
以一个下划线开头的变量名称,不会被import语句导入
前后各有下划线的变量名,是系统定义的变量名,有特殊含义
交互模式下,单个下划线中保存了最后的输出表达式的结果
3.4、操作符
操作符,就是用于进行数据运算的符号
常见的操作符一般有赋值运算符、算数运算符、逻辑运算符、关系运算符等等
3.4.1、 赋值运算符
运算符 | 描述 | 使用方式 |
---|---|---|
= | 直接赋值 | a = 2 给a赋值数据2 |
+= | 加法赋值运算 | a += 2 a原来的数据加2再赋值给a |
-= | 减法赋值运算 | a-=2 a原来的数据减去2再赋值给a |
*= | 乘法赋值运算 | a*=2 a原来的数据乘以2再赋值给a |
/= | 除法赋值运算 | a/=2 a原来的数据除以2再赋值给a |
%= | 取余赋值运算 | a%=2 a原来的数据除以2,将余数赋值给a |
**= | 次方赋值运算 | a**=2 将a原来的数据取2次方运算再赋值给a |
//= | 地板除法运算 | a//=3 将a原来的数据地板除以3将结果赋值给a |
3.4.2、 算数运算符
运算符 | 描述 | 使用方式 |
---|---|---|
+ | 加法运算 | 1 + 2 结果 3 |
- | 减法运算 | 1 - 1 结果 0 |
* | 乘法运算 | 12 * 12 结果 144 |
/ | 除法运算 | 10 / 3 结果 3.333333 |
% | 取余运算 | 10 / 3 结果 1 |
** | 次方运算 | 10 ** 2 结果 100 |
// | 地板除法运算 | 10 // 3 结果 3 |
注意
在Python2中,除法运算和地板除法运算是一个结果
在python3中,除法运算和地板除法运算结果不一样
3.4.3、 关系运算符
关系运算符,通过比较运算符两边的数据,返回一个布尔类型的结果
运算符 | 描述 | 使用方式 |
---|---|---|
> | 大于运算 | 1> 2 结果 False |
< | 小于运算 | 1 < 2 结果 True |
>= | 大于等于运算 | 12 >= 12 结果True |
<= | 小于等于运算 | 12 <= 11 结果 False |
<> | 不等于运算 | 10 <> 3 结果 True |
!= | 不等于运算 | 等同于<> ,如10 != 10,结果False |
== | 等于运算 | 10 == 3 结果 False |
3.4.4、 逻辑运算符
运算符 | 描述 | 使用方式 |
---|---|---|
and | 并且运算 | True and False 结果 False |
or | 或者运算 | True or False 结果 True |
not | 非运算 | not False 结果True |
注意
这里的逻辑运算符,python中只有and|or|not,在其他语言中,也有类似&&、||、!的符号来表示and、or、not的三种关系的
and/&&:并且运算,当运算符两边的数据都为True才返回True,否则返回False
or/||:或者运算,当运算符两边的数据都是False才返回False,否则返回True
not/!:非运算,对结果进行取反,如果为True结果为False,如果为False则结果为True
3.4.5、成员运算符
成员运算符,主要用于判断某个成员是否出现在某个对象中
运算符 | 描述 | 使用方式 |
---|---|---|
in | 如果在指定的变量中找到则为True,否则为False | jiaoYue in heros |
not in | 如果在指定的变量中没有找到返回True | jiaoYue not in heros |
实际操作如下
heros = ["皎月女神", "暴走萝莉", "机械先驱", "九尾妖狐"]
feiCi = "潮汐海灵";
jiaoYue = "皎月女神";
feiCi in heros;
结果:False
jiaoYue in heros;
结果:True
3.4.6、 标识运算符
标识运算符,主要用于两个不同的变量数据类型的检测
运算符 | 描述 | 使用方式 |
---|---|---|
is | 如果运算符两边的变量指向相同的对象则为True | a is b |
is not | 如果运算符两边的变量指向不同的对象则为True | a is not b |
a = 12;
b = 12;
a is b
结果:True
a is not b
结果:False