第四章 程序的控制结构

文章目录

    • 第四章 程序的控制结构
        • 4.1 程序的三种控制结构
          • 4.1.1 程序流程图
          • 4.1.2 程序控制结构基础
          • 4.1.3 程序控制结构扩展
        • 4.2 程序的多分支结构
          • 4.2.1 单分支结构:if
          • 4.2.2 二分支结构:if-else
          • 4.2.3 多分支结构:if-elif-else
          • 4.2.4 判断条件及组合
            • 1、Python的关系操作符
            • 2、保留字
        • 4.3 程序的循环结构
          • 4.3.1 遍历循环:for
          • 4.3.2 无限循环:while
          • 4.3.3 循环控制:break和continue
        • 4.4 循环的异常处理
        • 4.5 实例解析——猜数字游戏
        • 习题4
          • 一、选择题
          • 二、编程题

第四章 程序的控制结构

4.1 程序的三种控制结构

4.1.1 程序流程图

程序流程图是一种表达程序控制结构的方式,主要用于关键部分的程序分析和过程描述,由一系列图形、流程线和文字说明等组成。

流程图包括7中基本元素:

在这里插入图片描述

各基本元素的含义如下:

  • 起止框:表示程序逻辑的开始或结束
  • 判断框:表示一个判断条件,并根据判断结果选择不同的执行路径
  • 处理框:表示一组处理过程,对应于顺序执行的程序逻辑
  • 输入/输出框:表示程序中的数据输入或结果输出
  • 注释框:表示程序的注释
  • 流向线:表示程序的控制流,以带箭头直线或曲线表达程序的执行路径
  • 连接点:表示多个流程图的连接方式,常用于将多个较小流程图组织成较大流程图
4.1.2 程序控制结构基础

程序由3中基本结构组成:顺序结构、分支结构和循环结构。任何程序都由这3种基本结构组合而成。

顺序结构是程序按照先行顺序依次执行的一种运行方式。

分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行时方式。最基础的分支结构是二分支结构。二分支结构会组合形成多分支结构。

循环结构是程序根据条件判断结果向后执行的一种运行方式,根据循环体触发条件不同,包括条件循环和遍历循环结构。

4.1.3 程序控制结构扩展

在三种基本控制逻辑基础上,Python语言进行了必要且适当的扩展。

在分支结构原理的基础上,Python增加了异常处理,使用try-except保留字。

异常处理以程序异常为判断条件,根据一段代码执行的正确性进行程序逻辑选择。异常处理是分支结构的一种扩展。

在循环结构原理的基础上,Python提供两个循环控制符break和continue,对循环的执行过程进行控制。break控制符用来结束当前循环。continue控制符用来结束当前循环的当次循环过程。

4.2 程序的多分支结构

4.2.1 单分支结构:if

Python的单分支结构使用if保留字对条件进行判断,语法格式如下:

if <条件>:
	语句块

其中,if、:和<语句块>前的缩进都是语法的一部分。<语句块>是if条件满足后执行的一个或多个语句系列,缩进表达<语句块>与if的包含关系。<条件>是一个产生True或False结果的语句,当结果 为True时,执行<语句块>,否则跳过<语句块>。<条件>是一个或多个条件,多个条件见采用and或or进行逻辑组合。and表示多个条件“与”的关系,or表示多个条件“或”的关系。

4.2.2 二分支结构:if-else

Python的二分之结构使用if-else保留字对条件进行判断,语法格式如下:

if <条件>:
	<语句块1>
else:
	<语句块2>

<语句块1>在if中<条件>满足即为True时执行,<语句块2>在if中<条件>不满足即为False时执行。简单说,二分之结构根据条件的True或False结构产生两条路径。

二分之结构还有一种更简洁的表达式,适合<语句块1>和<语句块2>都只包含简单表达式的清空,语法格式如下:

<表达式1> if <条件> else <表达式2>
4.2.3 多分支结构:if-elif-else

Python的多分枝结构使用if-elif-else保留字对多个相关条件进行判断,并根据不同条件的结构按照顺序选择执行路径,语法格式如下:

