python学习笔记
输出
一些基本的输出:
# 这是我的第一个Python程序嘻嘻嘻
print("hello,world") #单行注释
?
'''
这是多行注释,
'''
a=23
print("这是变量:",a)
?
age=18
print("我的年纪是:%d"%age)
print("我的年纪是%s,我的国际是%s"%("小张","中国"))
?
print("www","baidu","com",sep=".") #设置分隔符为.
print("hello",end="")#表示不换行
print("world",end="\t")#表示输出完空一个Tab健
print("python",end="\n")#表示输出完换行
print("1234\n5678")#一行显示1234,另一行显示5678
格式化输出:
c = 3.1415926
print("输出pi保留小数点后两位:{:.2f}".format(c))
#输出结果 输出pi保留小数点后两位:3.14
#后续变量填充到{}中,{:.2f}表示将变量C填充到这个位置时取小数点后两位
一些小tips
在pycherm中:
将光标停留在函数上,按ctrl+B可以查看函数
ctrl+Z 撤回操作
注意:每次运行新的file时单击右键选择运行当前函数,才可以执行当前函数
变量类型
-
变量可以是任意数据类型,在程序中用一个变量名表示 -
变量名必须是英文,数字和下划线,且不能以数字开头 -
字符串类型用单引号或双引号都可 -
赋值: a='ABC'
输入
password = input("请输入密码")
print("您刚刚输入的密码是:",password)
输入的password认为是字符串类型的
强制类型转换
将字符型转化为整型
a=int('123')
b=100+a
print(b)
?
c=int(input("输入c:"))
print("输入了一个数字:%d"%c)
运算符
-
逻辑运算符 : and or not 与或非 -
成员运算符 in : 如果在指定序列中找到值返回True否则返回False not in : 与上面相反
判断语句和循环语句
条件判断
非0和非空的值为True,0或者None为False
if True:
? ?print("True")
? ?print("Answer")
else :
? ?print("False")
print("end") ? ?
#打印True Answer end
注意: 同一层次的代码必须是相同的缩进
注意: if ,else 后面有冒号
else 和 elif 可以一起使用
生成随机数
import random ?#引入随机库
a=random.randint(0,3) #随机生成0~3区间内的数字
循环
一般循环和步进循环
for i in range(5): #i从0~5
? ?print(i)#打印出0,1,2,3,4
? ?
for i in range(0,10,3): #i从0~10每次增长3到10结束 (起始位置:结束位置:步进值)
? ?print(i) #打印出 0,3,6,9
还可以对字符串逐个遍历
name ='seven'
for x in name:
? ?print(x,end='\t')
另一种循环遍历,有点像利用下标遍历数组
a=['aa','bb','cc','dd']
for i in range(len(a)):
? ?print(i,a[i]) #输出i和i里面的元素
while循环
i=1
while i<5:
? ?print(i)
? ?i+=1
注意:记得设置循环结束的条件,不可以写i++
while 和 else连用
当while条件不满足时跳出来执行else语句的内容
count = 0
while count<5:
? ?print (count,"小于5")
? ?count+=1
else :
? ?print(count,"小于等于5")
字符串
单引号,双引号,三引号
字符串截取
str = 'seven'
print(str)
print(str[0:3]) #【起始位置:结束位置:步进值】
print(str[2])#也可以只访问一个内容str = 'seven'
?
print(str[:5]) #从字符串开始的第一个字符输出到第五个
print(str[4:]) #从第四个字符输出到最后一个
字符串拼接
str = 'seven'
print(str+',你好') #采用加号拼接
print("-"*30) ?#打印30个横线
print("hello\nworld") #转义字符,hello之后world换行输出
print(r"hello\nworld") #字符串前面有r会使转义字符失效,显示原始字符
字符串替换
replace函数
注意:replace 不会改变原 string 的内容
temp_str = 'this is a test'
print(temp_str.replace('is','IS'))
print(temp_str)
?
#输出
thIS IS a test。
this is a test。
字符串常用方法
-
bytes.decode(encoding="utf-8",errors="strict") 设置解码格式为utf-8 -
encode(encoding="utf-8",errors="strict") 在编码使用utf-8 -
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字返回True,否则返回False -
isapha() 如果字符串至少有一个字符并且所有字符都是字母返回True,否则返回False -
isdigit() 如果字符串只包含数字返回True否则返回False -
isnumeric() 如果字符串只包含数字返回True否则返回False -
join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 -
len(string) 返回字符串长度 -
istrip() 截掉字符串左边的空格或指定字符 -
restrip() 删除字符串末尾的空格 -
split(str="",num=string.count(str) num=string.count(str)) 以str 为分隔符截取字符串,如果num有指定的值,则仅截取 num+1 个子字符串
列表
namelist = [] #定义一个空的列表
namelist = ["小张","小王","小李"]
test = [1,"测试"] #列表中可以存储混合类型
print(namelist[0]) #可以使用下标输出
?
#也可以循环打印列表中每一个元素
for name in namelist:
? ?print(name)
增
三种在列表中增加元素的方法:
nametemp = input("请输入要增加的姓名:")
namelist.append(nametemp) #在末尾追加一个元素
?
a=[1,2]
b=[3,4]
a.append(b) #将列表b当作一个元素,加入到a列表中
a.extend(b) #将b里面的每一个元素,逐一的加入到a中
?
a=[0,1,2]
a.insert(1,3) #第一个变量表示插入的下标,第二个表示要插入元素
删
movieName=["加勒比海盗","骇客帝国","指环王","速度与激情"]
del movieName[2] ?#在指定下标删除一个元素
movieName.pop() ?#弹出末尾最后一个元素,删除末尾元素
movieName.remove("指环王") ?#直接删除指定类容的元素
注意:在列表中内容是可以重复的,用remove删除指定内容时,只删除找到的和指定内容相 同第一个元素
改
namelist = ["小张","小王","小李"]
namelist[1]="小红"
查
namelist = ["小张","小王","小李"]
findName= input("请输入要查找的姓名:")
if findName in namelist:
? ?print("在名单中找到了该名字")
else:
? ?print("未在名单中找到该名字")
?
?
?
a = ['a','b','c','a','b']
print(a.index("a",1,4)) #可以查找指定下标范围的元素,并返回对应数据的下表
#范围区间左闭右开
#找不到会报错
? ? ? ?
print(a.count('a')) #统计某个元素出现几次
用for循环拿到列表下标和元素:使用枚举函数,同时拿到表中的下标和元素内容
myList = ["a","b","c","d"]
for i,x in enumerate(myList): ? #enumerate是枚举类型
? ?print(i,x) ? ? ?#打印多个值可以用逗号隔开
#访问结果
0 a
1 b
2 c
3 d
排序和反转
a=[1,4,2,3]
a.reverse() ? ? #将列表所有元素翻转
?
a.sort() ? ? ? ?#按从低到高排序,升序排序
a.sort(reverse=True) #按降序排序
print(a)
列表嵌套
schoolName=[[],[],[]] #有3个元素的空列表,每个元素都是一个空列表
schoolName=[["北京大学","清华大学"],["南开大学","天津大学","天津师范大学"],["山东大学","中国海洋大学"]]
print(schoolName[0][0])
注意:嵌套的列表中每个元素的个数可以不一样
元组(tuple)
-
元组写在小括号里,元素之间用逗号隔开 -
元组的元素不能修改,但可以包含可变对象 -
注意:定义只有一个元素的元组必须加逗号
tup1 =() ? ?#创建一个空的元组
#tup2=(50) #<class 'int'>
tup2=(50,) ?#<class 'tuple'>
增
tup1 = (12,34,56)
tup2 = ("abc","xyz")
tup = tup1 + tup2 ?
print(tup) ?#输出(12, 34, 56, 'abc', 'xyz')
实际上是增加了一个新的元组,或者链接
删
tup1 = (12,34,56)
del tup1 #删除了整个元组变量
查
tup1 = ("abc","def",2000,2020)
print(tup1[0]) ?#可以使用下标访问
print(tup1[-1]) #访问2020,最后一个元素
print(tup1[1:5]) ? ?#访问结果 ('def', 2000, 2020)
? ? ? ? ? ? ? ? ? ?#左闭右开,进行切片
也可以通过for循环遍历元组
改
tup1 = (12,34,56)
#tup1[0] = 100 #报错,不允许修改
其他的一些操作
操作名称 | 操作方法 | 举例 |
---|
元组成员关系 | in | 2 in list1 | 得到重复元素的数量 | count | tuple.count(1) | 获取元组长度 | len() | | 获取元组最大值 | max() | | 获取元组最小值 | min() | | 其他类型对象转换成元组 | tuple() | |
字典(dic)
#字典的定义
info = {"name":"吴彦祖","age":18}
#字典的访问
print(info["name"])
print(info["age"])
#访问了不存在的键
#print(info["gender"]) #直接访问,会报错
?
print(info.get("gender")) ? #使用get方法,没有找到对应的健,默认返回:None
print(info.get("gender","m")) ? #没找到可以设定默认值,显示m
增
newID = input("请输入新的学号:")
info["id"]=newID
删
info = {"name":"吴彦祖","age":18}
#[del]
del info["name"] ? ?#三处指定键值
del info ? ? ? ? ? ?#将整个字典散出
#[clear] 清空
info.clear() #将字典内容清空
改
info = {"name":"吴彦祖","age":18}
info["age"]=20
查
info = {"id":1,"name":"吴彦祖","age":18}
#遍历所有的键
for key in info.keys():
print(key)
#遍历所有的值
for value in info.values():
print(value)
#遍历所有的键值对,for循环不仅可以访问一个值
for key,value in info.items():
print("key=%s,value=%s"%(key,value))
其他操作
操作名称 | 操作方法 | 举例 |
---|
判断Key是否存在 | in | “key” in dict1 | 合并字典 | update | dect1.update(dect2) | 把两个列表转为字典 | dict+zip方法 | dict(zip(list1,list2)) | 将其他类型对象转换成字典 | dict() | dict([(1,2),(2,3)]) |
其他的获取长度,取得键最小值,获得键最大值:len(),min(),max(),
集合(set)
常用操作
操作名称 | 操作方法 | 举例 |
---|
遍历集合 | 通过for 循环 | for i in set1: print(i) | 更新集合 | update方法 | set1.update(set2) | 向集合添加新元素 | add方法 | set1.add(5) | 移除集合中的元素 | remove方法 | set1.remove(5) | 弹出元素 | pop方法 | val = set.pop() | 清除元素 | clear方法 | set1.clear() | 删除集合 | del | del set1 |
小结
| 是否有序 | 是否可变类型 |
---|
列表[] | 有序 | 可变类型 | 元组() | 有序 | 不可变类型 | 字典{} | 无序 | key不可变 val可变 | 集合{} | 无序 | 可变类型(不重复) |
函数
把具有独立功能的代码块组织为一个小模块
定义函数
定义函数格式如下:
def 函数名 (参数1,参数2):
代码
return 要返回的值
返回多个值的函数:
def divid(a,b):
shang= a/b
yushu= a%b
return shang,yushu
sh,yu = divid(5,2)
global a #声明全局变量标识符,使a不会被局部变量覆盖
文件操作
在python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件名,访问模式)
基本常用操作
f = open("test,txt",'w') #打开文件,w模式(写模式),文件不存在就新建
f.write("hello world!") #将字符串写入文件
f.close() #关闭文件
#read方法,读取指定字符,开始时定位再文件头部,每执行一次向后移动指定字符数
f = open("test,txt",'r') #打开文件,r模式(读模式),文件不存在就新建
content = f.read(5) #从文件中读5个字符出来
content = f.read(5) #从上次读位置结束后再往后读5个
f.close() #关闭文件
f = open("test,txt",'r') #打开文件,r模式(读模式),文件不存在就新建
content = f.readlines()#全部读完,一行是一个列表
#print(content)
i=1
for temp in content: #输出每一行行号和内容
print("%d,%s"%(i,temp))
i+=1
f.close() #关闭文件
注意:每一次文件操作记得将文件关闭
readline()每次读一行
文件重命名
import os
os.rename("毕业论文.txt","毕业论文-最终版.txt")
删除文件
import os
os.remove("毕业论文.txt")
#其他操作
os.mkdir("张三") #创建文件夹
os.getcwd() #获取当前目录
os.chdir("../") #改变默认目录
os.listdir("./")#获取目录列表
os.rmdir("张三")#删除文件夹
异常处理
#发生异常程序会中断执行
print("----test---1---")
f = open("123.txt", "r") #用只读模式打开了一个不存在的文件
print("----test---2---") #这句代码不会被执行
#异常捕获
try:
print("----test---1---")
f=open("123.txt","r")
print("----test---2---")
except IOError: #文件没找到,属于IO异常
pass #捕获异常后,执行的代码
#pass 是占位符
try:
print(num) #num未定义
#except IOError: #异常类型想要捕获,需要一致,具体异常类型可见报错提示
except NameError:
print("产生错误了!")
#想要捕获多种异常
try:
print("----test---1---")
f = open("123.txt", "r")
print("----test---2---")
print(num)
except (NameError,IOError) as result:#将可能产生的所有异常类型,都放到下面的小括号中
print("产生错误了!")
print(result) #获取错误描述
#捕获所有异常
try:
代码
except Exception as resrlt:
print(result) #获取错误描述
注意:Exception 可以承接任何异常
try....finally嵌套
在文件打开之后,进行其他操作时可能发生异常,这时可以在finally里中关闭文件,不管是否发生异常finally中的代码都会被执行
import time
try :
f = open("123.txt","r")
try:
while True:
content = f.readline()
if(len(content)) == 0:
break
time.sleep(2) #休眠两秒
print(content)
finally: #不管有没有发生异常,都会执行finally,将文件关闭
f.close()
print("文件关闭")
except Exception as result:
print("发生异常")
|