目录
-
基础
1.注释
# 单行注释
''' ''' 多行注释
# 单行注释
'''
三引号是多行注释
'''
2.变量
#变量
a=10
b='dsds'
print("a =",a,"b=",b)
3.占位符、格式化输出
“ % ”占位符
%d为age变量的占位符
多个变量占位用 %(a,b) 实现
#占位符、格式化输出
age=10
print("年龄为%d岁"%age)
age+=1
print("年龄为%d岁"%age)
name="yinshao"
country="china"
print("我的名字是",name,",我的国家是",country)
print("我的名字是%s,我的国籍是%s"%(name,country))
输出结果:
年龄为10岁
年龄为11岁
我的名字是 yinshao ,我的国家是 china
我的名字是yinshao,我的国籍是china
常见的格式符号
%s | 字符串 |
%d | 十进制整数 |
%c | 字符 |
%f | 浮点数 |
%o | 八进制整数 |
%x | 十六进制整数 |
4.转义字符
常见转义字符
\t:制表 \n:换行 \r:回车
print("aaa","bbb","ccc")#默认间隔是空格
print("aaa","bbb","ccc",sep='.')#sep表示间隔
print("mmm")#每次打印默认自动换行
print("nnn",end=" ")#end表示尾部属性
print("xxx",end="\n")#换行
print("yyy",end="\r")
print("hello\nword")
输出结果:
aaa bbb ccc
aaa.bbb.ccc
mmm
nnn xxx
hello
word
5.输入与输出
password=input("请输入密码:")
print("您输入的密码是:",password)
print(type(password))
输出结果:
请输入密码:123456
您输入的密码是: 123456
<class 'str'>
#可见使用input命令输入的数据类型为字符型
#若需要计算,则需要强制转换成整型或其他类型
m=input()
n=input()
print(m+n)
输出结果:
5
6
56
#不强制转换,输出的是字符串的拼接
#运算需要强制转换
x=int(input())
y=int(input())
print(x+y)
输出结果:
5
6
11
6.运算符(常见)
幂运算:**
除法:/
整除://
取模:%
j=2
k=3
print(2**3)#幂运算
print(j/k)#除法
print(j//k)#整除
输出结果:
8
0.6666666666666666
0
-
语句
#条件语句
if 判断条件1 :
执行语句1
elif 判断条件2:
执行语句2
else:
执行语句3
if 1:
print("TRUE")
if True:
print("true")
输出结果:
TRUE
true
Example:
score=52
if score>=90:
print("A")
elif score>=80:
print("B")
elif score >= 70:
print("C")
elif score>=60:
print("D")
else:
print("not pass")
输出结果:not pass
#随机数的引入
import random(引用函数)
g=random.randint(0,100000)(括号里面是范围)
#For循环
for i in range ( 初(默认0),末,步长(默认1) ) :
执行语句
for i in list str 之类:
执行语句
for i in range(5):#[0,5)
print(i)
print(" ")
for j in range(5,8):#[5,8)
print(j)
print(" ")
for m in range(0,9,2):#[0,9)每次加2
print(m)
name="zaozhuang"
for n in name:
print(n,end="\t")#也可以遍历字符串
print("")
p=["sc","sdfsd","aabb","dssswwe"]
for h in range(len(p)):
print(h,p[h])
print("len=",len(p))#len(p)表示数组长度
输出结果:
0
1
2
3
4
5
6
7
0
2
4
6
8
z a o z h u a n g
0 sc
1 sdfsd
2 aabb
3 dssswwe
len= 4
#While 循环
while 条件:
执行语句
mk=0
sum=0
while mk<=100:
sum=sum+mk
mk=mk+1
print(sum)
输出结果:5050
#break:结束循环
#continue:结束本次循环,以下不执行
aa=0
while aa<=5:
print("*"*10)
aa=aa+1
if(aa==3):
break#直接结束
print(aa)
bb=0
while bb<=5:
print("*"*10)
bb=bb+1
if(bb==3):
continue#第五次循环时,以下不在执行
print(bb)
输出结果:
1
**********
2
**********
**********
4
**********
5
**********
6
-
列表
类似数组
定义:list[ ]
list1 =[1,"666","xiaohai",56,89,"wang","立",522]#元素可以是不同类型
list2=[23,"ds","dsdwd22"]
list=[]
1.列表的遍历
方法一:循环下标进行遍历
i=0
for i in range(0,len(list2)):
print(list2[i])
i=i+1
方法二:直接循环列表内元素
for j in list2:
print(j)
方法三:枚举函数enumerate,同时输出下标及元素
list1 =[1,"666","xiaohai",56,89,"wang","立",522]
for m,n in enumerate(list1):
print("下标:",m,"元素:",n)
#m遍历列表的下标,遍历列表元素
输出结果:
下标: 0 元素: 1
下标: 1 元素: 666
下标: 2 元素: xiaohai
下标: 3 元素: 56
下标: 4 元素: 89
下标: 5 元素: wang
下标: 6 元素: 立
下标: 7 元素: 522
2.列表的切片
list[起始:末:偏移量] 左闭右开 偏移量默认1
#最左侧第一个字符,偏移量是 0,第二个偏移量是 1.直到 len(str)-1为止。
#最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2.直到-len(str)为止。
list1 =[1,"666","xiaohai",56,89,"wang","立",522]
print(list1[1:6:2])
print(list1[6:1:-1])
print(list1[6:1:-2])
输出结果:
['666', 56, 'wang']
['立', 'wang', 89, 56, 'xiaohai']
['立', 89, 'xiaohai']
3.常用函数
(1).增
#append 默认增加到尾部
list.append("增加的字符或列表")
list1 =[1,"666","xiaohai",56,89,"wang","立",522]
list1.append("yin")
print(list1)
输出结果:
[1, '666', 'xiaohai', 56, 89, 'wang', '立', 522, 'yin']
#extend 在尾部新增列表
list1.extend(list2) 在list1后+list2
list1.extend(list2)
print(list1)
输出结果:
[1, '666', 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 23, 'ds', 'dsdwd22']
#insert
list.insert(插入位置,插入值)
list3=[0,1,2]
list3.insert(1,56)#1号位插入56
print(list3)
输出结果:
[0, 56, 1, 2]
(2).删
#del 删除列表指定元素
del list[删除元素的下标]
list1=[1, '666', 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 23, 'ds', 'dsdwd22']
del list1[1]
print(list1)
输出结果:
[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 23, 'ds', 'dsdwd22']
#pop 删除最后一个元素
list.pop()
list1=[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 23, 'ds', 'dsdwd22']
list1.pop()
print(list1)
输出结果:
[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 23, 'ds']
#remove 删除指定元素
list.remove(删除的元素) 若有重复,只删除前面的
list1=[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 23, 'ds']
list1.remove(23)
print(list1)
输出结果:
[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 'ds']
#clear
list.clear() 删除所有元素
list6=[12,56,89,2,3]
list6.clear()
print(list6)
输出结果:
[ ]
(3).改
list[修改的位置下标]=修改的值
list1=[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 'ds']
list1[8]="yao"
print(list1)
输出结果:
[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 'yao']
(4).查
#in not in 判断元素是否在列表中,默认返回ture/flase
元素 in list
元素 not in list
print("56" in list1)
输出结果:False
#index 查询元素是否在某一区间的位置,返回下标
list.index(查询元素,起始位置,末位置) 若有重复则输出第一个位置
list1=[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 'yao']
print(list1.index("xiaohai",0,5))
输出结果:1
# count 某个元素出现的次数
list.count(元素)
list1=[1, 'xiaohai', 56, 89, 'wang', '立', 522, 'yin', 'yao']
print(list1.count("666"))
输出结果:0
(4).排序
#sort 由小到大排(纯数字或者全部强制转换同一类型)
list.sort() 由小到大 list.sort(reserve=True) 由大到小
list4=[2,5,3,1,48,0,2,6,9]
list4.sort()
print(list4)
list4.sort(reverse=True)
print(list4)
输出结果:
[0, 1, 2, 2, 3, 5, 6, 9, 48]
[48, 9, 6, 5, 3, 2, 2, 1, 0]
4.二维列表
列表作为列表的元素即为二维列表
调用:list[第一层位置][第二层位置] 依次....
list5=[[12,45],["ds","wr","dswwdds"],["中国"]]
print(list5[1])
print(list5[1][1])
输出结果:
['ds', 'wr', 'dswwdds']
wr
5.小题目
8个老师随机分配到3个办公室
import random
office = [[],[],[]]
teacher = ["A","B","C","D","E","F","G","H"]
for name in teacher:
index=random.randint(0,2)
office[index].append(name)
k=0
for k in range(0,len(office)):
print(office[k])
k=k+1
输出结果:
1:
['G']
['A', 'E']
['B', 'C', 'D', 'F', 'H']
2:
['C', 'D', 'H']
['E', 'G']
['A', 'B', 'F']
-
字符
1.字符串
'一般字符串' "一般句子" ''' 一般段落 '''
word ='字符串'
sen= "这是一个句子"
par ="""
这是一个段落
可以写好几行
"""
print(word)
print(sen)
print(par)
输出结果:
字符串
这是一个句子
这是一个段落
可以写好几行
2.转义字符
# \ 使用可以输出一些具有特殊意义的字符 \n换行符 rjia
a='\'' # \ 可以转义字符
b='I\'m a student'
print(a)
print(b)
print("hello\nzaozhuang")
print(r"hello\nzaozhuang")
输出结果:
'
hello
zaozhuang
hello\nzaozhuang
3.切片
#str[起始:末:偏移量] 左闭右开 偏移量默认1
#最左侧第一个字符,偏移量是 0,第二个偏移量是 1.直到 len(str)-1为止。
#最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2.直到-len(str)为止。
str1="zaozhuang"
print(str1)
print(str1[-8])
print(str1[1])
print(str1[0:3])#[0,3)
print(str1[0:9:2]) #[起始值:结束值:间隔值]
print(str1[-4:])#倒数四个
print(str1[-5:-3])#倒数5个到倒数第3个
print(str1[::-1])#间隔为1,反向输出
str2="ni hao"
print(str1+str2)#字符拼接
print(str1*3)
输出结果:
zaozhuang
a
a
zao
zohag
uang
hu
gnauhzoaz
zaozhuangni hao
zaozhuangzaozhuangzaozhuang
4.函数
# a='helLO'
a.capitalize() | 产生新的字符串,首字母大写 | HELLO |
a.title() | 产生新的字符串,每个单词都首字母大写 | hello |
a.upper() | 产生新的字符串,所有字符全转成大写 | HELlo |
a.upper() | 产生新的字符串,所有字符全转成小写 | Hello |
a.swapcase() | 产生新的,所有字母大小写转换 | Hello |
aaa='helLO'
print(aaa.upper()) # 全部大写
print(aaa.lower()) # 全部小写
print(aaa.swapcase()) # 大小写互换
print(aaa.capitalize()) # 首字母大写,其余小写
print(aaa.title()) # 首字母大写
输出结果:
HELLO
hello
HELlo
Hello
Hello
#使用内置函数 ord()可以把字符转换成对应的 Unicode 码;
#使用内置函数 chr()可以把十进制数字转换成对应的字符。
print(ord('a'))
print(ord('高'))
print(chr(66))
输出结果:
97
39640
B
#字符串替换
str.replace(代替换的字符,替换成)
bbb="dsssadaaedfrgtgfds"
bbb=bbb.replace('a','高')
print(bbb)
输出结果:dsss高d高高edfrgtgfds
#分割与合并(生成列表)
split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔 符,则默认使用空白字符(换行符/空格/制表符)。
join()的作用和 split()作用刚好相反,用于将一系列子字符串连接起来。
str.split() 见空格就分割
str.split('1')见1就分割
' * '.join(str) 每一组之间插入*连接起来
cc= "to be or not to be"
print(cc.split())#见空格就分开
print(cc.split('be'))#见be直接拿出来
dd = ['sxt','sxt100','sxt200']
print('*'.join(dd))#在每组之间插入*
输出结果:
['to', 'be', 'or', 'not', 'to', 'be']
['to ', ' or not to ', '']
sxt*sxt100*sxt200
#常用函数
len(a) | 字符串长度 |
a.startwith() | 以指定字符串开头 |
a.endwith() | 以指定字符串结尾 |
a.find() | 第一次出现指定字符串的位置 |
a.rfind() | 最后一次出现指定字符串的位置 |
a.count() | 指定字符串出现了几次 |
a.isalnum() | 所有字符全是字母或数字 |
ccc="""abcdddefghijklmnopqrstuvwxyz"""
print(len(ccc))
print(ccc.startswith("abcd"))
print(ccc.endswith('xyz'))
print(ccc.find('h'))
print(ccc.rfind('j'))
print(ccc.count('d'))
print(ccc.isalnum())
输出结果:
28
True
True
9
11
3
True
-
元组
#Tuple 元组
元组中的元素无法修改,但可以包含对象,列如list 元组写在小括号里,元素用,分开,定义只有一个元素的元组,也必须加”,“
t1=("abcd",789,2.236,'rabit',70.2)
t2=(2,)
t21=(2)
t3=(1,["asss",2],56)
t4=()#空元组
t3[1][0]="S"
print(t1)
print(t2)
print(type(t2))#有一个元素必须加逗号的原因
print(type(t21))
print(t3)
#二维元组 tuple
tuple[第一层][第二层]...
输出结果:
('abcd', 789, 2.236, 'rabit', 70.2)
(2,)
<class 'tuple'>
<class 'int'>
(1, ['S', 2], 56)
#切片(同理)
最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2.直到-len(str)为止。
最左侧第一个字符,偏移量是 0,第二个偏移量是 1.直到 len(str)-1为止。
t1=("abcd",789,2.236,'rabit',70.2)
print(t1[1:3])
print(t1[-2])
print(t1[1:5:2])
输出结果:
(789, 2.236)
rabit
(789, 'rabit')
#其他
del tuple 删除整个元组,不能删除元素
count 记数
强制转换 tuple(list)
t5=(1,1,1,1,2,2,6,6)
print(t5.count(1))
print("/************************")
#强制转换
list=[1,2,"ff"]
t=tuple(list)
print(t)
print(type(list))
print(type(t))
输出结果:
(1, 2, 'ff')
<class 'list'>
<class 'tuple'>
-
字典
#dic 字典 大括号表示
dic={"key":value,....} 键-值—(key,value) 键具有不变性,键必须唯一
#访问
dic["key"] 直接访问不存在的key,会报错
dic.get(key) 利用get()访问不存在的key,会返回none
dic.get(key,自定义返回值) 访问不存在的key,会返回自定义的值
dic1={"A":95,"B":"baba","C":20,"D":"ezz","E":1}
print(dic1["A"])#访问 dic[key]
#访问不存在的key,直接访问会出错
#print(dic1[F])
print(dic1.get("F"))#使用get访问不存在的键,默认返回none
print(dic1.get("l",88))#get(key,设置返回值) 此键默认返回88
输出结果:
95
None
88
#遍历
遍历键 for key in dic.key():
print(key)
遍历值 for value in dic.values():
print(value)
遍历键与值 for key,value in dic.items():
print("key is %s,value is %s"%(key,value))
dic1={"A":95,"B":"baba","C":20,"D":"ezz","E":1}
for key in dic1.keys():#遍历键
print(key)
print("*****")
for value in dic1.values():#遍历值
print(value)
print("*****")
for key1,value1 in dic1.items():
print("key is %s,value is %s"%(key1,value1))
输出结果:
A
B
C
D
E
F
*****
sha
baba
20
ezz
1
ssss
*****
key is A,value is sha
key is B,value is baba
key is C,value is 20
key is D,value is ezz
key is E,value is 1
key is F,value is ssss
#其他函数
(1)增
dic[new key]=new value
(2)删
del dic[键] 删除该键及其对应的值
del dic 直接删除字典
clear 清空字典元素
(3)改
dic["key"]='new value'
(4)查
dic.keys()#得到所有的键(以列表形式)
dic.values() #得到所有的值(以列表形式)
dic.items() #得到所有的项(以列表(含有元组)形式)
dic1={"A":95,"B":"baba","C":20,"D":"ezz","E":1}
dic2={"a":2,"s":56,"sa0":26}
dic1["F"]="ssss"
print(dic1)
print("***************************")
dic2={"a":2,"s":56,"sa0":26}
#del dic[键] 删除该键及其对应的值
del dic2["s"]
print(dic2)
#del dic 直接删除字典
#del dic2
#print(dic2)
# clear 清空字典元素
dic2.clear()
print(dic2)
print("*********************")
dic1["A"]='sha'
print(dic1)
print("******************")
print(dic1.keys()) #得到所有的键(以列表形式)
print(dic1.values()) #得到所有的值(以列表形式)
print(dic1.items()) #得到所有的项(以列表(含有元组)形式)
print("*********************")
输出结果:
{'A': 95, 'B': 'baba', 'C': 20, 'D': 'ezz', 'E': 1, 'F': 'ssss'}
***************************
{'a': 2, 'sa0': 26}
{}
*********************
{'A': 'sha', 'B': 'baba', 'C': 20, 'D': 'ezz', 'E': 1, 'F': 'ssss'}
******************
dict_keys(['A', 'B', 'C', 'D', 'E', 'F'])
dict_values(['sha', 'baba', 20, 'ezz', 1, 'ssss'])
dict_items([('A', 'sha'), ('B', 'baba'), ('C', 20), ('D', 'ezz'), ('E', 1), ('F', 'ssss')])
*********************
-
集合
#定义
set={ } 集合无序性,无重合
set1=[1,"6566"]#定义set1=[]中括号
print(set1[0])#调用
s=set([1, 1, 1, 1, 11, 12, 2, 2, 22, 2])#强制转换为集合
print(s)#集合无序性 无重合
输出结果:
1
{1, 2, 11, 12, 22}
-
函数
#函数定义
def f(参数):
内容
return 返回值(可以多个)
def f1():#不带参
print("*"*10)
print("函数定义")
print("*"*10)
def f2(a,b):#带参
c=a+b
print(c)
def f3(a,b):#返回值
return a+b,a-b#同时返回两个
#函数调用
f(参数)
f1()
f2(2,3)
print(f3(5,6))
#变量类型
全局变量:主函数定义的变量
局部变量:函数里定义的变量
在函数中修改全局变量:global m
m=100#全局变量
def t1():#局部#bian变量
m=150
print("t1 of m:%d"%m)
t1()
print("m:%d"%m)
def t2():
global m#在函数中修改全局变量
m=200#定义为global 为全局变量
print("t2 of m:%d"%m)
t2()
print("m:%d"%m)
输出结果:
t1 of m:150
m:100
t2 of m:200
m:200
-
文件
#打开 读写
#f=open("文件名","模式")
f1=open("t1.txt","w")#打开文件,写入模式,若为这个文件,则新建
f1.write("hello worldhello worldhello world\nhello worldhello worldhello world\nhello worldhello worldhello worldhello world")#写入文件
f1.close()#关闭文件
f2=open("t1.txt","r")#只读,读文件,若文件不存在,则报错
a=f2.read(5)#读5个字符
print(a)
b=f2.read(6)#继承后面依次往后排
print(b)
c=f2.readlines()#继承上面,每一行按列表形式输出
print(c)
#f.readline 继承上面,一行一行输出
f2.close()
输出结果:
hello
world
['hello worldhello world\n', 'hello worldhello worldhello world\n', 'hello worldhello worldhello worldhello world']
#os应用
获取目录或文件名
filename = '/1234/year/month/day/hello.jpg'
print(os.path.basename(filename))
print(os.path.dirname(filename))
hello.jpg
/1234/year/month/day
返回指定目录下的所有文件名和目录名 ,返回的是一个列表
print(os.listdir('img'))
['file1']
创建目录【 mkdir / mkdir -p】
os.mkdir('img')
os.makedirs('img/file1/file2')
可以删除多层递归的空目录,若目录中有文件则无法删除
os.removedirs('img/file1/file2')
不能递归删除目录,一层一层删
os.rmdir('img')
OSError: [Errno 39] Directory not empty: 'img'
创建文件 删除文件
os.mknod('00_ok.txt')
os.remove('00_ok.txt')
文件重命名
os.rename('data.txt','data1.txt')
判断文件或目录是否存在
print(os.path.exists('ips.txtyyyy'))
print(os.path.exists('/home/kiosk/PycharmProjects/2019python/ips.txt'))
False
True
-
异常处理
#捕获异常
try:
print("-------------------1")
f1=open("t8.txt","w")
print("-------------------2")
except IOError:
print("error")
finally:#必执行
print("文件关闭")
f1.close()