【python基础知识】2.if条件判断与条件嵌套

news2024/11/29 14:55:11

文章目录

  • 前言
  • 条件判断
    • 单向判断:if
    • 双向判断:if…else…
    • 多向判断:if…elif…else…
  • if嵌套
    • if嵌套的执行顺序
  • 如何写嵌套代码

前言

在上一关,我带领你攻克了如何与Python沟通的语言大关——通过三种数据类型(字符串、整数和浮点数)的相互转换,突破现实世界和镜像世界数据差异的墙,将代码成功执行。

但是,对于Python来讲,还不够,还需要正确的【沟通逻辑】才能让Python准确地执行你的命令。

比方说,我想让天猫精灵在感知到我开门的一瞬间,打开客厅的灯。如果我只说:天猫精灵,打开灯。那么,由于缺少开门的前提条件,无论你开不开门,灯都会打开着。

所以,我们下的命令应该是这样:天猫精灵,如果我开门,你就打开客厅的灯。

而这个下命令的如果…就…逻辑,就是与计算机沟通的逻辑——条件判断,其作用就是明确地让计算机知道:在什么条件下,该去做什么。

在这里插入图片描述
对于Python也是同样。Python之所以能完成自动化任务,比如自动抓取网页关键词,自动下载小电影等,就是因为它可以执行条件判断。

那么,这个条件判断的代码,要怎么写呢?

条件判断

在Python宇宙,条件判断语句总共有三种表现形式,我们先从最简单的单向判断:if开始说起:

单向判断:if

单向判断:if代表什么呢?相传六颗宝石是宇宙中最强大的东西。如果一个人同时拥有六颗宝石,ta就可以实现包括毁灭宇宙在内的所有事情。

你发现,上面的故事中,有一个如果……就。那么,如果我们要用代码来“翻译”这段话,就可以用条件判断语句中的单项判断:if来表述。下面,请你来运行一下下方代码。

# 为宝石数量赋值
stonenumber=6

# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:
    
    # 结果:显示‘你拥有了毁灭宇宙的力量’的结果
    print('你拥有了毁灭宇宙的力量')   

运行结果:

你拥有了毁灭宇宙的力量

那么,这段代码是如何实现的呢?

首先,第一行代码,用赋值运算符=对当前情况进行赋值:将你拥有的宝石个数6赋值给变量——宝石数stonenumber。

第二步,确定if条件:如果变量stonenumber的值>=个数6时,就执行冒号后,下一行的命令。

第三步,用print()命令打印出结果:你拥有了毁灭宇宙的力量。所以,if语句的单向判断逻辑,我们可以这样归纳:

在这里插入图片描述

在这里,你可能注意到了一个细节:在条件判断代码中的冒号:后、下一行内容的前面,会空几个格,但这是为什么呢?

在这里插入图片描述
首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。

对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】