if <条件1>:
	<语句块1>
elif <条件2>:
	<语句块2>
...
else:
	<语句块N>

多分枝结构通常用于判断同一个条件或一类条件的多个执行路径。要注意,Python会按照多分支结构的代码顺序依次评估判断条件,寻找并执行第一个结果为True条件对应的语句块,当前语句块执行后跳过整个if-elif-else结构。如果没有任何条件成立,else下面的语句块被执行。else子句是可选的。

利用多分支结构编写代码时要注意多个逻辑条件的先后关系。

4.2.4 判断条件及组合
1、Python的关系操作符

分支结构中的判断条件可以使用任何能够产生True或False的语句或函数。形成判断条件最常见的方式是采用关系操作符。

操作符操作符含义
<小于
<=小于等于
>=大于等于
>大于
==等于
!=不等于
2、保留字

Python语言使用保留字not、and和or对条件进行逻辑运算或组合。

保留字not表示单个条件的“否”关系,and表示多个条件之间的“与”关系,or表示多个条件之间的“或”关系。

4.3 程序的循环结构

Python语言的循环结构包括两种:遍历循环和无限循环。

遍历循环使用保留字for依次提取遍历结构各元素进行处理。

无限循环使用保留字while根据判断条件执行程序。

4.3.1 遍历循环:for

遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行一次语句块。for语句的循环执行次数是根据遍历结构中元素个数确定的。语法格式如下:

for <循环遍历> in <遍历结构>:
	<语句块>

遍历结果可以是字符串、文件、range()函数或组合数据类型等。

遍历循环还有一种扩展模式,语法格式如下:

for <循环变量> in <遍历结构>:
	<语句块1>
else:
	<语句块2>

当for循环正常执行之后,程序会继续执行else语句中内容。else语句只在循环正常执行之后才执行并结束,因此,可以在<语句块2>中放置评价循环执行情况的语句。

4.3.2 无限循环:while

Python通过保留字while实现无限循环,语法格式如下:

while <条件>:
	<语句块>

当程序执行到while语句时,判断条件如果为True,执行循环体语句,语句结束后返回再次判断while语句的条件;当条件为False时,循环终止,执行与while同级别缩进的后续语句。

无限循环还有一种扩展模式,语法格式如下:

while <条件>:
	<语句块1>
else:
	<语句块2>

在这种扩展模式中,当while循环正常执行之后,程序会继续执行else语句中内容。else语句只在循环正常执行后才执行,因此可以在语句块2中给放置判断循环执行情况的语句。

4.3.3 循环控制:break和continue

循环结构有i啷个辅助循环控制的保留字:break和continue

break用来跳出最内层for或while循环,脱离该循环后,程序继续执行循环后续代码。

continue用来结束当前当次循环,即跳出循环体中下面尚未执行的语句,但不跳出当前循环。

continue语句和break语句的区别是:continue语句只结束本次循环,不终止整个循环的执行,而break具备结束整个当前循环的能力。

4.4 循环的异常处理

Python程序一般对输入有一定要求,但当实际输入不满足程序要求时,可能还会产生程序的运行错误。

Python语言使用保留着try和except进行异常处理,语法格式如下:

try:
	<语句块1>
except:
	<语句块2>

语句块1是正常执行的程序内容,当执行这个语句块发生异常时,则执行except保留字后面的语句块2。

4.5 实例解析——猜数字游戏

import random

target = random.randint(1, 1000)
count = 0
while True:
    try:
        guess = eval(input("请输入一个猜测的整数(1-1000):"))
    except:
        print("输入有错!")
        continue
    count = count + 1
    if guess > target:
        print("猜大了!")
    elif guess < target:
        print("猜小了!")
    else:
        print("猜对了!")
        break
print(f"总共猜了{count}次!")

习题4

