一、python的流程控制
1. if语句
a=45
if a<0:
print(1)
elif a>0 and a<=10:
print(2)
elif a>10 and a<=20:
print(3)
else:
print(4)
打印结果: 4
使用if...elif..elif..else.. 来进行条件的判断,,执行的条件满足后,只执行满足条件的语句,执行完成后,条件判断结束。相当于Java里的switch()...case..判断。
2. for循环
# for循环
lists=["cat","dog","window"]
for i in lists:
print(i,len(i))
# 注意使用链表时,修改链表的节点的时候会出现不安全的问题,此时需要迭代它的副本
for i in lists[:]:
if len(i)>3:
print(i)
lists.insert(0,i)
print(lists)
打印结果:
cat 3
dog 3
window 6
window
['window', 'cat', 'dog', 'window']
注意: 在迭代过程中修改迭代序列不安全(只有在使用链表这样的可变序列时才会有这样的情况)。如果你想要修改你迭代的序列(例如,复制选择项),你可以迭代它的复本。使用切割标识就可以很方便的做到这一点。
3.range函数
1) range(Integer) 表示从0开始到指定数的左闭右开区间的所有数集成的一个序列。
#range()函数,从0开始
for i in range(5):
print(i)
打印结果为:
0
1
2
3
4
2) range(start,end) 表示从start到end的左闭右开区间的所有数集成了一个序列。
#range()函数指定范围是左闭右开区间
for j in range(5,10):
print(j)
打印结果为:
5
6
7
8
9
3) range(start,end,length) 表示从start到end等差为length的所有数集成的一个序列。
print("range()函数的第三个参数为步长")
for k in range(10,20,3):
print(k)
打印结果为:
10
13
16
19
4. else在for循环和while循环中的使用
else可以用在for循环和while循环结束后,如果中间使用了break,那么将不会走else。
lists=[1,2,3,4,5];
for i in lists:
print(i)
else:
print("for循环遍历完了!")
a=1;
while a<5:
a+=1
print(a)
else:
print("while条件结束了!")
打印结果:
1
2
3
4
5
for循环遍历完了!
2
3
4
5
while条件结束了!
在for循环里,添加一个条件判断如果i==4,那么Break:
lists=[1,2,3,4,5];
for i in lists:
print(i)
if(i==4):
break
else:
print("for循环遍历完了!")
打印结果:
1
2
3
4
5. pass语句的使用
pass可以在需要添加一些必要语句的使用,比如说需要创建一个类,但是又什么都不做;又比如 pass可以当做函数和结构体的占位符。
1 ) 创建一个类
class MyEmptyClass:
pass
2) 声明一个函数
def initLog(*args):
pass
6. 函数的定义
python和其他语言一样支持函数,如,写一个费波纳茨数列的函数。
使用def关键字定义函数:
# 费波纳茨数列
def flib(n):
a,b=0,1;
while(b<n):
print(b)
a,b=b,a+b;
flib(100);
二、python的数据结构
列表
列表的常用方法
-
list.
append
(x)
把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]
。
-
list.
extend
(L)
将一个给定列表中的所有元素都添加到另一个列表中,相当于 a[len(a):] = L
。
-
list.
insert
(i, x)
在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x)
会插入到整个列表之前,而 a.insert(len(a), x)
相当于 a.append(x)
。
-
list.
remove
(x)
删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
-
list.
pop
([i])
从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop()
返回最后一个元素。元素随即从列表中被删除。
-
list.
clear
()
从列表中删除所有元素。相当于 del a[:]
。
-
list.
index
(x)
返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
-
list.
count
(x)
返回 x 在列表中出现的次数。
-
list.
sort
()
对列表中的元素就地进行排序。
-
list.
reverse
()
就地倒排列表中的元素。
-
list.
copy
()
返回列表的一个浅拷贝。等同于 a[:]
##数据结构之列表
lists1=['a','b','c']
#在列表末尾添加一个元素
lists1[len(lists1):]='d'
print("直接使用下标给最后一个元素赋值:",lists1)
lists1.append('e')
print("使用append方法插入:",lists1)
lists1.insert(len(lists1),'f')
print("使用Insert()方法插入:",lists1)
# extend() 将列表新增一个新的列表
list2=[1,2,3]
lists1.extend(list2)
print("扩展一个列表后的集合为:",lists1)
# remove 方法,移除列表中的一个元素,参数为要传的元素,如果元素不存在,那么会报错 X not in list
lists1.remove(1)
print("移除元素后的列表为",lists1)
# pop([i])方法, 移除列表中的指定位置的元素,并返回,如果不指定参数 ,那么将移除最后一个元素。
lists1.pop(0)
print("pop后的集合为:",lists1)
v=lists1.pop()
print("pop最后一个元素后",v,"的集合为:",lists1)
# count(x) 返回x元素在列表中出现的次数
num=lists1.count(2)
print("2出现的次数为:",num)
# sort()对列表的元素进行排序,注: 排序只能对同一种的数据类型进行比较,如果有Int和str,那么调用此方法就会报错。
list3=[6,1,4,7,3,3,1,2,8,1]
list3.sort()
print("排序后的列表为:",list3)
# reverse()方法
list3.reverse()
print("反转后的列表为:",list3)
# copy()方法,是一个浅拷贝,相当于a[:]
list4=list3.copy()
list5=list4[:]
print("拷贝后的列表为:",list4,list5)
# 清空列表相当于 del lists1[:]
#lists1.clear()
del lists1[:]
print("清空列表:",lists1)
打印结果为:
直接使用下标给最后一个元素赋值: ['a', 'b', 'c', 'd']
使用append方法插入: ['a', 'b', 'c', 'd', 'e']
使用Insert()方法插入: ['a', 'b', 'c', 'd', 'e', 'f']
扩展一个列表后的集合为: ['a', 'b', 'c', 'd', 'e', 'f', 1, 2, 3]
移除元素后的列表为 ['a', 'b', 'c', 'd', 'e', 'f', 2, 3]
pop后的集合为: ['b', 'c', 'd', 'e', 'f', 2, 3]
pop最后一个元素后 3 的集合为: ['b', 'c', 'd', 'e', 'f', 2]
2出现的次数为: 1
排序后的列表为: [1, 1, 1, 2, 3, 3, 4, 6, 7, 8]
反转后的列表为: [8, 7, 6, 4, 3, 3, 2, 1, 1, 1]
拷贝后的列表为: [8, 7, 6, 4, 3, 3, 2, 1, 1, 1] [8, 7, 6, 4, 3, 3, 2, 1, 1, 1]
清空列表: []
列表的应用
1. 把列表当做栈来使用(栈的特性: 先进后出,最后进的就最先弹出去)
# 把列表当做栈来使用
stack=[1,3,5,7]
print(stack)
#放入一个元素,使用append(),放在最后面
stack.append(9)
print(stack)
#弹出最后一个元素
stack.pop()
print(stack)
打印结果:
[1, 3, 5, 7]
[1, 3, 5, 7, 9]
[1, 3, 5, 7]
2. 把列表当做队列来使用(队列的特性: 先进先出,最先进去的最先出队列)
#把列表当做队列来使用,先进先出的特性,需要实现一个deque,来自Collections包
queue=deque(["apple","bannana","pear"])
print(queue)
#从队列中插入一个元素
queue.append("orange")
print(queue)
#将队列的元素移除一个
queue.popleft()
print(queue)
3. 列表推导式
可以直接使用列表推导式来对列表做筛选操作,返回的是一个集合,如下, 筛选出 列表中除了1,6 外的其他元素:
candidates = [1, 2, 4, 3, 6]
# 列表推导式
a = {x for x in candidates if x not in [1, 6]}
print(a)
打印结果: {2, 3, 4}
使用索引和分片修改列表
1. 使用索引修改列表
类似于字符串,可以直接使用索引修改列表里的内容,如下:
s=[1,2,3] , s[0]=2
2. 使用分片修改列表
分片修改列表其实相当于两个操作,第一步删除分片索引对应的列表内容,第二步将等号右边的值插入到开始到分片的位置。
s=[1,2,3 ] ,s[1:2]=[4,5]
打印结果为: [1,4,5,3]
元组和序列
元组
元组由一个或作多个元素,通过逗号相连构成。
基本用法:
1. 输入的时候,元组可以不用(),输出的时候元组一般都带有括号。
a=1,2,3,4,5
b=a,123
print(b)
打印结果: ((1, 2, 3, 4, 5), 123)
2. 元组支持切片,可以使用下标来取出对应的值,下标从0开始。
3. 元组之间可以直接通过"+"进行连接,组成为一个新的元组。
t1 = (1, 2, 3)
t2 = (1, 2)
print(t1 + t2)
print(t1[1])
打印结果:
(1, 2, 3, 1, 2)
2
注: 需要注意的是,元组不能通过指定的下标来进行赋值,否则会报错:
TypeError: 'tuple' object does not support item assignment
a[1]=1
序列
序列拆封,是指等式右边的任意线性序列与等式左边的元素个数要相等。如果个数不相等,那么会报错,类似下面的:
Traceback (most recent call last):
File "D:/Study/PythonStudy/Demo02.py", line 7, in <module>
x,y=t
ValueError: too many values to unpack (expected 2)
例子:
t='a','b','c';
x,y,z=t
print(t)
print(x,y,z)
打印结果:
('a', 'b', 'c')
a b c
集合
集合是python常见的一种数据类型,特性是: 集合是一个无序不重复的元素集合,类似于java集合的set。基本功能包括:
关系测试和消除重复元素。
集合对象还支持,联合(union)、交(intersection)、差(difference)、对称差集(sysmmetric difference)等数学运算。
创建集合的方式有二种:
{} 或者 set()
注: 如果想要创建一个空集合,那么使用set()来创建,不能使用{}, {}用来创建一个空的字典。
# 集合,如果使用set(),那么只能传一个参数,最终输出的结果会根据输入的串进行拆分并且无序
a={1,1,2,3,4,5}
print(a)
b=set("苹果,香蕉,橘子")
print(b)
打印结果:
{1, 2, 3, 4, 5}
{'蕉', '香', '子', '果', '苹', '橘', ','}
字典
字典是python常见的一种数据结构,组成为键值对集合,由1个或多个key:value组成的序列。空字典为: {}
三、模块
模块是指python包含或定义的文件,文件名就是: 名.py ,以.py为后缀,模块的模块名可以有一个全局变量_name_得到。
import demo03
print("导入一个模块:",demo03.lists)
##同时会运行导入模块的代码
注: 1 .模块导入后,执行会先执行导入的模块代码,执行完后,再执行后面的代码。
2. 每个模块只会导入一次,如果之前的模块修改的话,需要重新加载进解释器才能够适用修改的模块,这个时候需要调用一个import .reload(modulename)。
四、输入输出
文件读写
通过函数open()来返回一个文件对象,然后对文件对象进行操作。
open(filename,mode);
mode默认为'r',表示只读, 'w'表示只写,'a'表示在文件追加内容,'r+'表示打开文件进行读取和写入。