并且,在if条件语言中,缩进不需要我们手动按空格键。当你用英文输入法打:后按回车,我们的开发工具(用来编写Python代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。

此时,被缩进的内容(print()函数)和if条件语句组成了一个代码块(一个整体),成为了if条件下的内部命令。

这意味着:如果赋值满足if条件,计算机就会准确执行if条件内部的命令(即缩进的代码块)。

如果没有缩进对齐的话,代码运行就会出现IndentationError: expected an indented block(缩进错误:期望一个缩进块)的报错。大家一定要注意,这是python语言的一大特色。

下面,我们来小结一下单向判断:if的代码逻辑及语法格式:
在这里插入图片描述

在电影里,当灭霸得知宝石的能力后,他决定集齐六颗宝石,灭掉一半宇宙生灵。很快,他就从其他人手中抢到了两颗宝石。

虽然还没完成收集6颗宝石的目标,但现在拥有了2颗宝石的灭霸,会拥有怎样的能力呢?

下方代码框中无限宝石的代码:把之前的【stonenumber=6】改为了【stonenumber=2】,请运行,看看会出现什么结果。

# 为宝石数量赋值
stonenumber=2

# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:
   
    # 结果:显示‘你拥有了毁灭宇宙的力量’的结果
    print('你拥有了毁灭宇宙的力量')   

运行结果:


这时,你可能会在心里犯嘀咕:为什么连个报错都没有呢?那么,我来解释一下这是怎么回事。

首先,第一行的赋值语句【stonenumber=2】是后面if条件判断语句的前提情况,然而并不满足『stonenumber>=6』这个条件,所以不会执行条件下的『print』操作。

我讲过,计算机是一行行往下执行代码的。所以,当第一行赋值情况的前提不满足if的条件时,Python的逻辑就会判断:条件不满足,无法执行if条件下的命令,从而自动跳过,执行下一行命令。

在这里插入图片描述
但是,在上方代码中,除了if之外,我们并没有设置其他的命令去让Python执行。因此,Python自然就无法输出结果。

也就是说,由于宝石数量只有2,没有满足6颗宝石的if条件,if条件下的打印命令就无法生效,自然没办法获得摧毁宇宙的力量。

而作为最强反派,灭霸当然不会就此善罢甘休。他要继续寻找宝石,直到集齐6颗,达到他的目的。

那么,这个如果6颗宝石的条件没满足,就做其他事情——寻找宝石的判断,在Python中要如何实现呢?

双向判断:if…else…

在抢夺了收藏家手里的宝石后,拥有三颗宝石的灭霸逼迫自己的养女卡魔拉,说出了第四颗灵魂宝石的下落——沃弥尔星。

在Python宇宙,我们可以利用if的双向判断形式:if…else…去实现这个行动:当宝石数量还没达到6颗的时候,需要带着卡魔拉去沃弥尔星寻找灵魂宝石。

下面,请你运行下面的代码,看程序是如何识别的:

# 赋值语句:为宝石数量赋值
stonenumber=3

# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:
    
    # 结果:显示‘你拥有了毁灭宇宙的力量’的结果
    print('你拥有了毁灭宇宙的力量')
    
# 条件:当赋值不满足if条件时,执行else下的命令
else:
    
    # 结果:显示‘去找灵魂宝石’的结果
    print('带着卡魔拉去沃弥尔星寻找灵魂宝石')
    

运行结果:

带着卡魔拉去沃弥尔星寻找灵魂宝石

很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。

Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】

在这里插入图片描述
在if…else条件语句中,if和else各自抱团,形成两个不同的代码块。表示的是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。

在这里插入图片描述
如果用我们上面宝石的例子讲解的话,if定义的就是宝石数>=6,而else定义的则是宝石数<6。

在这里插入图片描述
而由于赋值【stonenumber=3】,并不满足【if stonenumber>=6:】这个条件,所以不能执行【print(‘你拥有了毁灭宇宙的力量’)】的命令。

只能走第二条else:的路——执行print(‘带着卡魔拉去沃弥尔星寻找宝石’)的结果。

在这里插入图片描述
关于if…else…的相关知识点到这里就讲完了,我们来总结一下if…else…语句的知识点。

在这里插入图片描述
代码讲解告一段落,我们再回到灭霸的故事中,在连续的战斗之后,灭霸无限宝石的收集之旅,只差最后一颗——心灵宝石。

不巧的是,这颗宝石镶在了超级英雄幻视的头上。幻视深知想要阻止灭霸,只能请求绯红女巫,毁掉自己头上的宝石。

所以,摆在绯红女巫面前的问题条件是:灭霸已经拥有5颗宝石,如果宝石数大于等于6,世界会被灭霸毁灭。

但是,如果想让宝石数停留在5个及以下,她必须要亲手毁掉幻视头上的宝石,同时,还要从灭霸手中至少夺回一颗宝石,才会有胜利的希望。

或者,还有第三种胜利的可能——如果想让灭霸手中一个宝石都没有,让一切都未曾发生,那么我们需要穿越时空,回到过去。

那么,这三个如果在Python中要如何实现呢?

多向判断:if…elif…else…

国际惯例,在思考如何用代码实现某个目标时,首先,我们需要先来梳理一下逻辑。

通过上面的故事情节我们知道,在代码中,我们需要添加三个如果:如果宝石数>=6,如果0<宝石数<=5,如果宝石数等于0。并产生3个对应的执行结果。

那么,在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。

这三者共同构成了多向判断的命令逻辑关系:如果if的条件不满足,就按顺序看是否满足elif的条件,如果不满足elif的条件,就执行else的命令。

并且,当判断的条件超过3个时,中间的多个条件都可以使用elif。

在这里插入图片描述

那么,这个代码要怎么写呢?我们还是在代码中来感受一下elif的逻辑,直接运行以下代码:

# 为宝石数量赋值
stonenumber=5

# 条件:如果你拥有的宝石数量大于等于6个
if stonenumber>=6:
    
    # 结果:显示‘就拥有了毁灭宇宙的力量’的结果
    print('你拥有了毁灭宇宙的力量')
    
# 条件:如果想让宝石数量停留在5个以下,至少一个
elif 0<stonenumber<=5:

    # 结果:显示‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’的结果
    print('绯红女巫需要亲手毁掉幻视额头上的心灵宝石')

# 条件:当赋值不满足if和elif条件时,执行else下的命令,宝石数量为0个
else:

    # 结果:显示‘需要惊奇队长逆转未来’的结果
    print('需要惊奇队长逆转未来')
    

运行结果:

绯红女巫需要亲手毁掉幻视额头上的心灵宝石

通过上面if和else的积累,多向判断elif的逻辑是不是很好理解?

首先,第一行的赋值,会按照从上到下的顺序挨个试一遍,看自己满足哪个条件,满足了就不往下走,不满足就继续试,试到出结果为止。

其次,elif的运行本质上和else一样,已经带有其他条件的意思,所以elif后可以不接else。

比如上面的代码,stonenumber=5会对下面的if elif else条件逐个扫描,看看自己满足哪一个,就执行哪个条件底下的命令。

很显然,第二个条件elif 0<stonenumber<=5刚好能与stonenumber=5的前提相匹配,于是,执行elif底下的命令:print(‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’)**。

下面,请你练习一下,试着不要看刚才的代码,参考下面的提示,自己来重写一遍刚才我们学过的那段代码,通过修改宝石数的赋值语句,让输出结果变为需要惊奇队长逆转未来。

提示:(1)为宝石数量赋值(数量为0)(2)条件1:如果宝石数量>=6,显示你拥有了毁灭宇宙的力量(3)条件2:如果0<宝石数量<=5,显示绯红女巫需要亲手毁掉幻视额头上的心灵宝石(4)条件3:如果是其它情况,显示需要惊奇队长逆转未来。

步骤有了,下面请你来“逆转未来”,自己写一下代码吧!

怎么样,搞定了没,参考代码在这里:

#当宝石数量为0颗的时候,可以输出"需要惊奇队长逆转未来"

stonenumber=0
#为宝石数量赋值

if stonenumber>=6:
    #条件:如果你拥有的宝石数量大于等于6个

    print('你拥有了毁灭宇宙的力量')
    #结果:显示‘就拥有了毁灭宇宙的力量’的结果
    
elif 0<stonenumber<=5:
# 条件:如果想让宝石数量停留在5个以下,至少一个

    print('绯红女巫需要亲手毁掉幻视额头上的心灵宝石')
     #结果:显示‘绯红女巫需要亲手毁掉幻视额头上的心灵宝石’的结果

# 条件:当赋值不满足if和elif条件时,执行else下的命令,宝石数量为0个
else:
    
    #结果:显示‘需要惊奇队长逆转未来’的结果
    print('需要惊奇队长逆转未来')

下面,我们来总结一下elif的知识点:

在这里插入图片描述

if嵌套

但是,不管复仇者联盟怎么竭尽全力,最终,灭霸还是打出了响指。所有人在一瞬间面临着分离与死亡。

即使套着超级英雄的外衣,蜘蛛侠彼得·帕克也仅仅是个18岁的高中生。他曾只顾忙着在街头巷尾当平民英雄,结果在期末历史考试里只考了26分,荣获“学渣”提名。

但这个“学渣”评价并不是随便来的,而是通过规则一步步过滤出来的:

考试成绩评价规则:

1. 如果成绩大于等于60分,就是及格,在此前提下:
(1)如果成绩大于等于80分,属于优秀范围;
(2)否则(即大于等于60分而小于80分),属于一般范围。

2. 如果成绩小于60分,就是不及格,在此前提下:
(1)如果成绩小于30分,平时太不认真,属于学渣了;
(2)如果成绩(小于60分而大于等于30分),那么,至少还能抢救一下

像这种如果底下还有如果(即条件里还套条件)的情况,我们如何用Python把上面的规则写出来,并得出评价呢?

答案就是——嵌套条件。

if嵌套的应用场景,简单来讲就是:在基础条件满足的情况下,再在基础条件底下增加额外的条件判断。

就像上面的基础条件是60分及格,想要判断优秀和一般还要增加额外条件——是否大于等于80;在小于60分不及格基础条件下,想要判断学渣和可抢救还要增加额外条件——是否大于等于30。

因此,彼得·帕克的成绩评价规则,用if嵌套可以像下方代码这样:

historyscore=26

if historyscore>=60:
    print('你已经及格')

    if historyscore>=80:
        print('你很优秀')

    else:
        print('你只是一般般')

else:
    print('不及格')

    if historyscore<30:
        print('学渣')

    else:
        print('还能抢救一下')

print('程序结束')

运行结果:

不及格
学渣
程序结束

居然出现了三个扎心的结果……那么,在Python中,我们如何同时得出不及格、学渣、程序结束这三个结果的呢?

if嵌套的执行顺序

首先,我们先从整体总览一下,这段彼得·帕克成绩评价规则的代码,总共分为四部分【赋值、if、else、print()】,两个大代码组。

在这里插入图片描述
并且,在代码组1的if条件和代码组2的else的条件下,又包含了条件判断命令if…else…。

那么,这种嵌套命令我们要如何理解呢?

缩进相同的命令处于同一个等级,第一步,计算机就要按顺序一条一条地执行命令。

那么,计算机执行的顺序就是:(1)先给historyscore赋值;

(2)因为if和else是只能留一个的互斥关系,if和else下的代码块只会执行一个,所以计算机要判断赋值的内容满足【historyscore>=60】还是【historyscore<60】的条件——如果满足if的条件,就执行if缩进下的内容,如果不满足就执行else缩进下的内容;

(3)执行print(‘程序结束’)。

经过判断,我们知道了,蜘蛛侠26分的历史成绩要找else代码块:else:。然而,问题又来了,else代码块后面不仅跟着三个print(),还有if,所以我到底要输出哪个?

所以,计算机语法的执行逻辑永远都不会变,else下的代码也要一行一行往下执行,并根据条件判断运行对应层级,输出对应结果。

在这里插入图片描述
所以,我们的运行顺序是,先输出的结果不及格,然后再判断历史成绩26分的赋值符合历史成绩<60分且<30分还是历史成绩<60分且>=30分的条件。

下面,我们再通过一张导图理一下if嵌套的逻辑,老师建议你把这张图收藏起来,接下来写嵌套代码的时候可以翻看:

在这里插入图片描述
要注意的是,elif也是可以放进嵌套里的。

是不是很有趣?那么下面,我来教你一个写嵌套条件代码的小技巧。

如何写嵌套代码

if嵌套由于涉及多个条件判断,并且是条件套条件的判断,所以为了理清逻辑,我们可采用扒洋葱大法写if嵌套。

用“彼得·帕克的历史成绩”举例,第一步就要搞定最外层那张皮,将最基础的命令和条件写出来。

那么,我们的思考逻辑应该是这样(1)把彼得·帕克26分的历史成绩赋给变量historyscore;(2)用if…else写最基础判断条件如果historyscore>=60时,打印你已经及格,否则,打印不及格;(3)用print()输出程序结束。

来来来,跟我一起动起来,请根据上面提示写一遍代码,并运行。看在成绩为26分的赋值情况下,只套了一层“条件判断”皮的代码,会出现怎样的结果:

运行通过了吗?正确的话,你应该会看到终端显示不及格、程序结束。参考答案是这样子的:

historyscore=26
#赋值语句:为历史成绩赋值

if historyscore>=60:
    #条件:当历史成绩大于等于60时:

    print('你已经及格')

else:
    #条件:当历史成绩小于60时

    print('不及格')
    #结果:输出不及格的结果

print('程序结束')
#打印最终结果

第二步,在“第一层皮”里装东西。也就是在条件【historyscore>=60】下,增加额外条件。

其中,额外条件1:当历史成绩大于等于80分,显示结果你很优秀;额外条件2:当历史成绩在60到80分之间,显示结果:你只是一般般。

下面,请你先瞄一眼正确的代码,并注意我是怎样安排额外条件的代码的。

historyscore=26
#赋值语句:为历史成绩赋值

if historyscore>=60:
    #条件:当历史成绩大于等于60时

    print('你已经及格')
    #结果:输入及格的结果

    if historyscore>=80:
        #条件:当历史成绩大于等于60,且历史成绩大于等于80

        print('你很优秀')
        #结果:输出你很优秀的结果

    else:
        #条件:当历史成绩大于等于60,且小于80时

        print('你只是一般般')
        #结果:输出你只是一般般的结果

else:
    #条件:当历史成绩小于60时

    print('不及格')
    #结果:输出不及格的结果

print('程序结束')
#打印最终结果

到你了,请同步把上面那段代码写一遍,如果能够做到不看上面的答案,独立写出来是最好的。【要点提示:请注意额外条件的缩进格式】。

最后一步,你要为另一个大条件else增加额外条件了!

请你以下方代码框中的代码为基础,在else底下增加两个额外条件。

其中,额外条件1:当历史成绩小于60,同时还小于30时,输出结果学渣;额外条件2:当历史成绩小于60,但大于等于30时,输出结果还能抢救一下。

historyscore=26

if historyscore>=60:
    print('你已经及格')

    if historyscore>=80:
        print('你很优秀')

    else:
        print('你只是一般般')

else:
    print('不及格')


    #增加额外条件if...

写出来了没?参考答案在这里:

historyscore=26
if historyscore>=60:
    print('你已经及格了')
    if 60<historyscore<80:
        print('你也就一般般')
    else:
        print('你很优秀')
else:
    print('不及格')
    if historyscore<30:
        print('学渣')
    else:
        print('还能抢救一下')
    
print('程序结束')

怎么样,洋葱大法好不好?不过,就算现在没写对也不要着急,我们在4关后会提供更多的实操锻炼机会。

最后的最后,我们来总结一下整节课的知识点:

在这里插入图片描述
这关就到这里了,你学习得怎么样呢?

下一关,我们一起来看看【input()】函数,可不要小瞧了它,有了它你可以随时向计算机传递消息。

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

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

相关文章

【ALM工具软件】上海道宁与Perforce为您带来用于整个生命周期的应用程序生命周期管理软件

Helix ALM是 用于整个生命周期的 应用程序生命周期管理的ALM软件 具有专用于 需求管理&#xff08;Helix RM&#xff09;、测试用例管理&#xff08;Helix TCM&#xff09; 问题管理&#xff08;Helix IM&#xff09;的功能模块 Helix ALM提供了 无与伦比的可追溯性 您将…

【MySQL学习笔记】(十)使用索引的操作

简单使用索引 创建索引创建主键索引创建唯一键索引普通索引的创建 查询索引删除索引索引创建原则 数据库中的索引与书籍中的索引类似&#xff0c;在一本书中&#xff0c;利用索引可以快速地查找所需信息&#xff0c; 而无须阅读整本书。在数据库中&#xff0c;索引使数据库程序…

跨专业可读的免统考双证的中国社科院-美国杜兰大学金融硕士

跨专业可读的免统考双证的中国社科院-美国杜兰大学金融硕士 项目优势 一、跨专业申请优势 中国社科院-美国杜兰大学金融硕士的招生对象不仅仅是金融行业的高端人才&#xff0c;因为金融业门槛相对较高&#xff0c;进入者往往已经具备了硕士晋升的学习能力&#xff0c;所以我…

【Github】git本地仓库建立与远程连接

文章目录 前言一、git简介二、git下载2.1下载地址 三、git安装3.1安装3.2 配置3.3 config设置&#xff08;增删改查&#xff09; 四.github与git连接——本地Git仓库4.1 建本地的版本库4.2 源代码放入本地仓库4.3提交仓库 五、github与git的连接——远程连接5.1 创建SSH Key5.2…

奥本海默

&#xff08;1&#xff09;命 电影一开头&#xff0c;奥本海默不擅长做实验。但你看宿命凑巧不凑巧&#xff0c;奥本海默成了曼哈顿计划的工程负责人&#xff0c;偏偏要他一次性爆炸成功。 电影一开头&#xff0c;奥本海默因为不擅长做实验被导师指出引起其他同学哄堂大笑&…

LiveNVR监控流媒体Onvif/RTSP功能-支持数据库切换为高斯数据库信创瀚高数据信创数据库

LiveNVR监控流媒体Onvif/RTSP支持数据库切换为高斯数据库信创瀚高数据信创数据库 1、如何配置切换高斯数据库&#xff1f;2、如何配置切换信创瀚高数据库&#xff1f;3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、如何配置切换高斯数据库&#xff1f; livenvr.ini -> [db]下…

Qt之事件过滤—筛选处理对象

文章目录 事件过滤完整代码 事件过滤 事件过滤是当事件发生时&#xff0c;可以对不同对象&#xff0c;实现不同操作&#xff0c;以达到筛选的效果。 步骤&#xff1a; 1、首先安装一个事件过滤器&#xff0c;为对象安装事件过滤&#xff0c;指定“谁”来监控这些事件对象 //给…

“多行业信赖选择:为什么出版、金融和教育都爱‘爱校对’“

在当今的数字时代&#xff0c;文本是我们沟通、传播知识和进行交易的主要工具。不论是出版行业的图书、金融行业的报告&#xff0c;还是教育行业的教材&#xff0c;文字的准确性都是不可或缺的。那么&#xff0c;为什么在这些关键行业中&#xff0c;“爱校对”成为了许多机构和…

【实践篇】Redis缓存和数据库一致性问题

Redis缓存和数据库一致性问题 文章目录 Redis缓存和数据库一致性问题0. 前言参考资料 1. 缓存和数据库的数据不一致是如何发生的&#xff1f;1. 删除数据的情况&#xff1a;2. 修改数据的情况&#xff1a; 0. 前言 确保缓存和数据库之间的数据一致性是一项挑战&#xff0c;这需…

【Kafka系列】(一)Kafka入门

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 Kafka是什么&#xff1f; 一句话概括&#xff1a;「Apache Kafka 是一款开源的消息引擎系统」 什么是消息引擎系统&#…

软件测试代码覆盖率

在<professional software testing with visual studio 2005 team system tools for software developer>中提到了代码覆盖率&#xff0c;我很久没有去书店了&#xff0c;不知道是不是出了新的版本&#xff0c;觉得书里面关于代码覆盖率方面的知识有些地方没有讲&#xf…

RobotFramework自动化测试框架系列学习----(二)库与关键字

一、类库和标准库 在RIDE中&#xff0c;按F5可查看库和关键字标准库 &#xff08;RF自带的库&#xff0c;不需要额外安装&#xff09; Buitln 测试库 Collections 集合库 DateTime 时间库 Screenshot 截屏库 存放位置&#xff1a;Python37\Lib\site-packages\robot\libraries …

点成案例丨比浊仪助力牙周炎诱发因素研究

牙周炎概述 牙周炎&#xff08;Periodontitis&#xff09;是一种炎症性疾病&#xff0c;其主要特征为牙周袋的形成及袋壁的炎症、牙槽骨吸收而导致牙龈与牙齿分离、牙齿逐渐松动或掉落等。牙周炎主要是由积聚在牙龈及其附近牙面、齿颈缘的牙菌斑内细菌所分泌的毒素令牙周组织发…

Linux命令200例:xargs标准输入的数据作为参数传递使用

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

DeepFaceLab和DeepFaceLive下载地址

DeepFaceLab和DeepFaceLive下载地址 项目地址&#xff1a;https://github.com/iperov/DeepFaceLab 下载地址&#xff1a;https://disk.yandex.ru/d/7i5XTKIKVg5UUg 需要科学上网 还有一个其他版本的磁力 magnet:?xturn:btih:e7ffdcb4ada863de9504f2a741f924dcd56ab84a&…

智安网络|加强软件供应链安全保障:共同抵御威胁的关键路径

在当今数字化时代&#xff0c;软件供应链安全成为了一个备受关注的话题。各行各业都依赖于软件产品和服务来支持其业务运营。然而&#xff0c;随着供应链的不断扩大和复杂化&#xff0c;软件供应链安全问题也日益突出。那么应该如何解决&#xff1f; 首先&#xff0c;软件供应…

开了抖店后就可以直播带货了吗?想在抖音带货的,建议认真看完!

我是王路飞。 关于抖店和直播带货的关系&#xff0c;其实很多人经常搞不清楚。 不然的话&#xff0c;也不会有这个问题的出现了&#xff1a;开了抖店后就可以直播带货了吗&#xff1f; 在我看来&#xff0c;这个问题很简单&#xff0c;但在不了解抖音电商和直播带货其中门道…

postgres源码解析55 Brin Index--2(brinbuild流程)

上一篇讲解了brin index的基本概念以及页布局postgres源码解析54 Brin Index–1&#xff0c;后续会从源码角度对索引的构建、维护等方面进行深入讲解。 1 关键数据结构 2 brinbuild执行流程图 3 brinbuild 函数详解 1 首先调用brin_matepage_init初始化brin meta元数据页&…

【Day_29慢就是快】代码随想录-二叉树-二叉树的所有路径

给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 思路 求根节点到叶子节点的路径&#xff0c;需要前序遍历&#xff0c;方便让父节点指向孩子节点&#xff0c;找到对应的路径。 使用递归方法做前序遍历&#xff0c;递归与回溯是一家的。 递归 1. 递归参数及返…

C++ Opencv视频检测

使用OpenCV进行视频检测的一般步骤如下&#xff1a;导入OpenCV库和视频文件。 对每一个视频帧进行对象检测。可以使用诸如Haar特征分类器、Cascade分类器或深度学习模型等技术进行对象检测。 #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> …