python基础3——流程控制

news2024/11/25 0:45:20

文章目录

  • 一、操作符
    • 1.1 比较操作符
    • 1.2 逻辑操作符
    • 1.3 成员操作符
    • 1.4 身份操作符
  • 二、流程控制
    • 2.1 条件判断
    • 2.2 循环语句
      • 2.2.1 for循环
      • 2.2.2 while循环
    • 2.3 continue与break语句
    • 2.4 文件操作函数
  • 三、函数
    • 3.1 定义函数
    • 3.2 作用域
    • 3.3 闭包
    • 3.4 函数装饰器
    • 3.5 内建函数

一、操作符

  • 操作符:一个特定的符号,用它与其他数据类型连接起来组成一个表达式。常用于条件判断,根据表达式返回True/False采取动作。
    在这里插入图片描述

1.1 比较操作符

  • 比较操作符:比较两边值。
操作符描述示例
==相等,两边值是否相等(6 == 6) 结果 True
!=不相等,两边值是否不相等(6 != 6) 结果False
>大于,左边值是否大于右边值(8 > 6) 结果True
<小于,左边值是否小于右边值(8 < 6) 结果False
>=大于等于,左边值是否大于等于右边值(6 >= 6) 结果True
<=小于等于,左边值是否小于等于右边值(6 <= 6) 结果True

1.测试“==”。
在这里插入图片描述
2.测试“!=”。
在这里插入图片描述
3.测试“>、<”。
在这里插入图片描述
4.测试“>= 、<=”。
在这里插入图片描述

1.2 逻辑操作符

  • 判断条件逻辑。
操作符逻辑表达式描述
andx and y与,所有的条件都 True结果才为True;只要有一个为False,结果就为False
orx or y或,所有的条件只要有一个是True结果就为True
notnot x非,结果取反

1.测试“and、or”。
在这里插入图片描述
2.测试“not”。
在这里插入图片描述

1.3 成员操作符

  • 判断某个元素是否在数据类型里。
操作符描述示例
in如果在指定的序列中找到值返回True,否则返回Falsecomputer = [“主机”,“显示器”,“鼠标”,“键盘”]
print(“主机” in computer) 结果True
print(“音响” in computer) 结果False
not in如果在指定的序列中没有找到值返回True,否则返回Falseprint(“主机” not in computer) 结果False
print(“音响” not in computer) 结果True

1.测试“in”。
在这里插入图片描述

2.测试“not in”。
在这里插入图片描述

1.4 身份操作符

  • 判断两个对象的内存地址标识符id是否相等。
操作符描述
is判断两个标识符是否引用一个对象
is not判断两个标识符是否引用不同对象

1.测试“is”。
在这里插入图片描述

2.测试“not is”。
在这里插入图片描述

二、流程控制

2.1 条件判断

//语法。

if  <表达式>:
    <代码块>
elif <表达式>:
    <代码块>
else:
    <代码块>

1.单分支,判断是否成年。

age = int(input("请输入你的年龄: "))

if age > 18:
    print("恭喜,你已经成年!")
else:
    print("抱歉,你还未成年!")

在这里插入图片描述
2.三目表达式写法。

age = int(input("请输入你的年龄: "))

print("恭喜,你已经成年!" if age > 18 else "抱歉,你还未成年!")

在这里插入图片描述
3.多分支,根据人的年龄段划分。

age = int(input("请输入你的年龄: "))

if age < 7 :
    print("儿童")
elif age >= 7 and age < 17:
    print("少年")
elif age >= 18 and age < 40:
    print("青年")
elif age >= 41 and age < 48:
    print("壮年")
else:
    print("老年")

在这里插入图片描述

2.2 循环语句

  • 循环的作用在于将一段代码重复执行多次。
  • Python中实现循环常用有两个语句:for、while

2.2.1 for循环

  • 一般用于遍历数据类型的元素进行处理,例如字符串、列表。
//语法.

for <变量> in <序列>:
    <代码块>

1.例一,遍历字符串。

s = "123456"
for i in s:
    print(i)

在这里插入图片描述
2.例二,遍历列表。

computer = ["主机","显示器","鼠标","键盘"]
for i in computer:
    print(i,len(i))

在这里插入图片描述
3.例三,遍历字典。

computer = {"主机":5000,"显示器":1000,"鼠标":60,"键盘":150}
for i in computer.items():
    print(i) 
    print("名称: %s\t价格: %s" % (i[0],i[1]))

