python基础语法复习[二]
前言
注:图片&代码来源于网络,如mooc上,北京理工大学的嵩天老师python课程等;
一、分支结构
1、基础知识
1)格式
if(条件):
statements
else:
statements
或者
if(条件1):
statements
elseif(条件2):
statements
elseif(条件3):
statements
...
else:
statements
2)用途
分支结构常用于异常处理,当异常过多时,异常处理部分的代码就会过多,影响代码阅读体验。用分支结构去异常处理,可以先运行,再逐个找错。
Note:else和finally可有可无
try:该部分是先执行的代码
except:是发生该错误执行的代码A
else:若无错误则执行的代码
finally:是无论发不发生错误都执行的语句
二、循环结构
1、for循环基础
1)格式
for <var> in <sequence>
<body>
#用循环变量var遍历队列中的每一个值,每个循环都执行一次循环语句;
2)例子
3)缺点
必须要知道循环次数,数据太大时难以数清,需要while语句却可以用类似分支语句一样的条件,来控制循环次数;
2、while循环
1)格式
while(condition)
<body>
#其中<condition>是布尔表达式;
#<body>是一条或多条语句;
#当<condition>为真执行循环,为假循环终止;
2)用法&例子
break用法
continue用法
循环语句中隐含分支控制条件,for/while与else的用法
3)哨兵循环、交互式循环、文件循环
Notes:
[1]交互式循环:善用print和input来控制,而input本身自带部分print功能;
[2]哨兵循环:以某个特殊的哨兵值来进行条件控制;
[3]文件循环:避免了重复输入同一类型的数据,同一录入文本中进行处理。不用处理太多的input。
3、布尔逻辑
(1) 在python中if和while的控制条件为条件运算符"== != >"这些的话,控制条件相当于布尔表达式,遵循布尔逻辑1或0即真或假。优先级是not>and>or,任何非零值都是True即便内容为字符串;
(2)or操作符保证了,or相当于if–else语句。
解释:
程序示例:该程序的or是相当于if判断ans,控制条件为ans真或假,值为空或零即为假Flase。输入内容非空则真,ans=所输入内容。直接按enter键不在input里输入内容即为空则假,看or后面的”vanilla”为非空字符串,则为真,flavor=vanilla。
三、文件操作
1、打开操作
1)open函数:
<var> = open(<name>,<mode>)
name是文件路径名,mode是打开模式,都是用字符串格式。
Note:使用open函数遇见的坑
问题:由于直接复制的文件路径用的是"",有可能会按照转义去理解,就会报错。
解决方案:
方法一:将"“改成”/";
方法二:在代表文件路径的字符串面前,加r
2)打开模式:
打开视频、音频这样的文件就需要二进制的打开模式了
2、读取操作
1)read():
读取被打开文件,所有内容,以一个字符串的形式返回;
注意:文件内容有多行,在换行处,该字符串里会包含\n;
2)readline():
只读取被打开文件,一行内容,以一个字符串形式返回;
3)readlines():
读取被打开文件所有行,以一个列表形式返回,列表中每项元素都是以换行符’\n’结尾的字符串,每个元素都代表某一行内容;
4)读取操作是流式的,每次用完后应该.close()
可以看出转义字符==\n==仅占一个元素位
3、写入操作
1)write():将含有文本数据或二进制数据块的字符串写入文件中
2)writelines():对应readlines,将含有待写入数据的列表写入文件,其中列表中每个元素都是字符串形式,并且换行符\n不会自动被加入
3)注意open()打开文件,如果是w写入模式打开的。文件不存在,会自动在当前目录下创建文件;文件存在,会删除该文件,创建一个新的同名空白文件;
4)每次写入后,要执行.close()才会更新文本内容;
Notes:
[1]可以看出字符串中间,每次换行只换一个\n,多出来的\n自动忽略掉,如Notepad++中python和110只间隔了一行,实际上,代码里敲了两个\n;
[2]可以看见末尾的多个\n没有被忽略掉;
[3]由readeline()可见,最后三个\n读出来的形式是分属三行;
[4]疑问:按照下面的文本拷贝程序和readlines()输出,应该只有六行文本,为什么Notepad++显示的是七行???待续
4、文件操作相关函数
map()
1)格式:map(,)
2)作用:
[1]以list中每一个元素为单位,调用function;
[2]实现列表到字符串的转换;
如下图可以说明为何是以元素为单位,调用function。
5、eg:文本拷贝
def main():
#用户直接输入文件名,注意这样"r"默认的是被读文件与该程序在一个文件目录下
#同理,在"w"写模式下默认创建一个文件于该程序同一目录下
#不在同一目录下"r"模式的会导致找不到文件报错,必须输入正确路径才可以
#注意,input()返回的是字符串格式
f1=input("Enter a souce file:").strip() #strip函数无多大用,只是消掉首尾
#手抖多打的空格而已,默认是空格
#改变strip括号里的内容,可以去其他符号
f2=input("Enter a souce file:").strip()
#注意输入文件名时要打后缀.txt不然会报错
#打开文件
infile=open(f1,"r") #复制的样本源文本
outfile=open(f2,"w") #待拷贝的输出文本
#拷贝输入
countLines=countChars=0 #初始化计行器和计字器
for line in infile:
print(line)
countLines += 1
countChars += len(line) #计算这次拷贝的这行字数
outfile.write(line) #讲读到的这行录入待拷贝文本
print(countLines, "lines and",countChars,"chars copied")
infile.close()
outfile.close()
main()
6、eg:读文本数据画图
import turtle
#本程序用于根据文本中储存的数据作为参数用turtle绘制图形
def main():
#设置图像窗口的信息
turtle.title("数据驱动的动态路径绘制")
turtle.setup(800,600,0,0) #设窗口大小为800*600,中心为(0,0)
#设置画笔
pen=turtle.Turtle()
pen.color("red")
pen.pensize(5) #与pen.width(5)相当
pen.shape("turtle")#画笔形状设为turtle
pen.speed(5)
#读取数据文件
result=[] #设置一个空的result列表
file=open('data3.txt','r')
for line in file:#简化后的遍历文件内容,读取返回到line的值类型为字符串
result.append(list(map(float,line.split(','))))
#注意文本中用中文逗号做分隔符,split里面也该输入中文逗号
#用split将读取到这行的字符串变成列表进行float操作后加到result空列表中
#这一行数据只是作为一个元素,元素为列表类型添加到空列表
#每行数据都生成一个列表作为一个元素添加到result中
#result从零开始存储
print(result)
#动态绘制
for i in range(len(result)):#len量取列表元素个数
#每一遍遍历都是文本中的一行数据,呈现的是列表模式
#则可以用数组的矩阵理念,接收文本参数调试画笔,开始作图
pen.color((result[i][3],result[i][4],result[i][5]))
#.color()函数若用rpg值表示颜色,那么就不是字符串格式了,是数值了不过需要括号括起来
pen.fd(result[i][0])#易把0写成1
if result[i][1]:#可见把第二列代表转向数据设为0、1是方便作为布尔值控制条件
pen.rt(result[i][2])#如果是向右转,则左转第三列个角度
else:
pen.lt(result[i][2])
pen.goto(0,0)
input("Press Any Key")#用于防止控制台自动关闭
main()
7、eg:合并文本