(一)Python入门——环境的搭建
(二)Python入门——数据类型
(三)Python入门——变量和常见运算符
(四)Python入门——程序控制—选择结构
当我们要进行Python的学习时,最好的学习方法就是理论学习和操作实践相结合,一方面这样可以使你更好的去吃透理论知识,另一方面操作完之后也能让你印象深刻。不管是哪种语言,在对其进行实践操作时都需要环境,因此我们学习一门计算机操作语言前都要先安装好语言所需的环境,而对新手来说,环境安装是非常非常重要的必经之路,毕竟一个环境安装得好能为新手减去很多不必要的麻烦,比如pip这些烦人的拓展包。
在安装之前我们要去下载python的安装包:
这里给出一些下载地址,大家可以根据学习的需要下载相应的版本,我下载的是python-3.6.1-amd64.exe这个版本
程序的概述 :
计算机程序,其实质就是计算机按照一定的顺序思路来解决问题的一种方式。
计算机程序,我们通常会解释说是由指令和代码组成,同样也可以说是由数据结构和算法组成;其实这两种说法的核心意义都是一样的,都是通过一系列有序的操作来完成数据的
处理过程。
不论任何用来开发程序的编程语言,都有这样的解决问题的各种程序基础操作,基础操作需要理解的是:程序是用于解决实际问题的,解决问题的核心在于处理数据,处理数据的
话,就得具备以下四个方面才能正常完成简单数据处理:
➢ 用于表示各种不同数据的类型:数据类型
➢ 用于临时存储数据的容器:变量
➢ 用于进行不同的数据之间的数学运算:运算符
➢ 用于根据不同的条件进行不同的功能处理的:程序结构(三大流程)
所有的这些方面在 python 中,以数据结构的方式进行了提供和使用的方式。
数据结构
什么是数据结构?
通过一定的方式组织在一起的数据元素的集合,这些数据可以是数字或者字符、也可以是任意一种数据结构类型,这里需要注意的是:python 中最基本的数据类型是序列python 中包含 6 种内建的数据序列:列表、元组、字符串、Unicode 字符串、buffer 对象和 xrange 对象
程序设计开发基本要素:
基本数据类型就是 python 内置的可以直接使用的数据类型。
包含了如下几种:
➢ 整型 Integer(不可变类型)
➢ 浮点类型(不可变类型)
➢ 布尔类型 Boolean(不可变类型)
➢ 字符串(不可变类型)
下面我们来看看这四个基本数据类型:
1.整型 Integer(不可变类型)
整数类型,一般情况下都是使用整数数字来表示类型的数据。
我们定义了两个变量,变量的名称分别为num1和num2,num1值是10,num2值是20,注意在编程语言中,=是赋值符,将右侧的值赋给左侧,num1和num2的类型都是整数类型,之后用print函数将我们定义的num1和num2打印出来
num1 = 10
num2 = 20
print(num1)
print(num2)
我们也可以去电脑的cmd使用id内置方法来查看变量:
这个也可以看出变量就是一块用来存放数据的内存
注意:变量一旦定义好并赋值 10 后,这个 10 不允许修改的。但是可以给 num1重新赋值:
2.浮点类型 Float(不可变类型)
浮点类型(小数类型),可以通过添加小数点的方式来表示小数、也可以保存复数等等。
比如我们要计算半径为 5 的圆的面积 ,我们需要定义pi=3.141592653,r=5,再用print输出print(pi * r * r)。
pi = 3.141592653
r = 5
print(pi*r*r)
3.布尔类型 Boolean(不可变类型)
布尔类型,一种特殊的数据类型,在 python 中可以取值为 True 或者 False(首字符大写),用于表示只有两种结果的情况,如灯是否开着为例,True 表示开着,False 表示关着。
我们定义res为布尔类型变量分别来展示,定义res = True,这表示灯被打开了,输出print(res); res = False,这表示灯被关了,输出print(res);
4.字符串(不可变类型)
python中,字符串是包含在一对单引号或者双引号中的一串字符。
我们定义name = “计类1903陈振富”,输出print(name);再重新定义name = ‘我与春风皆过客,你携秋水揽星河’,输出print(name)
基本数据类型部分,目前我们先掌握这些基础的使用,以后的综合项目中,会详细的对使用方式进行介绍的
在基本数据类型之后,我们下面来看组合数据类型。python 中为了方便一部分相似数据的处理,提供了各种组合类型,常见的如列表、元组、字典等组合数据类型。
python 中的列表是可变序列,元组是不可变序列。
列表的语法结构:通过一堆方括号包含起来的数据序列,可以存放重复数据。
users = [“刘德华”,“张学友”,“郭富城”,“黎明”]
因为列表本身也是对象,所以可以进行嵌套处理
users = [[“刘德华”,“50”],[“张学友”,“48”],[“郭富城”,“51”],[“黎明”,‘47’]]
列表数据的查看,可以通过索引/下标进行查看(下标从 0 开始),也可以通过多级访问到列表的内部
users[2]
这可以类比c语言的数组
➢ append
列表中追加数据:append()
➢ insert(index,data)
列表中指定位置(第一个参数就是要插入数据的索引位)追加数据:insert()
➢ pop()
删除列表末尾的元素:pop()
➢ pop(index)
删除列表中指定位置的元素:pop(index)
如果我们要将列表中指定位置的数据进行替换,直接给对应的索引赋值:
至此,常见的列表操作就基本介绍结束了,后续更加细致的操作手段和方式,就需要我们在项目中进行深入练习的时候熟练了
元组在 python 中,其实是列表的一种特殊的形式,一旦声明创建就不允许改变。
语法结构:使用一对圆括号包含起来的一组数据,可以存放重复数据。
我们定义name = (‘仁’,“义”,“礼”,“智”,“信”);name[2]这可以通过索引查找对应的值
由于元组的数据一旦定义就不可更改,在一定程度上提高了代码的安全性,所以在程序设计开发的过程中,对于一部分不需要更改的数据如果可以定义成元组的,不要定义成列表了,如果有同学接触过其他的编程语言,如 java或者C,会发现元组和枚举类型很类似。
注意:元组中如果存放的是其他的内容可变的元素的话,一定要注意此时的元组中对象的数据是可变的。
比如:
我们定义group = (“孙悟空”,“唐僧”,“沙僧”,[“猪八戒”,‘高老庄’]);
group[3][0]=“如来”,因为第四个参数是 list,可以变化,所以能修改
group[3][1]=‘灵山’,因为第四个参数是 list,可以变化,所以能修改
此时group是(‘孙悟空’, ‘唐僧’, ‘沙僧’, [‘如来’, ‘灵山’])
group[2]=[“玉皇大帝”,“天庭”] ,因为第三个参数是元组,不能修改,所以系统会报错。
在python中,系统还提供了一种特殊的数据类型,集合 Set,和列表类似,但是不能存储相同的数据。注意:集合 set 中存放数据是不能重复的,并且是没有存放顺序的,也就是没有下标的。
语法结构:使用一对大括号/花括号包含起来的一组数据
我们定义han = {“刘备”,“曹操”,“孙权”},先打印han,再打印han[1],因为集合中没有顺序,所以它是没有下标的,这样一来我们打印han[1]时会出错:
当然列表也可以转换为集合,我们配置的语法为:
集合名称 = set([‘将列表转换成集合’]);
集合中增加数据:add()
我们在集合liang中再加一个数据,比如liang.add(“鲁智深”);
集合中删除数据:remove()
我们在集合liang中删除刚刚加的数据,liang.remove(“鲁智深”);
为了方便数据在组合数据类型中的管理,python 还提供了一种特殊存储数据的组合数据类型:字典。通过 key-value 键值对的形式来存储数据,可以很方便的通过 key 来对 value进行增删改查的操作
语法结构:字典变量名称={“变量 1”:”值 1”, “变量 2”:”值 2”, “变量 3”:”值 3”,}
定义的时候以键值对的形式定义存在,相当于给每个值取了名字:
list = {“可爱” : “陈振富”, “好看的小姐姐” : “我们班女孩”, “野王” : “韩信李白老虎玄策阿珂悟空” }
查询字典中的数据,我们可以通过名称键(即变量名)来查找值,使用方括号或者 get()函数:
修改字典中指定的数据,通过给指定的key(也指变量)直接赋值就可以修改:
删除字典中的数据,通过删除指定的key对应的数据即可删除
➢ 元组 Tuple 是存放固定的数据
➢ 集合 Set 中的数据插入和遍历的时间,随数据增多而变慢
➢ 列表 List 中的数据插入和查询的时间,随数据的增多而变慢
➢ 字典 Dict 中的数据插入和查询的速度非常快,不会因为数据太多而变慢
元组、集合和列表占用内存较少,字典占用内存较多,字典是一种通过占用空间来换取操作速度的一种数据类型。
变量:变量就是用来临时存放数据的一个容器
python中的变量,不需要声明即可使用
python中的变量命名:驼峰命名法,见名知意,只能是字母、数字和下划线组成,变量第一个字符只能是字母或者下划线。
比如我们定义userName = “陈振富”,显然这表示用户名称,因此我们使用驼峰法定义可以使变量清晰明了,再比如price = 50.23,我们定义了一个价格;_age = 18这里我们定义了一个年龄
变量一旦定义,在程序中也是使用内存空间来存储数据的,所以当变量一旦不在需要使用,需要删除变量释放它占用的内存空间,python中通过 del 关键字来删除变量。
比如我们用del userName把刚才定义的名字变量删除,删除后再次打印系统就会报错:
这里一定要注意,在 Python中,认为一切都是对象,所以变量进行赋值时,其实就是python在内存中创建了这个对象,然后将对象在内存中的地址存储在变量中了。
我们可以通过内置的 id 方法来测试。
id(price)打印出来的2432011561680就表示 price 中存放的内存地址,在重新赋值price=20之后内存地址发生了变化,变成了140735343466752
注意:
➢ python将所有的数据都存储为内存对象,变量其实就是指向对象的一个引用,只要需要,就可以让变量随时引用一个不同的对象
➢ python内置了函数 type(),用于检测给定数据的数据类型
➢ 使用赋值符=等号,用来将一个变量和内存中的对象绑定起来,如果对象在内存中存在就直接绑定,否则赋值运算符后面的对象会被即时创建之后进行绑定。
那就存在问题了,创建的100和200这两个数据,内存中进行了什么样的处理的呢?
python将这样没有引用变量指向的对象,回收到了对象缓冲池(PS:对象缓冲池也是内存中的一个区域),方便下次使用的时候直接获取,所以在使用python的时候,一定要注意内存泄漏的问题。关于python内存管理这一部分,后续我们会单独进行讲解。
操作符,就是用于进行数据运算的符号,常见的操作符一般有赋值运算符、算数运算符、逻辑运算符、关系运算符等等。
注意:
➢ 在Python2中,除法运算和地板除法运算是一个结果,除非是加上一句 – from future import division,向后兼容,此时python2的结果和python3就一致了,这个其实是为了向3过渡,大家知道就行了。
➢ 在python3中,除法运算和地板除法运算结果不一样
注意:
这里的逻辑运算符,python中只有and|or|not,在其他语言中,也有类似&&、||、!的符号来表示 and、or、not 的三种关系的
➢ and/&&:并且运算,当运算符两边的数据都为True才返回True,否则返回False
➢ or/||:或者运算,当运算符两边的数据都是False才返回False,否则返回True
➢ not/!:非运算,对结果进行取反,如果为True结果为False,如果为False则结果为True
成员运算符,主要用于判断某个成员是否出现在某个对象中。
users = [‘蔡徐坤’,‘王一博’,‘李现’,‘吴亦凡’];
im = ‘蔡徐坤’
im in users
True #这表示蔡徐坤在 users 中
czf = ‘陈振富’
czf in users
False ##表示陈振富不在这个列表中
‘蔡徐坤’ in users
True #表示蔡徐坤在这个list中
标识运算符,主要用于两个不同的变量数据类型的检测。
我们定义a=12,b=12,当检测a is b时结果为:True;当检测a is not b时结果为:False。
python中的输入输出,在初学 python 的时候是比较有用的一个交互操作方式,主要用于人机交互。
python2.x通过print语句和print()函数进行数据输出,习惯上使用print语句的人更多些,python3.x通过print()函数进行数据输出,建议大家使用print()函数进行输出,python3是将来的趋势
python2.x 通过 raw_input()函数进行提示输入,用户输入的数据,可以通过函数的返回值进行接收,方便后续的使用,如:name = raw_input(“请输入您的用户名称:”) 。
python3.x 通过 input()函数进行提示输入,用户输入的数据,同样可以通过函数的返回值进行接收方便后续的使用,如:name = input(‘请输入您的用户名称:’)
python 提供了 3 种输入输出标准文件对象,分别为标准输入、标准输出和标准错误;分别对应了 sys 模块中的sys.stdin,sys.stdout,sys.std.err。
在python中,print()函数用于实现数据的展示输出,其实底层是 print()打印函数将文件数据输出到sys.stdout标准输出并添加了一定的格式,如转换为文本格式等等;print()函数
同样也可以将数据输出到指定的文件中。
print()函数接受打印输出使用逗号分隔的对象列表,在行位会默认添加一个换行符号,如果不想换行,那么最后一个元素的后面添加一个逗号即可!
print()函数可以通过指定格式来输出对应的数据。
语法:print("expression %format , %format " %(variable1, variable2))
这里的%format 表示格式化占位字符,variable 表示用于替换占位字符的变量。
%后面紧跟着的就是格式化字符,语法结构如下:
%[[(name)] [flag] [width] [.precision]]typecode
name:位于括号中的一个属于后面的字典的键的名称,用于选择一个具体项
flag:一个标识位
- [-]表示左对齐,默认右对齐
- [+]表示数字显示符号,正数前面会自动添加+,负数自动添加-
- [0]空白字符使用 0 进行填充
width:用于指定当前占位符的数据占用多少个字符的宽度
precision:小数点,用于按照精度分割字段的宽度
常见的格式化字符如下:
格式化字符 | 描述 |
---|---|
d/i | 十进制整数或者长整数 |
u | 无符号整数或长整数 |
o | 八进制整数或长整数 |
x | 十六进制整数或长整数 |
X | 十六进制整数(大写字母) |
f | 浮点数,如3.1415926 |
e | 浮点数 ,如5.1415e±10 |
E | 浮点数,如5.1415E±10 |
g/G | 指数小于-4或者更高精度时使用%e或者%E否则使用%f |
s | 字符串或任意对象,格式化代码使用str()生成字符串表示形式 |
r | 同repr()生成的字符串 |
c | 单个字符 |
% | 字面量% |
➢ 顺序结构:按照顺序依次逐行执行代码的过程。自左向右,自上而下。
➢ 选择结构:程序按照不同的条件执行不同的处理代码的过程。
➢ 循环结构:程序按照指定的条件,如果条件满足就重复指定一端处理代码的过程。
在任何一门编程语言中,必不可少的需要三大流程(顺序、选择、循环),为什么呢?因为在真正开放中我们的代码总是有运行顺序的,其实我们的代码总是遵循这样一个运行顺序:自左向右,自上而下。这个也是三大流程中的顺序运行代码。然而代码有时候仅仅这样是不够的,如我们有时候需要判断一下情况,如果成立了我们就如何运行,如果不成立了又如何运行,这个就是选择结构。有时候我们需要重复执行一些代码好些次,那么我们就需要循环执行对应的代码,这个就是循环流程。顺序流程没什么可说的,只要知道就行了,所以今天的重点就是选择和循环流程。
正常情况下,我们完成一件事情的过程中,可能会存在多种条件限制。
如:要进入教室,如果有钥匙则开锁进入,没有钥匙则进入不了,需要找钥匙。这样的情况下,需要根据不同的条件,执行不同的逻辑处理过程,反映在我们的程序中也是一样的,也就是我们接下来要说的程序结构。
expression是一个表达式判断条件,表达式执行结果为 True 或者 False
if expression:选择结构中执行的代码,代码缩进4个空格,也就是一个Tab键[强制规范]
executor code
res = input("请你输入1-7 数字,表示今天星期几:");
res = input("请你输入1-7 数字,表示今天星期几:");
# 单分支 if
# if res == "1":
# print("今天星期%s"%res);
# 双分支 if--else
# if res == "1":
# print("今天星期一");
# else:
# print("今天不是星期一");
# 多分支 if--elif--else
if res == "1":
print("今天星期一");
elif res == "2":
print("今天星期二");
elif res == "3":
print("今天星期三");
elif res == "4":
print("今天星期四");
elif res == "5":
print("今天星期五");
elif res == "6":
print("今天星期六");
elif res=="7" :
print("今天星期天");
else:
print("你输入了错误的数字");
注意:python中不提供switch-case语法结构
程序结构中的循环结构,用于重复执行一段相同处理逻辑的代码。
如:要计算 1~10 的加法运算,我们常规的可以通过 1+2+…+10 来进行编码运算;但是1~100 甚至 1~10000 的叠加运算,普通的编码方式就不适合了,此时就需要用到循环结构
python 提供了两种循环结构
➢ for [variable] in [list] 循环
➢ while [expression] 循环
下面,就两种循环分别进行讲解:
for…in循环的语法结构如下:
for 变量 in 一组数据的列表
//直接使用变量,这里的变量每次就是一个列表中的元素
比如:users = [“陈振富”,“嘻嘻”,“哈哈”,“嘿嘿”]
现在我们要打印这个列表的四个元素,事实上这四个还好,我们也可以一个一个打印出来,但是如果有一百个一万个那我们打印的工作量就太大了,我们可以输for u in users(其中的u只是我定义的变量,无特殊含义,定义成其他形式也行)让系统自动打印出来。
同样的,我们也可以使用 python 内置的函数来动态生成列表,对动态列表也是可以循环进行处理的。
# 求 0—100 的和:
sum = 0 #申明一个变量为 0
#range()函数能生成一个从 0 开始的列表,每次加一。最后一个值比传递的参数少一
#如 range(5),则生成 0,1,2,3,4。注意
for i in range(101):
sum += i
print("0--100 的和是:%d"%sum)
#运行结果是: 5050
# 求 1—10 的积:
sum = 1;
for i in range(10):
sum *= (i+1)
print("1--100 的积是:%d"%sum)
#运行结果是: 3628800
python 为了方便通过条件进行数据的循环控制,提供了while 循环,当条件满足时重复执行,当条件不满足时跳出循环。
while 循环语法结构:
while 条件表达式:
//循环体中的代码
# 以登录用户名和密码为例
#输入用户名称
username = '';
#输入用户密码
password = "";
#状态判断的标示符
status = False;
while username != "admin" or password != "123456":
if status:
print("您输入的用户名称或者密码错误!!,请再次输入!!");
username = input("请输入您的用户名称:");
#输入用户密码
password = input("请输入你的密码:");
status = True;
print(username+"---"+password)
print("登录成功");
break 关键字,主要用在循环体的代码中,用于在满足一定条件时跳出循环。
如:计算1~100的和,如果一旦出现 20,代码则跳出不在执行。
sum = 0;
for i in range(101):
if i == 20:
break;
sum += i;
# str 可以讲一个数字转换为字符串,那么字符串就可以拼接了,否则会报错的
# 如:print("此时 sum="+sum); #会报错
# 只能使用 print("此时 sum=%d"%sum);
print("此时 sum="+str(sum));
我们在项目开发过程中,经常会遇到类似的情况,如果一旦要在一定条件满足时终止循环,这个时候我们就可以使用break来终止代码的继续循环了。
continue 关键字和 break 关键字一样,都是用来控制循环的,不同的是 continue 关键字,它更多的用于满足条件后终止本次循环之后进入下一次循环。
如:计算1–100的和,但是如果遇到偶数不做任何处理:
# 求 1-100 的奇数的和
sum = 0;
for i in range(101):
if i % 2 == 0:
continue;
sum += i;
print("1-100 的奇数的和是:"+str(sum));
# 结果为:2500
在程序设计开发的过程中,作为程序最基本的选择结构和循环结构,特别是编写基础代码的过程中,它占据了非常重要的地位,因此对这两部分的内容的操作我们要非常熟练。
1.选择结构
python只是提供了一种if选择结构,极大程度的简化了根据条件进行不同数据处理逻辑的控制
2. 循环结构
➢ python 提供了 for…in 循环结构和 while 循环结构
➢ for…in 循环结构注重于对固定数据列表的循环遍历和使用
➢ while 循环结构注重于对循环条件的判断来执行循环的过程