04_Python流程控制

Python流程控制有条件选择循环两种方式,其中条件选择部分的语法跟其他编程语法基本一致,而循环部分的语法则做了增添,例如在while循环中增加while–else,在for循环中增加for–else、for + zip、for + enumerate。在项目开发中利用好这些语法能使我们的代码更加精简直观。(注:本篇不是入门级教程,若有不明白的地方请先看一下书或者CSDN上的其他详细教程)
先放一下语法的思维导图。
在这里插入图片描述

1.条件表达式

运算说明
x or yx和y至少一个为True,则结果为True;否则为False。
x and yx和y都为True,则结果为True;否则为False。
not x对x的逻辑值取反。
x in s如果 s 中的某项等于 x 则结果为 True,否则为 False。
x not in s如果 s 中的某项等于 x 则结果为 False,否则为 True。
x is y对象标识。x是y,则返回True;否则返回False。
x is not y否定的对象标识。x不是y,则返回True;否则返回False。
x < y如果x小于y,返回True;否则返回False。
x <= y如果x小于或等于y,返回True;否则返回False。
x > y如果x大于y,返回True;否则返回False。
x >= y如果x大于或等于y,返回True;否则返回False。
x == y如果x等于y,返回True;否则返回False。
x != y如果x不等于y,返回True;否则返回False。


2.条件语句

语法

条件选择有三种语句,分别为ifif–elseif–elif–else语句。多重条件选择和嵌套都是基于这三种语句产生的。
if

if expression:  # 如果expression为真,则执行statement的代码
    statement  

if–else

if expression:  # 如果expression为真,则执行statement1的代码
    statement1      
else:		    # 否则,则执行statement2的代码
    statement2	

if–elif–else

if expresion1:	   # 如果expression1为真,则执行statement1的代码
    statement1      
elif expression2:  # 否则,如果expression2为真,则执行statement2的代码
    statement2
else:			   # 否则,则执行statement3的代码
    statement3

代码演示
题目:判断输入的年是否是闰年?
程序分析:闰年。如果年份是百年,则能被400整除;如果不是百年,则能被4整除。

def isLeapYear(year):
    if year <= 0:
        print("error...year must be positive integer")
    
    elif year % 100 == 0:
        if year % 400 == 0:
            print("{} is leap year".format(year))
        else:
            print("{} is not leap year".format(year))
            
    else:
        if year % 4 == 0:
            print("{} is leap year".format(year))
        else:
            print("{} is not leap year".format(year))


if __name__ == "__main__":
    year = int(input("Please input year:")) 
    isLeapYear(year)
"""
Please input year:-2029
error...year must be positive integer

Please input year:1000
1000 is not leap year

Please input year:2016
2016 is leap year
"""


3.循环语句

2.1 while循环

语法

while循环中有两种语句,whilewhile–else语句。
while

while expression:  # 如果expression为真,则循环执行statement的代码
    statement
# 循环打印每个字符
string = "Python"
i = 0
while i < len(string):
    print(string[i])
    i += 1
"""
P
y
t
h
o
n
"""

while–else

while expression:  # 如果expression为真,则循环执行statement1的代码
    statement1
else:  			
	statement2	 

该语法用于希望循环结束之后还要执行一些附加操作。有三种用法:
(1) while循环不执行或正常执行结束后执行else语句;
(2) while循环执行完continue语句后结束,执行else语句;
(3) while循环执行break语句退出循环,则不执行else语句。

while False:
    print("while循环不执行")
else:
    print("执行else语句")
"""
执行else语句
"""

# 循环打印每个字符,当遇到"\n"时结束循环
string = "Python\nABC"
i = 0
while i < len(string):
    if string[i] == "\n":
        break
    print(string[i],end=" ")
    i += 1
else:
    print("不执行else语句")
"""
P y t h o n 
"""

