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()

文本拷贝
run结果

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:合并文本

在这里插入图片描述
在这里插入图片描述

四、参考资料

菜鸟教程
嵩天老师mooc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值