在这里插入图片描述
4.例四,嵌套循环。

s1 = "123456"
s2 = "456789"
for i in s1:
    for x in s2:
        if i == x:
            print(i)

在这里插入图片描述

2.2.2 while循环

  • 在某条件下循环执行一段代码,即重复相同的任务。
//语法。
while <表达式>:
      <代码块>

1.示例1,当条件满足时停止循环。

count = 0
while count < 5:
    print(count)
    count += 1

在这里插入图片描述
2.例二,死循环。

count = 0
while True:
    print(count)
    count += 1

2.3 continue与break语句

  • continue 当满足条件时,跳出本次循环。
  • break 当满足条件时,跳出所有循环。
  • 注意事项:只有在for、while循环语句中才有效。

1.例一,continue语句。

for n in range(8):
    if n == 3:
        continue
    else:
        print(n)

在这里插入图片描述
2.例二,break。

for n in range(8):
    if n == 3:
        break
    else:
        print(n)

在这里插入图片描述
3.案例:用户登录,三次错误机会

count = 0
while True:
    if count < 3:
        name = input("请输入你的用户名: ").strip() # .strip()去除首尾空格
        if len(name) == 0:
            print("输入不能为空!")
            continue
        elif name == "qingjun":
            print("登录成功.")
            break
        else:
            print("用户名错误,请重新输入!")
            count += 1
    else:
        print("超出错误次数, 退出!")
        break

在这里插入图片描述

2.4 文件操作函数

  • 要想读取文件(如txt、csv等),第一步要用open()内建函数打开文件,它会返回一个文件对象,这个对象拥有read()、write()、close()等方法。

语法:open(file,mode=‘r’,encoding=None)

  • file:打开的文件路径,可以是绝对路径,也可以是相对路径。
  • mode(可选):打开文件的模式,如只读、追加、写入等。
    • r:只读。
    • w:只写。
    • a:在原有内容的基础上追加内容(末尾)。
    • w+:读写。
  • 如果需要以字节(二进制)形式读取文件,只需要在mode值追加‘b’即可,例如wb
  • 文件对象操作,f = open(‘test.txt’)
方法描述
f.read([size])读取size字节,当未指定或给负值时,读取剩余所有的字节,作为字符串返回
f.readline([size])从文件中读取下一行,作为字符串返回,如果指定size则返回size字节。
f.readlines([size])读取size字节,当未指定或给负值时,读取剩余所有的字节,作为列表返回。
f.write(str)
f.flush
写字符串到文件。
刷新缓冲区到磁盘。
f.seek(offset[,whence=0])在文件中移动指针,从whence 偏移offset个字节。
(0代表文件起始位置,默认。1代表当前位置2代表文件末尾)
f.tel()当前文件中的位置 (指针)
f.close()关闭文件

1.例一,读取文件内容。

qingjun = open('qingjun.txt',mode='r',encoding=None)
print(qingjun.read())
qingjun.flush()
qingjun.close()

在这里插入图片描述

2.例二,遍历打印每一行。

qingjun = open('qingjun.txt',mode='r',encoding=None)
for line in qingjun:
    print(line.strip('\n'))   # 去掉换行符

qingjun.flush()
qingjun.close()

在这里插入图片描述

3.with语句:不管在处理文件过程中是否发生异常,都能保证with 语句执行完毕后已经关闭了打开的文件句柄。

with open("qingjun.txt",encoding="utf8") as f:
    data = f.read()
    print(data)

在这里插入图片描述

三、函数

函数概念:

  • 指一段可以直接被另一段程序或代码引用的程序或代码。
  • 在编写代码时,常将一些常用的功能模块编写成函数,放在函数库中供公共使用,可减少重复编写程序段和简化代码结构。

3.1 定义函数

语法:

def 函数名称(参数1,参数2,...):
   <代码块>
  return <表达式>      //reurn是返回的状态值,表示代码执行结果。

1.定义普通函数。

def hello():
    print("Hello World!")
hello() # 调用函数

2.定义传参函数,传入固定参数。

##定义求和函数。
def f(a, b):
    return a + b
print(f(1,2))# 按参数位置赋值
print(f(b =2,a=1)) # 按对应关系赋值


##生成序列列表。
def qingjun(n):
    result = []
    x=0
    while x < n:
        result.append(x)
        x +=1
    return result