一、选择题
  1. 以下语句在Python中非法的是:_______

    A x=y=z=1 B x=(y=z+1) C x,y=y,x D x+=y

    正确答案:B

  2. 以下选项运行结果为True的是:_______

    A (‘3’,‘’) < (‘a’,‘b’) B 5+4j > 2-3j C ‘abc’ > ‘xyz’ D 3>2>2

    正确答案:A

  3. 以下选项符合Python语法要求且能够正确执行的是:_______

    A min = x if x < y = y B max = x > y ? x : y

    C if (x > y) print s D while True : pass

    正确答案:D

  4. 以下选项用来判断当前程序在分支结构中的是:_______

    A 括号 B 冒号 C 缩进 D 花括号

    正确答案:C

  5. 以下选项不能进行条件逻辑操作的是:_______

    A and B or C not D xor

    正确答案:D

  6. 对负数取平方根,即使用函数pow(-1,0,5),将产生:_______

    A 虚数 B 程序崩溃 C 什么都不产生 D ValueError错误

    正确答案:A

  7. for或者while与else搭配使用时,能够执行else对应语句块的情况是:_______

    A 总会执行 B 永不执行 C 仅循环正常结束时 D 仅循环非正常结束时,以break结束

    正确答案:C

  8. try-execpt结构中,能够执行except对应语句块的情形是:_______

    A try中语句出现异常时 B 正常程序结束后

    C try中语句有分支时 D try中语句有循环时

    正确答案:A

  9. 关于break的作用,以下说法正确的是:_______

    A 按照缩进跳出当前层语句块 B 按照缩进跳出除函数缩进外的所有语句块

    C 跳出当前层for/while循环 D 跳出所有for/while循环

    正确答案:C

  10. 关于异常处理机制,以下说法最合理的是:_______

    A 应当大量使用以避免任何可能的错误

    B 将所有代码放到一个try语句块中避免程序报错

    C 用if判断代替所有的try-except结构

    D 再输入判断及关键代码中使用,但不滥用

    正确答案:D

二、编程题
  1. 输入一个年份,输出是否为闰年

    # 方法一
    year = int(input("请输入年份:"))
    if year % 4 == 0 and year % 100 != 0:
        print(f"{year}是闰年")
    elif year % 400 == 0:
        print(f"{year}是闰年")
    else:
        print(f"{year}不是闰年")
    
    # 方法二
    def is_leap_year(year):
        if year % 4 == 0:
            if year % 100 == 0:
                if year % 400 == 0:
                    return True
                else:
                    return False
            else:
                return True
        else:
            return False
    
    
    year = int(input("请输入年份:"))
    
    if is_leap_year(year):
        print(year, "是闰年")
    else:
        print(year, "不是闰年")
    
  2. 最大公约数和最小公倍数计算

    def gcd(a, b):
        if b == 0:
            return a
        else:
            return gcd(b, a % b)
    
    
    def lcm(a, b):
        return a * b / gcd(a, b)
    
    
    a = int(input("请输入第一个数字:"))
    b = int(input("请输入第二个数字:"))
    
    print("最大公约数为:", gcd(a, b))
    print("最小公倍数为:", int(lcm(a, b)))
    
  3. 统计不同字符个数

    s = input("请输入一行字符:")  # 输入一行字符
    letter_count = 0  # 英文字母个数
    digit_count = 0  # 数字个数
    space_count = 0  # 空格个数
    other_count = 0  # 其他字符个数
    
    # 统计个数
    for i in s:
        if i.isalpha():
            letter_count += 1
        elif i.isdigit():
            digit_count += 1
        elif i.isspace():
            space_count += 1
        else:
            other_count += 1
    
    # 输出结果
    print("英文字母个数为:", letter_count)
    print("数字个数为:", digit_count)
    print("空格个数为:", space_count)
    print("其他字符个数为:", other_count)
    
  4. 猜数游戏续

    import random
    
    target = random.randint(1, 1000)
    count = 1
    while True:
        guess = input("请输入一个猜测的整数(1-1000):")
        try:
            type(guess) != int(guess)
        except:
            print("输入的内容必须为整数!\n请重新输入!")
            break
        count = count + 1
        if int(guess) > target:
            print("猜大了!")
        elif int(guess) < target:
            print("猜小了!")
        else:
            print("猜对了!")
            break
    print(f"总共猜了{count}次!")
    
  5. 羊车门问题

    import random
    
    
    def monty_hall(repeat, change_choice):
        """
      :param repeat: 抽样的总次数
      :param change_choice: True表示参赛者改变选择,False表示坚持选择
      :return: 获胜的概率
      """
        win = 0
        for i in range(repeat):
            # 三扇门
            doors = ["goat", "goat", "car"]
            # 参赛者随机选择一扇门
            choice = random.choice(doors)
            # 主持人打开一扇有山羊的门
            doors.remove("goat")
            goat_door = random.choice(doors)
            doors.remove(goat_door)
            # 如果参赛者选择改变
            if change_choice:
                # 获胜的门只有一扇
                win_door = doors[0]
                if win_door == "car":
                    win += 1
            # 如果参赛者坚持选择
            else:
                if choice == "car":
                    win += 1
        # 计算获胜的概率
        win_probability = win / repeat
        return win_probability
    
    
    # 测试
    change_win = monty_hall(10000, True)
    no_change_win = monty_hall(10000, False)
    print("参赛者改变选择获胜的概率为:%.2f%%" % (change_win * 100))
    print("参赛者坚持选择获胜的概率为:%.2f%%" % (no_change_win * 100))
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图及其与图相关的算法

