第四章 程序的控制结构

news2025/2/25 19:19:49

文章目录

    • 第四章 程序的控制结构
        • 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))
    

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

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

相关文章

Github Copilot AI配对开发者编程,提升项目建设进度

Github Copilot是什么&#xff1f; GitHub Copilot 是结对编程的虚拟版本。结对编程是一种常见的敏捷软件开发技术 —— 即两个开发人员在同一个项目上并肩协作&#xff0c;轮流编写代码并检查合作伙伴的输出。 Copilot 可以支持十几种语言&#xff0c;与 Python、JavaScript、…

一文揭秘高效稳定的 Apache Doris 内存管理机制

作者&#xff1a;SelectDB 高级研发工程师、Apache Doris Committer 邹新一 背景 Apache Doris 作为基于 MPP 架构的 OLAP 数据库&#xff0c;数据从磁盘加载到内存后&#xff0c;会在算子间流式传递并计算&#xff0c;在内存中存储计算的中间结果&#xff0c;这种方式减少了频…

Vue2创建脚手架小案例

Vue CLI是一个官方提供的命令行工具&#xff0c;用于快速创建Vue.js项目和管理项目依赖项。下面是使用Vue CLI创建Vue.js项目的基本步骤&#xff1a; 首先&#xff0c;确保已安装Node.js和npm包管理器。可以在终端输入以下命令来检查它们的版本&#xff1a; node -v npm -v如…

MySQL备份

MySQL的备份方式有哪几种&#xff1f;分别如何实现&#xff1f; 目录 一、数据的备份类型 1、数据的备份类型根据其自身的特性主要分为以下几组&#xff1a; 二、MySQL备份数据的方式 三、常见的备份工具 1、一般情况下, 我们需要备份的数据分为以下几种 2、备份工具 3…

【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)第三章——AI应用开发

1.具备编程经验 本课程中的示例代码、练习涉及C&C语言、Python语言的如下基础知识&#xff0c;建议您在学习本课程前先学习这部分内容 1.C&C语言 a.变量、基本数据类型、指针、引用、const限定符等 b&#xff0c;字符串和数组 c.表达式&#xff0c;包括赋值运算、条件…

回收站中怎么找回误删除的文件?这几种方法很实用

当我们在电脑上操作文件的时候&#xff0c;难免会有不小心删除文件的情况发生。这个时候&#xff0c;我们可以打开回收站来找回误删除的文件。但是&#xff0c;有时候我们也会误将回收站清空。那么&#xff0c;该怎样才能找回已经误删除的文件呢&#xff1f;在这里提供了回收站…

免费搭建个人stable-diffusion绘画(干货教程)

目前AI绘画主流的模型有Midjourney、Stable Diffusion、DALLE&#xff0c;最火的当属Midjorney和Stable Diffusion&#xff0c;但是由于Midjourney没有开源且要付费&#xff0c;我今天主要分享Stable Diffusion的部署和使用方法的分享。 大家应该面对的一个不可避免的问题&…

kubernetes-informer机制

一、概念 informer 是 client-go 中的核心工具包&#xff0c;在kubernetes中&#xff0c;各个组件通过HTTP协议跟 API Server 进行通信。如果各组件每次都直接和API Server 进行交互&#xff0c;会给API Server 和ETCD造成非常大的压力。在不依赖任何中间件的情况下&#xff0…

Git简单使用介绍

Git作用 版本控制&#xff08;版本迭代&#xff09;&#xff0c;多人开发&#xff0c;没有版本控制&#xff0c;每修改一下文件就需要备份 常用的版本控制器&#xff1a;Git 和SVN 主要区别&#xff1a; SVN是集中式版本控制系统&#xff0c;版本库是集中放在中央服务器的&a…

半导体芯片划片机怎么使用

使用半导体芯片划片机的方法如下&#xff1a; 准备工作&#xff1a;清洁设备&#xff0c;核对晶圆数量和批次信息&#xff0c;确保晶圆完好无破损。 粘贴晶圆片&#xff1a;将待切割的晶圆片粘贴到蓝膜上&#xff0c;并将蓝膜框架放入划片机。 划片开始&#xff1a;实时清除划…

想劝大家别去外包,干了5年,彻底废了......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近5年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四…

什么是SQL Server 审核

IT 安全专业人员需要定期监视和审核 SQL Server 中的所有活动&#xff0c;以确保关键数据的完整性和机密性不会受到损害。手动监视服务器上的所有这些活动是一个忙碌的过程。为了使管理员的工作更轻松一些&#xff0c;Microsoft 提供了 SQL Server 审核功能来帮助管理员有效地审…

vue不同开发方式引用vue文件讲解

上面这个图是vue构建后dist目录的文件&#xff0c;这里面包含了各种开发环境所需要的vue文件 一、开发环境和生产环境 主要分为带有prod和不带prod的版本&#xff1b; 带有prod为生产环境版本并进行了代码压缩&#xff0c;没有运行中不会有警告、错误等详细的提示信息 不带pr…

《程序员面试金典(第6版)》面试题 02.07. 链表相交(查找节点操作,哈希表,双指针(先走n步法,交替遍历法))

题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 题目传输门&#xff1a;面试题 02.07. 链表相交 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结…

Python——openpyxl读取Excel表格(读取、单元格修改、单元格加底色)

首先python读取Excel的库有很多&#xff0c;包括xlwings&#xff0c;pandas&#xff0c;xlrd等等&#xff0c;我比较常用的是openpyxl&#xff0c;以及pandas&#xff0c;当然还有喜欢将数据量比较大的Excel转为csv格式再读取。 今天我们用openpyxl来读取excel文件&#xff0c…

【Python爬虫】urllib模块:强大的网络爬虫利器,让你轻松获取万千信息!

前言&#xff1a; Python爬虫是一种获取互联网信息的技术&#xff0c;它可以自动化地从网站上抓取数据并进行处理。Python爬虫的优点在于它可以快速地获取大量数据&#xff0c;并且可以自动化地进行数据处理和分析。在Python爬虫中&#xff0c;urllib模块是一个非常重要的模块&…

python---变量(3)

求字符串的长度 使用len来求字符串中有几个字符 字符串的拼接 此时是把a2字符串拼接到a1字符串的末尾&#xff0c;得到更大的字符串&#xff0c;对于原来的a1和a2是没有影响的&#xff01; 不能把字符串和数字混合相加&#xff01; 这个时候程序就会报错&#xff0c;不能…

深入理解Linux虚拟内存管理

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xf…

智慧档案馆库房环境要求中需要做到几防?

《档案馆工作通则&#xff08;国档发〔1983〕14号&#xff09;》要求档案库房必须坚固适用&#xff0c;并应具有抗震、防盗、防火、防水、防潮、防尘、防虫、防鼠、防高温、防强光等设施&#xff1b;《第13号国家档案局令《机关档案管理规定》》要求 做好防火、防盗、防紫外线、…

Docker 快速入门实用教程

文章结构 Docker 的常用使用概念安装Docker 简单使用镜像相关操作容器相关操作 Docker 的常用使用 参考&#xff1a;https://www.runoob.com/docker/macos-docker-install.html 概念 images 镜像&#xff08;镜像相当于类概念&#xff09; container 容器&#xff08;con…