print(qingjun(9))


##参数默认值:预先给参数定义默认值,如果调用函数时没指定该值,则用默认值。
def f(a, b=2):
    return a + b
print(f(1))
print(f(1,3))

3.定义传参函数,传入多个未知参数。

  • 当不知道有多少个参数时可以在参数前面加*与**,表示可接收任意多个参数。
  • *name 接收任意多个参数,并放到一个元组中。
  • **name 接收一个键值,并存储为字典。
//传入多个参数,计算总和。
def func(*seq):
    x=0
    for n in seq:
        x += n
    return x

print(func(1,2,3))


//传入多个键值,进行处理。
def func(**computer):
    for k,v in computer.items():
        print("名称:%s\t价格:%s" %(k,v))

func(主机=5000,显示器=1000,鼠标=60,键盘=150)

4.定义匿名函数。

  • 匿名函数:没有名字的函数,使用lambda关键字定义,一般仅用于单个表达式。
//定义求和函数。
s = lambda a, b: a+b
print(s(1,2))

//等价于
def func(a,b):
    return a+b
print(func(1,2))

3.2 作用域

含义:

  • 限制一个变量或一段代码可用范围。好处是提高程序逻辑的局部性,减少名字冲突。

作用域范围:

  • Local (局部作用域):在函数中定义的变量。de关键字定义的语句块中,即函数中定义的变量。
  • Enclosed (嵌套作用域):一般出现在函数中嵌套一个函数时,在外部函数中的作用域称为嵌套作用域 (闭包常见)。
  • Global (全局作用域):文件顶层定义的变量。
  • Built-in (内置作用域):系统内解释器定义的变量,例如关键字。
    在这里插入图片描述

1.示例。

qingjun1 = 2  ##全局变量。
def  baimu():   ##定义函数
    global qingjun2   ##将局部变量变成全局变量。
    qingjun2 =3   #局部变量。

baimu()   ##引用函数。
print(qingjun1)   ##打印全局变量。
print(qingjun2)   ##打印局部变量。

3.3 闭包

含义:

  • 闭包是一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。
  • 嵌套函数也是闭包的一种形式,将内部嵌套定义的函数作为返回值。

构成闭包的三个条件:

  • 两层以上嵌套关系
  • 内部函数调用外部函数定义的变量
  • 外部函数返回内部函数体对象,而不是函数体结果(加括号)

1.示例。

def qingjun():
    x = 1
    def baimu():
        print(x)
    return baimu  #不加括号表示返回函数体不执行函数,外部调用时才会执行;加括号代表直接调用执行函数。

qingjun()  #调用外部函数。
qingjun()()  #调用内部函数。

3.4 函数装饰器

含义:

  • 装饰器本质上是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

应用场景:

  • 记录日志、性能测试、权限效验等。

1.例一,原函数无传入参数。

######################################
#定义原函数。
def hello():
    print("原函数功能")
hello()   #调用原函数。
######################################
#定义装饰器。
def qingjun(mq):   #新增函数调用器,传入参数mq,mq也可以是函数。
    def baimu():
        print("原函数准备执行了!")    ##新增功能。
        mq()     #原函数放在内部函数的执行逻辑里。
        print("原函数执行完毕!")   ##新增功能。
    return baimu  #打印内部函数体,外部调用时才执行该函数。
qingjun(hello)()   #调用内部函数,同时给外部函数传入函数hello,hello为原函数。

2.例二,语法糖@用法。

######################################
#定义装饰器。
def qingjun(mq):
    def baimu():
        print("原函数准备执行了!")
        mq()
        print("原函数执行完毕!")
    return baimu
######################################
#定义原函数时,直接@装饰器调用。
@qingjun
def hello():
    print("原函数功能")
hello()

3.例三,原函数传入参数。

######################################
#定义装饰器。
def qingjun(mq):
    def baimu(u):
        print("原函数准备执行了!")
        mq(u)
        print("原函数执行完毕!")
    return baimu
######################################
#定义原函数时,直接@装饰器调用,并传入参数u。
@qingjun
def hello(u):
    print(u)
hello("已传入参数")

3.5 内建函数