⭐️前言⭐️ 本篇文章主要介绍图及其与图相关的算法 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主…

智慧档案馆八防是怎么建设的?都需要注意哪些内容

智慧档案馆八防环境监控系统一体化解决系统方案 智慧档案库房一体化平台通过智慧档案管理&#xff0c;实现智慧档案感知协同处置功能&#xff1b;实现对档案实体的智能化识别、定位、跟踪监控&#xff1b;实现对档案至智能密集架、空气恒湿净化一体设备、安防设备&#xff0c…

Linux守护进程

守护进程 Linux/Unix 会话 会话首进程 进程组 组长进程&#xff1a;第一个启动的进程叫组长进程。 关闭终端&#xff1a;进程组里全部进程关闭。 setsid()创建一个新的会话。&#xff08;必须是组员进程才可以创建一个新的会话&#xff09; 1.先fork()&#xff0c;退出父进程 2…

电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

字符串最后一个单词的长度

描述 计算字符串最后一个单词的长度&#xff0c;单词以空格隔开&#xff0c;字符串长度小于5000。&#xff08;注&#xff1a;字符串末尾不以空格为结尾&#xff09; 输入描述&#xff1a; 输入一行&#xff0c;代表要计算的字符串&#xff0c;非空&#xff0c;长度小于500…

mysql触发器监听数据投递中间件

目前市面上有许多的 CDC&#xff08;Change Data Capture&#xff09; 框架用于监听数据库的数据变动&#xff0c;例如&#xff1a;canal、Debezium、Maxwell等都是用来解析 binlog 日志实现事件的监听。但是有一个情况就是如果公司对 binlog 日志文件的权限管控的很严格&#…

【学习日记2023.6.2】之 管理端报表统计

文章目录 11. 管理端报表统计11.1 Apache ECharts11.1.1 介绍11.1.2 入门案例 11.2 营业额统计11.2.1 需求分析和设计11.2.2 代码开发Controller层Service层接口Service层实现类Mapper层 11.2.3 功能测试11.2.4 提交代码 11.3 用户统计11.3.1 需求分析和设计11.3.2 代码开发Con…

如何编写接口自动化框架系列通过yaml来管理测试用例(四)

本文是接口自动化测试框架系列篇的第四篇 &#xff0c;主要介绍yaml包的使用 。自动化测试的本质是将功能测试用例交给代码去 目录 1. yaml介绍&#xff1f; 2.python中的yaml包 3.项目中使用yaml包 4 项目总结 执行 &#xff0c;测试人员往往是在自动化框架添加对应的测试…

排查Javascript内存泄漏案例(一)