# 循环打印每个字符,当遇到最后一个字符时,结束循环
print()
string = "Python"
i = 0
flag = True
while i <= len(string)-1:   
    if i == len(string) - 1:
        i += 1
        continue
    print(string[i],end=" ")
    i += 1
else:
    print("执行else语句")
"""
P y t h o 执行else语句
"""


2.2 for循环

语法

for循环中有两种语句,分别为for和for–else语句。
for

for value in iterable: # 遍历可迭代对象iterable,循环执行loop_statement的代码
    loop_statement   
# 循环打印每个字符
string = "Python"
for s in string:               # 按值遍历
    print(s,end=" ")
"""
P y t h o n 
"""
print()
for idx in range(len(string)): # 按索引遍历
    print(string[idx],end=" ")
"""
P y t h o n 
"""

for–else

for value in iterable: # iterable为可迭代对象
	loop_statement     # 循环执行的代码
else:
	statement

该语法用于希望循环结束之后还要执行一些附加操作。跟while–else语句用法一样。有三种用法:
(1) for循环不执行或正常执行结束后执行else语句;
(2) for循环执行完continue语句后结束,执行else语句;
(3) for循环执行break语句退出循环,则不执行else语句。

list1 = [1,2,3,4,5]
# 用法1 for循环正常执行结束后,再执行else语句
for value in list1:
    print(value)
else:  
    print("遍历完成")  
"""
1
2
3
4
5
遍历完成
"""
    
# 用法2 for循环执行到break语句跳出循环后,不再执行else语句
for idx,value in enumerate(list1):
    if idx == 3:
        break
    print(value)
else:
    print("不再执行else语句")
"""
1
2
3
"""
    
# 用法3 for循环中的最后一次循环执行到continue时,再执行else语句
for idx,value in enumerate(list1):
    if idx == len(list1) - 1:
        continue
    print(value)
else:
    print("执行完continue后循环结束")
"""
1
2
3
4
执行完continue后循环结束
"""


for + zip

需要同时遍历多个对象时需要用到Python内置函数zip(*iterable),将多个对象打包成一个可迭代对象。

list1 = ["A","B","C","D","E"]
list2 = [1,2,3,4,5,6,7]
print(zip(list1,list2))         # <zip object at 0x000001D1904D3980>
for v in zip(list1,list2):      # list2只取前len(list1)个数据
    print(v)  
"""
('A', 1)
('B', 2)
('C', 3)
('D', 4)
('E', 5)
"""

for v1,v2 in zip(list1,list2):  # v1,v2同时分别遍历list1和list2
    print(v1,v2)
"""
A 1
B 2
C 3
D 4
E 5
"""


for + enumerate

需要同时遍历可迭代对象的索引和值时需要用到Python内置函数enummerate(iterable)enumerate(iterable):把iterable序列化为枚举对象,可同时遍iterable的索引和值。

list1 = ["A","B","C","D","E"]
print(enumerate(list1))     # <enumerate object at 0x000001D18F2AECC0>
for v in enumerate(list1):  # 
    print(v)
"""
(0, 'A')
(1, 'B')
(2, 'C')
(3, 'D')
(4, 'E')
"""

# 把list1序列化为枚举对象,可同时遍历索引和值
for idx,value in enumerate(list1): 
    print(idx,value)
"""
0 A
1 B
2 C
3 D
4 E
"""


2.3退出循环

break:在循环中执行到break语句时退出循环。(只能退出一层循环)
continue:在循环中执行到continue语句时,不再执行continue下方的代码,直接跳到下一次循环

list1 = [1,2,3,4,5,6,7,8]
# 循环输出list1,当输出完第5个数时退出循环
for idx,value in enumerate(list1):
    print(value)
    if idx == 5:
        break
"""
1
2
3
4
5
6
"""
# 循环输出list1中的偶数
for value in list1:
    if value % 2 == 1:
        continue
    print(value)
"""
2
4
6
8
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值