函数作用语法
range()动态生成数字序列。range(1,6)、range(10)
open()打开、并操作文件。open(file,mode=‘r’,encoding=None)
map()根据提供的函数处理序列中的元素,处理完后返回一个迭代器对象。map(function, iterable, …)
filter()用于过滤序列,过滤掉不符合条件的元素,处理完后返回一个迭代器对象。filter(function, iterable)
sorted()对所有可迭代的对象进行排序操作。sorted(iterable, *, key=None, reverse=False)
key:指定带有单个参数的函数,用于从interable的每个元素取出比较的键,默认为None(直接比较元素)。
reverse 排序规则,True降序, False升序(默认)
reversed()返回一个反转的迭代器。reversed(seq)
join()将序列中的元素以指定的字符连接,生成一个新的字符串。‘拼接符’.join(凭借对象)
min()返回可迭代对象中最小的元素qingjun = [1,2,3,4,5,6,7]
print(min(qingjun))
max()返回可迭代对象中最大的元素qingjun = [1,2,3,4,5,6,7]
print(max(qingjun))
sum()对可迭代对象求和qingjun = [1,2,3,4,5,6,7]
print(sum(qingjun))
zip()对多个可迭代对象创建一个聚合,返回一个元组的迭代器。x = [1, 2, 3],y = [4, 5, 6]
qingjun = zip(x, y)
print(list(qingjun))
globals()字典格式返回当前范围的全局变量\
locals()字典格式返回当前范围的局部变量\

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/849826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文看懂 D类数字功放原理及应用

他V hezkz17进数字音频系统研究开发交流答疑群(课题组) D类放大器工作在开关状态&#xff0c;作为控制元件的晶体管本身消耗功率较低&#xff0c;功放的效 率就高&#xff0c;可达 90%以上&#xff0c;因此能较大地降低能源损耗&#xff0c;减小放大器体积。D 类音 频功率放大器…

面试热题(最长上升子序列)

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入&#xff1…

Docker容器监控(Cadvisor +Prometheus+Grafana)

环境部署&#xff0c;接着上一篇文章Docker容器部署&#xff08;Cadvisor InfluxDBGrafana&#xff09;开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…

录屏怎么录声音?很简单,轻松操作!

“录屏的时候怎么把声音录进去呀&#xff1f;今天用手机录了一段视频&#xff0c;录完后打开却发现没有声音&#xff0c;真的服了&#xff0c;录了好久了&#xff0c;有没有人知道怎么才能录制声音呀&#xff1f;” 录屏是一种非常实用的技术&#xff0c;可以帮助我们记录屏幕…

PHPstudy配置伪静态步骤,tp5.1的框架

搜索mod_rewrite.so&#xff0c;然后去掉前面的#&#xff08;即放开注释&#xff09; 2.找到index.php 同级文件.htaccess&#xff08;没有就新建&#xff09; 这些是tp5.1自带的内容&#xff0c;把它注释掉&#xff0c;是错误的内容&#xff0c;添加下面的这段配置 #<If…

SIT1042AQ5V 供电,IO 口兼容 3.3V,±58V 总线耐压,CAN FD 待机模式总线收发器

等领域&#xff0c;支持 5Mbps 灵活数据速率 CAN FD &#xff0c;具有在总线与 CAN 协议控制器之间进行差分信号传 输的能力。 SIT1042AQ 为 SIT1042Q 芯片的升级版本&#xff0c;改善了总线信号的对称性&#xff0c;拥有更低的电磁辐射性能。 另外&#xff0c;SIT104…

ffplay数据结构分析(一)

本文为相关课程的学习记录&#xff0c;相关分析均来源于课程的讲解&#xff0c;主要学习音视频相关的操作&#xff0c;对字幕的处理不做分析 下面我们对ffplay的相关数据结构进行分析&#xff0c;本章主要是对PacketQueue的讲解 struct MyAVPacketList和PacketQueue队列 ffp…

线程池-手写线程池C++11版本(生产者-消费者模型)

本项目是基于C11的线程池。使用了许多C的新特性&#xff0c;包含不限于模板函数泛型编程、std::future、std::packaged_task、std::bind、std::forward完美转发、std::make_shared智能指针、decltype类型推断、std::unique_lock锁等C11新特性功能。 本项目有一定的上手难度。推…

浏览器是如何渲染页面的?

浏览器是如何渲染页面的&#xff1f; 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。 在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0c;开启渲染流程。 整个渲染流程分…

对员工画饼out了,领导力之我的地盘TA做主