Chrome DevTools里的Performance面板和Memory面板可以用来定位内存问题。 如何判断应用发生内存泄漏&#xff1f; 为了证明螃蟹的听觉在腿上&#xff0c;一个专家捉了只螃蟹并冲它大吼&#xff0c;螃蟹很快就跑了。然后捉回来再冲它吼&#xff0c;螃蟹又跑了。最后专家把螃蟹的…

WPS 借助 ML Kit 无缝翻译 43 种语言,每年净省 6,500 万美元

△ 动画说明: 在笔记本电脑屏幕中&#xff0c;汉字 "文" 将变为字母 "A"&#xff0c;代表文本的横线将逐一出现&#xff0c;就像有人在输入内容一样。 WPS 是一款办公套件软件&#xff0c;可让用户轻松查看和编辑其所有文档、演示文稿、电子表格等。作为一…

RK3568 AP6275S蓝牙驱动程序调度过程

1、前言 今年3月份调度了RK3568驱动程序&#xff0c;当时由于时间的问题&#xff0c;AP6275S蓝牙驱动程序没有调试成功。当时仔细检查的设备树的配置。 wireless_bluetooth: wireless-bluetooth {compatible "bluetooth-platdata";clocks <&rk809 1>;cl…

JavaCV - 图像暗通道去雾

一、效果图 二、实现原理 暗通道先验:首先说在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值,也就是说该区域光强是一个很小的值。所以给暗通道下了个数学定义,对于任何输入的图像J,其暗通道可以用下面的公式来表示:其中JC表示彩色图像每个…

【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-优化更新子节点

1. 前言 在上一篇文章中&#xff0c;我们介绍了当新的VNode与旧的oldVNode都是元素节点并且都包含子节点时&#xff0c;Vue对子节点是 先外层循环newChildren数组&#xff0c;再内层循环oldChildren数组&#xff0c;每循环外层newChildren数组里的一个子节点&#xff0c;就去…

超100篇! VAD论文梳理汇总!

GitHub的一位博主整理了上百篇语音活动检测&#xff08;VAD&#xff09;的论文&#xff0c;按照其中使用的特征方法以及适用的环境进行了分类整理&#xff0c;时间跨度为从198*年至2019年。此外&#xff0c;还提供了几个VAD代码&#xff0c;它们的性能表现较好。需要的同学可以…

基于深度学习的高精度牙齿健康检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度牙齿健康检测识别系统可用于日常生活中检测牙齿健康状况&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的牙齿目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数…

Niagara—— System和Emitter节点

目录 一&#xff0c;发射器节点 Properties Emitter Spawn Emitter Update Particle Spawn Particle Update Renderer 二&#xff0c;系统节点 Properties System Spawn System Update Niagara是按照从上到下按顺序&#xff0c;依次执行模块Module&#xff08;可编程…

Locust接口性能测试

谈到性能测试工具&#xff0c;我们首先想到的是LoadRunner或JMeter。LoadRunner是非常有名的商业性能测试工具&#xff0c;功能非常强大。但现在一般不推荐使用该工具来进行性能测试&#xff0c;主要是使用也较为复杂&#xff0c;而且该工具体积比较大&#xff0c;需要付费且价…

UE5的IK Rig重定向注意问题

推荐先把官方文档看仔细&#xff0c;明白IK Rig重定向原理&#xff0c;对理解UE5怎么进行动画骨骼重定向&#xff0c;以及重定向后骨骼出现问题应该怎么调整非常有帮助。 IK Rig重定向 主要功能点 IK Rig IK Rig的作用是定义两个转化关系中的源骨骼和目标骨骼的主要部件的骨…

Linux——网络套接字2|Tcp服务器编写

本篇博客先看后面的代码,再回来看上面这些内容。 .hpp文件,基本调用 服务器基本框架

ASEMI代理KY可控硅BT169的工作原理及应用领域

编辑-Z 本文主要介绍了可控硅BT169的工作原理及其在各个领域的用。首先&#xff0c;我们将详细阐述可控硅BT169的工作原理&#xff0c;包括结构特点、工作过程等&#xff1b;其次&#xff0c;我们将探讨可控硅BT169在家用电器、工业控制、电力电子等领域的应用。 1、可控硅BT1…