基础常识
保证字体正常
#-*- coding: utf-8 -*-
添加可自动生成相关数据,方便将来查阅
@author:freshman2233
@software:${PRODUCT_NAME}
@file:${NAME}.py
@time:${DATE} ${TIME}
注释
#注释
这是我的第一个python程序
print("hello,world")#这是单行注释
'''
这是一行注释
这是两行注释
'''
变量
#变量
a=5
print("这是变量:",a)
t_007="T007"
print(t_007)
这是变量: 5
T007
格式化输出
#格式化输出
age=18
print("我的年龄是%d岁"%age)
print("我的名字是%s,我的国籍是%s"%("小张","中国"))
我的年龄是18岁
我的名字是小张,我的国籍是中国
特殊输出
#特殊输出
print("aaa","bbb","ccc")
print("www","baidu","com",sep=".")
print("hello",end="")
print("world",end="\t")
print("python",end="\n")
print("end")
当print()函数,指定end参数为空字符后,print()函数就不再主动添加换行符了。并且,hello和world之间也不存在任何空格
aaa bbb ccc
www.baidu.com
helloworld python
end
输入
#输入
password=input("请输入密码")#默认为字符串类型
print("您刚刚输入的密码是:",password)
请输入密码123456
您刚刚输入的密码是: 123456
测类别
#测类别
a=10
print(type(a))
<class 'int'>
强制类型转换
#强制类型转换
a=int("123")
print(type(a))
b=a+100
print(b)
<class 'int'>
223
c=int(input("输入数字"))
print(c)
输入数字123456
123456
条件判断
#条件判断
if True:
print("True")
print("Answer")
else:
print("False")
print("end")
True
Answer
end
score=77
if score>=90 and score<=100:
print("本次考试,等级为A")
elif score>=80 and score<90:
print("本次考试等级为B")
else:
print("本次考试,等级为E")
本次考试,等级为E
引入随机数
import random #引入随机数
x=random.randint(0,2) #0-2的随机数
循环
for循环
#for循环
for i in range(5):
print(i)# 0 1 2 3 4
0
1
2
3
4
for i in range(0,10,3):#从0开始,10结束,每次加3
print(i)#0 3 6 9
0
3
6
9
for i in range(-10,-100,-30):
print(i)#-10 -40 -70 -100
-10
-40
-70
name="chengdu"
for x in name:
print(x,end="\t")
c h e n g d u
a=["aa","bb","cc","dd"]
for i in range(len(a)):
print(i,a[i])
0 aa
1 bb
2 cc
3 dd
while循环
#while循环
i=0
while i<5:
print("当前是第%d次循环"%(i+1))
print("i=%d"%i)
i+=1
当前是第1次循环
i=0
当前是第2次循环
i=1
当前是第3次循环
i=2
当前是第4次循环
i=3
当前是第5次循环
i=4
1-100求和
#1-100求和-for
sum=0
for i in range(101):
sum+=i
print(sum)
#1-100求和-while
n=100
sum=0
counter=1
while counter<=n:
sum+=counter
counter+=1
print("1到%d的和为:%d"%(n,sum))
5050
1到100的和为:5050
while中不满足条件执行else
#while中不满足条件执行else
count=0
while count<5:
print(count,"小于5")
count+=1
else:
print(count,"大于或等于5")
0 小于5
1 小于5
2 小于5
3 小于5
4 小于5
5 大于或等于5
break continue pass
#break continue pass
i=0
while i<10:
i+=1
print("-"*30)
if i==5:
break #结束循环
print(i)
------------------------------
1
------------------------------
2
------------------------------
3
------------------------------
4
------------------------------
i=0
while i<10:
i+=1
print("-"*30)
if i==5:
continue #结束本次循环
print(i)
------------------------------
1
------------------------------
2
------------------------------
3
------------------------------
4
------------------------------
------------------------------
6
------------------------------
7
------------------------------
8
------------------------------
9
------------------------------
10
homework-剪刀石头布
import random #引入随机数
x=random.randint(0,2) #0-2的随机数
print("剪刀0 石头1 布2")
while True:
try:
user=int(input("你的输入为:"))
print("随机生成数字为:%d"%x)
except ValueError:
print("Man,learn to type a number")
continue
break
if x==user:
print("平局")
elif (x==0 and user==1)or(x==1 and user==2)or(x==2 and user==0):
print("用户赢")
else:
print("电脑赢")
剪刀0 石头1 布2
你的输入为:1
随机生成数字为:1
平局
homework-九九乘法表
#九九乘法表-for
for i in range(1,10,1):
for j in range(1,10,1):
if i<j:
break
print("%d*%d=%d"%(i,j,i*j),end="\t")
if i==j:
print("\n")
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
#while
i=1
j=1
n=9
while i<=n:
j=1
while j<=n:
if i<j:
break
print("%d*%d=%d"%(i,j,i*j),end="\t")
if i==j:
print("\n")
j+=1
i+=1
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
字符串
#字符串
word='字符串'
sentence="这是一个橘子"
paragraph="""
这是一个段落
可以由多行组成
"""
print(word)
print(sentence)
print(paragraph)
字符串
这是一个橘子
这是一个段落
可以由多行组成
' 和"区别(需要使用转义字符\)
#' 和"区别(需要使用转义字符\)
my_str="I'm a student"
print(my_str)
my_str='I\'m a student'
print(my_str)
my_str="Jason said\"I like you\""
print(my_str)
my_str='Jason said"I like you"'
print(my_str)
I'm a student
I'm a student
Jason said"I like you"
Jason said"I like you"
字符串截取[起始位置(取得到):结束位置(取不到):步进值]
#字符串截取[起始位置(取得到):结束位置(取不到):步进值]
str="chengdu"
print(str)
print(str[0]) #c
print(str[0:5]) #cheng
print(str[1:7:2]) #hnd
print(str[:5]) #cheng
print(str[5:]) #du
chengdu
c
cheng
hnd
cheng
du
字符串连接
#字符串连接
print(str+",你好") #chengdu,你好
print(str*3) #chengduchengduchengdu
使用转移字符,用r表示直接展示原始字符串,使全部转移字符失效
#使用转移字符,用r表示直接展示原始字符串,使全部转移字符失效
print("hello\nchengdu") #hello
#chengdu
print(r"hello\nchengdu") #hello\nchengdu
hello
chengdu
hello\nchengdu
列表list
- 列表可以完成大多数集合类的数据结构实现。
- 列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
- 列表是写在[]之间、用逗号分隔开的元素列表。
- 列表索引值以0为开始值,-1为从末尾的开始位置。
- 列表可以使用+操作符进行拼接,使用*表示重复。
列表的定义与打印
#列表的定义与打印
namelist=[] #定义一个空的列表
namelist=["小张","小王","小李"]
print(namelist[0])
print(namelist[1])
print(namelist[2])
小张
小王
小李
列表可以存储混合类型
testlist=[1,"测试"] #列表可以存储混合类型
print(testlist[0])
print(testlist[1])
print(type(testlist[0])) #<class 'int'>
print(type(testlist[1])) #<class 'str'>
1
测试
<class 'int'>
<class 'str'>
遍历列表
namelist=["小张","小王","小李"]
for name in namelist:
print(name)
小张
小王
小李
len()可以得到列表的长度
namelist=["小张","小王","小李"]
print(len(namelist)) #len()可以得到列表的长度
length=len(namelist)
i=0
while i<length:
print(namelist[i])
i+=1
3
小张
小王
小李
列表list的增删改查
增加: [append]在末尾追加一个元素
#增加: [append]在末尾追加一个元素
namelist=["小张","小王","小李"]
print("-----增加前,名单列表的数据")
for name in namelist:
print(name)
nametemp=input("请输入添加学生的姓名:")
namelist.append(nametemp) #在末尾追加一个元素
print("-----增加后,名单列表的数据")
for name in namelist:
print(name)
-----增加前,名单列表的数据
小张
小王
小李
请输入添加学生的姓名:小鸡
-----增加后,名单列表的数据
小张
小王
小李
小鸡
增加: [extend]把b列表中的每一个元素,逐一追加到a列表中
#增: [extend]
a=[1,2]
b=[3,4]
a.append(b) #把列表当成一个元素,加到a列表中
print(a) #[1, 2, [3, 4]]
a.extend(b) #把b列表中的每一个元素,逐一追加到a列表中
print(a) #[1, 2, [3, 4], 3, 4]
[1, 2, [3, 4]]
[1, 2, [3, 4], 3, 4]
增加: [insert]第一个变量表示下标,第二个变量表示对象元素
#增加: [insert]
a=[0,1,2]
a.insert(1,3) #第一个变量表示下标,第二个变量表示对象元素
print(a) #[0, 3, 1, 2]
[0, 3, 1, 2]
删 [del] 在指定位置删除一个元素
#删 [del] [pop]
movieName=["加勒比海盗","骇客帝国","第一滴血","指环王","速度与激情","指环王"]
print("-----删除前,名单列表的数据")
for name in movieName:
print(name)
del movieName[2] #在指定位置删除一个元素
print("-----删除后,名单列表的数据")
for name in movieName:
print(name)
-----删除前,名单列表的数据
加勒比海盗
骇客帝国
第一滴血
指环王
速度与激情
指环王
-----删除后,名单列表的数据
加勒比海盗
骇客帝国
指环王
速度与激情
指环王
删 [pop]弹出末尾最后一个元素
movieName=["加勒比海盗","骇客帝国","第一滴血","指环王","速度与激情","指环王"]
print("-----删除前,名单列表的数据")
for name in movieName:
print(name)
movieName.pop() #弹出末尾最后一个元素
print("-----删除后,名单列表的数据")
for name in movieName:
print(name)
-----删除前,名单列表的数据
加勒比海盗
骇客帝国
第一滴血
指环王
速度与激情
指环王
-----删除后,名单列表的数据
加勒比海盗
骇客帝国
第一滴血
指环王
速度与激情
删 remove 直接删除指定内容的第一个元素
movieName=["加勒比海盗","骇客帝国","第一滴血","指环王","速度与激情","指环王"]
print("-----删除前,名单列表的数据")
for name in movieName:
print(name)
movieName.remove("指环王") #直接删除指定内容的第一个元素
print("-----删除后,名单列表的数据")
for name in movieName:
print(name)
-----删除前,名单列表的数据
加勒比海盗
骇客帝国
第一滴血
指环王
速度与激情
指环王
-----删除后,名单列表的数据
加勒比海盗
骇客帝国
第一滴血
速度与激情
指环王
改:修改指定下标的内容
#改
namelist=["小张","小王","小李"]
print("-----增加前,名单列表的数据")
for name in namelist:
print(name)
namelist[1]="小红" #修改指定下标的内容
print("-----增加后,名单列表的数据")
for name in namelist:
print(name)
查:【in ,not in】
#查:【in ,not in】
namelist=["小张","小王","小李"]
findName=input("请输入你要查找的学生姓名:")
if findName in namelist:
print("在学院名单中找到了相同的名字")
else:
print("没有找到")
请输入你要查找的学生姓名:小李
在学院名单中找到了相同的名字
查找指定下标范围的元素index , count
#查找指定下标范围的元素
mylist=["a","b","c","a","b"]
print(mylist.index("a",1,4)) #可以查找指定下标范围的元素,并返回找到对应数据的下标
#print(mylist.index("a",1,3))#范围区间,左闭右开【1,3)
#找不到会报错:异常:'a' is not in list
print(mylist.count("c")) #统计某个元素出现几次
3
1
排序:reverse将列表所有元素反转/sort升序or降序
#排序
a=[1,4,2,3]
print(a)
a.reverse() #将列表所有元素反转
print(a)
a.sort() #升序
print(a)
a.sort(reverse=True) #降序
print(a)
[1, 4, 2, 3]
[3, 2, 4, 1]
[1, 2, 3, 4]
[4, 3, 2, 1]
多维数组
#多维数组
schoolNames=[[],[],[]] #有3个元素的空列表,每个元素都是一个空列表
schoolName=[["北京大学","清华大学"],["南开大学","天津大学","天津师范大学"],["山东大学"]]
print(schoolName[0][0])
北京大学
homework-8个人随机分到3个办公室
#8个人随机分到3个办公室
import random
office=[[],[],[]]
names=["A","B","C","D","E","F","G","H"]
for name in names:
index=random.randint(0,2)
office[index].append(name)
i=1
for office in office:
print("办公室%d 的人数为:%d"%(i,len(office)))
i+=1
for name in office:
print("%s"%name,end="\t")
print("\n")
print("-"*20)
办公室1 的人数为:4
A B D E--------------------
办公室2 的人数为:3
F G H--------------------
办公室3 的人数为:1
C--------------------
homework-购物车模拟
#购物车模拟
products=[["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]
print("-"*6+" 商品列表 "+"-"*6)
for line in range(5):
print("%d %s %d"%(line,products[line][0],products[line][1]))
buycar=[]
while True:
num=input("请输入想买的商品编号(退出请输入q):")
if num=="q":
break
buy=[int(num)]
buy.extend(products[int(num)])
print("您当前购买的商品为:")
print(buy)
buycar.append(buy)
print("您的购物车中有:")
print(buycar)
print("-"*20)
print("\n")
print("您购买的商品列表为:")
print("-"*6+" 商品列表 "+"-"*6)
for i in range(len(buycar)):
#print(type(i))
print("%d %s %d"%(buycar[i][0],buycar[i][1],buycar[i][2]))
sum=0
for j in range(len(buycar)):
sum+=buycar[j][2]
print("物品总数为:%d\t总金额为%d"%(len(buycar),sum))
------ 商品列表 ------
0 iphone 6888
1 MacPro 14800
2 小米6 2499
3 Coffee 31
4 Book 60
请输入想买的商品编号(退出请输入q):0
您当前购买的商品为:
[0, 'iphone', 6888]
您的购物车中有:
[[0, 'iphone', 6888]]
--------------------
请输入想买的商品编号(退出请输入q):1
您当前购买的商品为:
[1, 'MacPro', 14800]
您的购物车中有:
[[0, 'iphone', 6888], [1, 'MacPro', 14800]]
--------------------
请输入想买的商品编号(退出请输入q):2
您当前购买的商品为:
[2, '小米6', 2499]
您的购物车中有:
[[0, 'iphone', 6888], [1, 'MacPro', 14800], [2, '小米6', 2499]]
--------------------
请输入想买的商品编号(退出请输入q):4
您当前购买的商品为:
[4, 'Book', 60]
您的购物车中有:
[[0, 'iphone', 6888], [1, 'MacPro', 14800], [2, '小米6', 2499], [4, 'Book', 60]]
--------------------
请输入想买的商品编号(退出请输入q):q
您购买的商品列表为:
------ 商品列表 ------
0 iphone 6888
1 MacPro 14800
2 小米6 2499
4 Book 60
物品总数为:4 总金额为24247
函数
函数的定义
def printinfo():
print("---------------------")
print("人生苦短,我用python")
print("---------------------")
函数的调用
def printinfo():
print("---------------------")
print("人生苦短,我用python")
print("---------------------")
printinfo()
---------------------
人生苦短,我用python
---------------------
函数的类型
带参数的函数
def add2Num(a,b):
c=a+b
print(c)
add2Num(11,22)
33
带返回值的参数
#带返回值的参数
def add2Num(a,b):
return a+b #通过return来返回运行结果
result=add2Num(11,22)
print(result)
print(add2Num(11,22))
33
33
返回多个值的函数
#返回多个值的函数
def divid(a,b):
shang=a//b
yushu=a%b
return shang,yushu #多个返回值用逗号分割
sh,yu=divid(5,2)
print("商:%d,余数:%d"%(sh,yu))
商:2,余数:1
课堂练习:
1.写一个打印一条横线的函数。(提示:横线是若干个"-"组成)
2.写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
3.写一个函数求三个数的和
4.写一个函数求三个数的平均值(提示:调用上面的函数)
【建议每题5分钟以内】
我的答案:
#myself
#第一题
def line():
print("-"*20)
line()
--------------------
#第二题
def line():
print("-"*20)
def severalLine(a):
for i in range(a):
line()
a=int(input("请输入要打印的行数:"))
severalLine(a)
请输入要打印的行数:5
--------------------
--------------------
--------------------
--------------------
--------------------
#第三题
def ThreeNumSum(a,b,c):
return a+b+c
a=int(input("请输入第1个数:"))
b=int(input("请输入第2个数:"))
c=int(input("请输入第3个数:"))
sum=ThreeNumSum(a,b,c)
print("3个数之和为%d"%sum)
请输入第1个数:15
请输入第2个数:25
请输入第3个数:35
3个数之和为75
#第四题
def ThreeNumSum(a,b,c):
return a+b+c
a=int(input("请输入第1个数:"))
b=int(input("请输入第2个数:"))
c=int(input("请输入第3个数:"))
average=ThreeNumSum(a,b,c)/3
print("3个数的平均值为%d"%average)
请输入第1个数:15
请输入第2个数:25
请输入第3个数:35
3个数的平均值为25
标准答案:
#teacher
#第一题
#打印一条线
def printOneLine():
print("-"*30)
#第二题
#打印几条线
def printNumLine(num):
i=0
while i<num:
printOneLine()
i+=1
#第三题
#求3个数的和
def sum3Number(a,b,c):
return a+b+c
#第四题
#完成3个数的平均值计算
def average3Number(a,b,c):
sumResult=sum3Number(10,20,30)
aveResult=sumResult/3.0
return aveResult
result=average3Number(10,20,30)
print("平均值为:%d"%result)
局部变量和全局变量
局部变量
#局部变量和全局变量
#局部变量
def test1():
a=300 #局部变量
print("test1----修改前:a=%d"%a)
a=100
print("test1----修改后:a=%d"%a)
def test2():
a=500 #不同的函数可以定义相同的名字,彼此无关
print("test2----修改前:a=%d"%a)
test1()
test2()
test1----修改前:a=300
test1----修改后:a=100
test2----修改前:a=500
全局变量
#全局变量
a=100 #全局变量
def test1():
print("a=%d"%a)
def test2():
print("a=%d"%a)
test1()
test2()
a=100
a=100
全局变量与局部变量相同名字
#全局变量与局部变量相同名字
def test1():
a=300 #局部变量
print("test1----修改前:a=%d"%a)
a=200
print("test1----修改后:a=%d"%a)
def test2():
print("test2----a=%d"%a) #没有局部变量,默认使用全局变量
test1()
test2()
test1----修改前:a=300
test1----修改后:a=200
test2----a=500
在函数中可以改变全局变量
#在函数中改变全局变量
a=100
def test1():
global a #声明全局变量在函数中的标识符
print("test1----修改前:a=%d"%a)
a=200
print("test1----修改后:a=%d"%a)
def test2():
print("test2----a=%d"%a) #没有局部变量,默认使用全局变量
test1()
test2()
test1----修改前:a=100
test1----修改后:a=200
test2----a=200
文件操作
打开文件
#打开文件
f=open("test.txt","w") #w模式(写模式),文件不存在就新建
写入字符串
#打开文件
f=open("test.txt","w")
#写入字符串
f.write("hello world,i am here!") #将字符串写入文件中
关闭文件
#打开文件
f=open("test.txt","w")
#写入字符串
f.write("hello world,i am here!")
#关闭文件
f.close()
访问内容
- r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
- w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
- a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
- rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
- wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
- ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。r+打开一个文件用于读写。文件指针将会放在文件的开头。
read方法,读取指定的字符,开始时指针在文件头部,每执行一次向后移动指定字符数
工程文件目录下test.txt文件内容为
hello world,i am here!--1
hello world,i am here!--2
hello world,i am here!--3
hello world,i am here!--4
hello world,i am here!--5
#read方法,读取指定的字符,开始时指针在文件头部,每执行一次向后移动指定字符数
f=open("test.txt","r")
content=f.read(5)
print(content)
content=f.read(10)
print(content)
f.close()
hello
world,i a
readlines一次性读取全部文件为列表,每行一个字符串元素
#一次性读取全部文件为列表,每行一个字符串元素
f=open("test.txt","r")
content=f.readlines()
print(content)
['hello world,i am here!--1\n', 'hello world,i am here!--2\n', 'hello world,i am here!--3\n', 'hello world,i am here!--4\n', 'hello world,i am here!--5']
#一次性读取全部文件为列表,每行一个字符串元素
f=open("test.txt","r")
content=f.readlines()
#print(content)
i=1
for temp in content:
print("%d:%s"%(i,temp))
i+=1
f.close()
1:hello world,i am here!--1
2:hello world,i am here!--2
3:hello world,i am here!--3
4:hello world,i am here!--4
5:hello world,i am here!--5
readline一次性读取一行
#readline一次性读取一行
f=open("test.txt","r")
content=f.readline()
print("1:%s"%content)
content=f.readline()
print("2:%s"%content)
f.close()
1:hello world,i am here!--1
2:hello world,i am here!--2
文件的相关操作
有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这么功能5.3.1
rename文件重命名
os模块中的rename()可以完成对文件的重命名操作rename(需要修改的文件名,新的文件名)
import os
os.rename("test.txt","test1.txt")
test.txt改名为test1.txt
remove删除文件
os模块中的remove()可以完成对文件的删除操作remove(待删除的文件名)
import os
os.remove("test.txt")
mkdir创建文件夹
import os
os.mkdir("张三")
getcwd获取当前目录
import os
os.getcwd()
print ("当前工作目录:%s" % os.getcwd())
当前工作目录:C:\Users\93983\source\repos\0106-python基础语法
chdir改变默认目录
import os
path = "C:/Users/93983/source/repos/0106-python基础语法/张三"
# 查看当前工作目录
retval = os.getcwd()
print ("当前工作目录为 %s" % retval)
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("目录修改成功 %s" % retval)
当前工作目录为 C:\Users\93983\source\repos\0106-python基础语法
目录修改成功 C:\Users\93983\source\repos\0106-python基础语法\张三
listdir获取目录列表
import os
os.listdir("./")
当前工作目录:['.vs', '0106-python基础语法.pyproj', '0106-python基础语法.sln', 'test.txt', '_0106_python基础语法.py', '张三']
rmdir删除文件夹
import os
os.rmdir("张三")
错误与异常
捕获异常
try:
print("-----test----1")
f=open("123.txt","r") #用只读模式打开一个不存在的文件,报错
print("-----test----2") #这句代码不会执行
except IOError: #文件没找到,属于IO异常(输入输出异常)
pass #捕获异常后,执行的代码
-----test----1
异常类型一致
try:
print(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)
-----test----1
产生错误了
[Errno 2] No such file or directory: '123.txt'
捕获所有异常
try:
print("-----test----1")
f=open("123.txt","r")
print("-----test----2")
print(num)
except Exception as result: #Exception可以承接任何异常
print("产生错误了")
print(result)
-----test----1
产生错误了
[Errno 2] No such file or directory: '123.txt'
try finally 和嵌套
test.txt内容
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
import time
try:
f=open("test.txt","r")
try:
while True:
content=f.readline()
if len(content)==0:
break
time.sleep(2)
print(content)
finally:
f.close()
print("文件关闭")
except Exception as result:
print("发生异常")
finally:
print("文件结束")
文件关闭
发生异常
文件结束
错误原因:Unicode解码错误:Message='gbk' codec can't decode byte 0x80 in position 36: illegal multibyte sequence
解决方法:后面加一个,encoding='UTF-8'。
import time
try:
f=open("test.txt","r",encoding='UTF-8')
try:
while True:
content=f.readline()
if len(content)==0:
break
time.sleep(2)
print(content)
finally:
f.close()
print("文件关闭")
except Exception as result:
print("发生异常")
finally:
print("文件结束")
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
文件关闭
文件结束
作业:古诗
1.应用文件操作的相关知识,通过Python新建一个文件gushi.txt,选择一首古诗写入文件中
⒉.另外写一个函数,读取指定文件gushi.txt,将内容复制到copy.txt中,并在控制台输出"复制完毕"。
3.提示:分别定义两个函数,完成读文件和写文件的操作
尽可能完善代码,添加异常处理。
写古诗
#写古诗
import os
f=open("gushi.txt","w")
f.write("床前明月光,\r疑似地上霜。\r举头望明月,\r低头思故乡。")
f.close()
\n | 回车,光标在下一行 |
\r | 换行,光标在上一行 |
gushi.txt中内容为
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
复制古诗
#写古诗
import os
f=open("gushi.txt","w")
f.write("床前明月光,\r疑似地上霜。\r举头望明月,\r低头思故乡。")
f.close()
#复制古诗
f=open("copy.txt","w")
g=open("gushi.txt","r")
content=g.readlines()
for temp in content:
f.write("%s"%temp)
g.close()
f.close()
print("复制完成")
复制完成
copy.txt中内容为
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
读古诗
#写古诗
import os
f=open("gushi.txt","w")
f.write("床前明月光,\r疑似地上霜。\r举头望明月,\r低头思故乡。")
f.close()
#读古诗
def readGushi(Name):
f=open("%s"%Name,"r")
content=f.readlines()
for temp in content:
print("%s"%temp,end="")
f.close()
Name=input("请输入你想打开的文件名字:\n")
readGushi(Name)
请输入你想打开的文件名字:
gushi.txt
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
写古诗
#读古诗
def readGushi(Name):
f=open("%s"%Name,"r")
content=f.readlines()
for temp in content:
print("%s"%temp,end="")
f.close()
#写古诗
def writeGushi(Name,content):
f=open("%s"%Name,"w")
f.write("%s"%content)
f.close()
Name=input("请输入你想创作的古诗的文件名(含后缀):\n")
content=input(r"请输入古诗:")
writeGushi(Name,content)
readGushi(Name)
请输入你想创作的古诗的文件名(含后缀):
123.txt
请输入古诗:123,456
123,456