90后的员工为什么爱离职? 我想了一年&#xff0c;才嗅到一丝隐晦的内味。因为不结婚、不生娃、不买房、不买车&#xff0c;没压力&#xff0c;骂TA还敢顶嘴。 员工动力不足&#xff0c;没有干劲&#xff0c;宁愿熬夜打游戏&#xff0c;也不愿意多加班&#xff0c;到底是工资…

Springboot03--restful、swagger+orm/mybatis,mybatis-plus

参考这个方法配置&#xff0c;主要是我的springboot和swagger的版本号的问题 SpringBoot2.7.14集成Swagger3.0 (liqinglin0314.com) 常用的一些注解 放在controller里面 2. mybatisplus <!-- MyBatisPlus依赖--><dependency><groupId>com.baomidou</gr…

FL Studio低版本怎么免费升级:FL Studio升级要钱吗?

为了更好的服务国内FL Studio用户&#xff0c;FL Studio 官网提供了跨版本升级的服务&#xff0c;用户可以通过缴纳一定的费用&#xff0c;将自己已购买的入门版或其他非完整版的版本&#xff0c;升级为更高的版本&#xff0c;解锁更多的插件&#xff0c;而无需重新购买整套版本…

嵌入式开发学习(STC51-4-蜂鸣器)

内容 控制蜂鸣器发出声音&#xff0c;一段时间后关闭 蜂鸣器简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件&#xff1b; 蜂…

算法通关村第六关——如何使用中序和后序来恢复一颗二叉树

1 树的基础知识 1.1 树的定义 树(Tree)&#xff1a;表现得是一种层次关系&#xff0c;为 n &#xff08; n ≥ 0 &#xff09; n&#xff08;n≥0&#xff09; n&#xff08;n≥0&#xff09;个节点构成的有限集合&#xff0c;当n0时&#xff0c;称为空树&#xff0c;对于任一…

锁定Mac的内置键盘,防止外接键盘时的误触

场景&#xff1a;把你的外接键盘放在mac上&#xff0c;然后打字时&#xff0c;发现外接键盘误触mac键盘&#xff0c;导致使用体验极差 解决方案&#xff1a;下载Karabiner-Elements这款软件&#xff0c;并给它开启相关权限。 地址&#xff1a;https://github.com/pqrs-org/Ka…

并网逆变器学习笔记6---三电平SVPWM下的连续和不连续调制

之前在学习中总结过一次DPWM策略选择&#xff1a;并网逆变器学习笔记5---三电平DPWM 但是对于三电平逆变器而言&#xff0c;如何从连续调制切换到不连续调制&#xff0c;存在一些疑惑点&#xff0c;下午闲来无事&#xff0c;把SVPWM下的连续调制和不连续调制的开关状态选择&am…

C++实现一个链栈

C实现一个链栈 什么是链栈如何实现链栈链栈的实现开发环境代码实现运行结果 什么是链栈 链栈不名思意&#xff0c;就是既具有链表的特性&#xff0c;又具有栈的特性。 即&#xff1a; 链栈中的元素由指针域和数据域组成&#xff0c;通过指针指向下一个元素&#xff1b;2.链栈同…

软件测试学习:师傅领进门修行看个人

本课程学习导图 2-1 软件测试阶段 1、单元测试 概念&#xff1a; 对软件中的 最小可测试单元 进行检查和验证。 原则&#xff1a; &#xff08;1&#xff09;尽可能测试用例相互独立 &#xff08;2&#xff09;一般由代码开发人员实施 好处&#xff1a;&#xff08;…

影响亚马逊Listing转化率的14大因素你知道吗?

我们都知道亚马逊listing转化率对于链接的推新和维稳来说有多么重要&#xff0c;只要转化率的比值无法达到整体市场平均比值的及格线&#xff0c;你就很可能会慢慢被亚马逊的飞轮算法所淘汰。 那么&#xff0c;具体是哪些因素在影响着你的listing转化率呢?这里我们可以分为显…

容器——1.集合概述

文章目录 1.1. Java 集合概览1.2. 说说 List,Set,Map 三者的区别&#xff1f;1.3. 集合框架底层数据结构总结1.3.1. List1.3.2. Set1.3.3. Map 1.4. 如何选用集合?1.5. 为什么要使用集合&#xff1f; 1.1. Java 集合概览 从下图可以看出&#xff0c;在 Java 中除了以 Map 结尾…