![计算机视觉40例从入门到深度学习(OpenCV-Python)](https://wfqqreader-1252317822.image.myqcloud.com/cover/633/47379633/b_47379633.jpg)
2.4 选择结构
对症下药,意思是医生针对患者病症用药,指要针对事物存在的问题采取有效的措施。选择结构就是针对不同的条件做出不同的选择,从而执行不同的任务。
某游戏厅有一个投篮游戏,该游戏的成绩显示在一块屏幕上。屏幕显示处理方式如图2-5所示,具体如下:
● 图2-5(a)属于单分支结构。在单分支结构中,当条件成立时,去做某件事情;当条件不成立时,什么都不做。对于本例为,若投篮成绩大于90分,则在屏幕上显示“A级”;否则,什么都不显示。
● 图2-5(b)属于双分支结构。在双分支中结构,当条件成立时,去做某件事情;当条件不成立时,去做另外一件事情。对于本例为,若投篮成绩大于90分,则在屏幕上显示“A级”;否则,在屏幕上显示“加油”。
● 图2-5(c)属于多分支结构。在多分支结构中,逐个判断是否满足某个条件,并根据判断结果执行对应的语句。对于本例为
➢ 先判断投篮成绩是否大于90分,若大于90分,则在屏幕上显示“A级”;否则,继续后续判断。
➢ 然后判断投篮成绩是否大于80分,若大于80分,则在屏幕上显示“B级”;否则,继续后续判断。
➢ 然后判断投篮成绩是否大于70分,若大于70分,则在屏幕上显示“C级”;否则,继续后续判断。
➢ 然后判断投篮成绩是否大于60分,若大于60分,则在屏幕上显示“D级”;否则,在屏幕上显示“加油”。
在多分支结构中,可以一直不断地缩小判断范围进行后续判断。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_48_2.jpg?sign=1738804880-3egVBEVLXMDuvQVMs8H79fevzd4lyjY0-0-52a4d2b05307d1515dd5650ce7efa2a1)
图2-5 屏幕显示处理方式
1.单分支
单分支结构仅在条件成立时执行操作,当条件不成立时什么都不做,其结构为
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_49_1.jpg?sign=1738804880-lybcIm7lrVn42KVYuLfBNEeEA8m8dLQm-0-16c177a204f6fa599ee8d882051338c8)
【例2.11】单分支结构实现投篮成绩判断。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_49_2.jpg?sign=1738804880-MMCLfEOtiiWVQ7U1Ch1zG0v4FDlWMEQ7-0-1e6fb6838414bfaa5f3b9eeb67e6e4fc)
运行上述程序,会提示输入成绩,当输入的数值大于90时,输出结果为
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_49_3.jpg?sign=1738804880-vdQntYHWnHzhUMIjv1hRqkkdj1nWiyjQ-0-faf1598d71af53f9a9f5bfe7bdecafdc)
如果输入的数值小于或等于90,那么程序没有任何输出。
这里涉及如下两个新的知识点:
● 函数input():用来接收用户的输入。
● 函数int():用来完成类型的转换。从函数input()读取的数据是字符串,不能直接与数值比较大小,要使用函数int()将其转换为整型。
【注意】在Python中,不使用大括号来表示语句段的开始和结束,而使用缩进来表示语句的开始和结束。例如,当条件成立时,若要执行的语句有很多行,则直接将这些语句进行相同的缩进。
这样的方式很方便,但是需要额外关注代码的缩进。初学者在使用Python时,经常会因为缩进使用不当而出错,务必恰当地使用缩进。
2.双分支
在双分支结构中,当条件成立时,去做某件事情;当条件不成立时,去做另外一件事情,其结构为
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_49_4.jpg?sign=1738804880-T8UvhPNx3VCvCRUQg9DBMgxrd0WyGRz4-0-b1060487ee123822921221b905468c3b)
【例2.12】双分支结构实现投篮成绩判断。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_49_5.jpg?sign=1738804880-7YC9nPrskKwbmrpkpFqljRUy32LPYI40-0-2463ee548abbf3f0b388dfdf3f240de8)
运行上述程序,会提示输入成绩,若输入的数值大于90,则输出“A级”;若输入的数值小于或等于90,则输出“加油!”。
3.多分支
多分支结构针对多个条件进行判断,根据判断结果执行对应操作。针对投篮游戏的坐标示意图如图2-6所示。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_50_1.jpg?sign=1738804880-rJ8dxPYnxjp0pWz0rHkigQozQSraQrRG-0-5bba006d6b055cb88acbf47725a91e9e)
图2-6 针对投篮游戏的坐标示意图
这里需要注意的是,第二个判断条件“大于80分”,是在第一个判断条件“大于90分”不成立的情况下的条件,其范围是(80,90]。其他条件类似,都是上一次判断条件不成立情况下的判断条件。
多分支结构中使用“if...elif...else”结构,可以包含多个“elif”,其结构为
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_50_2.jpg?sign=1738804880-1jFlvcMKtoYEASnPIyHHbYmGUQyZMfea-0-34a9ed29ed848217a7bf9766d4e51554)
【例2.13】多分支结构实现投篮成绩判断。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_50_3.jpg?sign=1738804880-WdeE0qgiZo3gyjHD93RYKiEsQVgQ8RyK-0-4439ce660f2cacc1b936fdc6a6db7f1e)
运行上述程序,根据输入不同,结果如下:
● 若输入的数值大于90,则输出“A级”。
● 若输入的数值为(80,90],则输出“B级”。
● 若输入的数值为(70,80],则输出“C级”。
● 若输入的数值为[60,70],则输出“D级”。
● 若输入的数值小于60,则输出“加油”。
4.内联if
可以将if语句简单地写在一行内。此时的语法格式为
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_50_4.jpg?sign=1738804880-RvIypuNbf288f79oNHoQDzl4AlhPvQ96-0-57a446abc88d5ff01e6685300cd33d59)
上述语句的规则是
● 当条件成立时,将语句A作为返回值。
● 当条件不成立时,将该语句B作为返回值。
内联if语句结构如图2-7所示。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_51_1.jpg?sign=1738804880-ADYcn7jeO6TVyyDkMhsT3TQ6ocJIMxfd-0-0ca4c5a3cf01499ed7ce975f79fc6f58)
图2-7 内联if语句结构
【例2.14】使用内联if语句计算两个数值的最大值。
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_51_2.jpg?sign=1738804880-jCWfDOnDBzlfeEfRYBNbPG7kHz5JSYOS-0-b722a6acf7ee8aaddfab77c9614d393d)
运行上述程序,根据不同输入,会出现不同结果:
● 当输入的值满足a>b时,big=a。例如,输入a=6、b=3,则big=a,输出为“大数是:6”。
● 当输入的值不满足a>b时,big=b。例如,输入a=6、b=9,则big=b,输出为“大数是:9”。
5.条件语句
条件语句通常是由比较语句构成的,返回一个逻辑值(True或False)。使用比较符号可以构成比较语句,常用的比较符号如表2-2所示。
表2-2 常用的比较符号
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_51_3.jpg?sign=1738804880-dYXE4i6IWDAaMkh7JORETv9yootTRaAA-0-67eafb2ae2188859b9306f24b2a7f5e5)
在需要对多个条件进行组合时,可以使用逻辑符号。常用的逻辑符号如表2-3所示。
表2-3 常用的逻辑符号
![](https://epubservercos.yuewen.com/F17EC3/26763881209488706/epubprivate/OEBPS/Images/43685_52_1.jpg?sign=1738804880-UM53fIqB3ydK7CHr1dpszsDyU5rB4ZoK-0-d766205f711dd179c82d2b9490381864)