第四章、程序的控制结构

第四章、程序的控制结构

1、程序的三种控制结构

  • (1)、程序流程图

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

描述一个计算问题的程序过程有多种方式:包括IPO、流程图、伪代码、程序代码。其中流程图采用图形方式最为直观。

  • (2)、程序控制结构基础

程序的三种基本结构
图2

  • (3)、程序控制结构扩展

Python在原有的分支结构的基础上,扩展出了异常处理,使用try…except语句。异常处理以程序是否产生异常为判断条件,根据一段代码执行的正常性进行程序逻辑选择。
图3

在循环原理的基础上,Python提供了2个循环控制符break和continue对循环的执行过程进行控制。break用来结束整个循环,执行后面的语句;continue用来结束当前循环,执行下一次循环。

2、程序的分支结构

  • (1)、单分支结构:if

语法:
if 条件:
语句块

条件是一个产生True和False结果的语句 ,当结果为True时,执行语句块,否则跳过语句块。缩进的语句块与if是包含关系。(语句块可以是一条语句,也可以是多条语句)
如果条件是多个,多个条件之间采用and或or进行逻辑组合。and表示多个条件“与”的关系,or表示多个条件“或”的关系。

  • (2)、二分支结构:if-else

Python中的二分支结构使用if…else对条件进行判断,其中if…else和语句快前的缩进都是语法的一部分。语句块1在if中条件为True时执行,语句块2在if条件为False使执行。简单来说二分支结构根据条件的True或False结果产生两条路径。
语法:
if 条件:
语句块1
else:
语句块2

二分支结构还有一种简洁的表达,简称条件表达式。对于简洁表达方式,要使用表达式而不是语句。
语法结构:表达式1 if 条件 else 表达式2
表达式和语句的区别是:
表达式是产生或计算新数据值的代码片段,它并不是完整语句。例如89+3是表达式,a=89+3则是语句。

  • (3)、多分支结构:if-elif-else

Python的多分支结构是一种多选一执行的结构,根据不同条件的结果按照顺序选择执行路径。Python的多分支结构通常用于判断同一条件或一类条件的多个执行路径,Python会按照代码顺序依次评估判断条件,寻找并执行第一个结果为True条件对应的语句块,当前语句块执行后跳过整个if-elif-else结构。如果没有任何条件成立,else下面的语句块被执行,else子句是可选的。使用时应注意条件的逻辑关系。
语法结构:
if 条件1:
语句块1
elif 条件2:
语句块2
……
else:
语句块n

  • (4)、判断条件及组合

分支结构中的判断条件可以使用任何能够产生True或False的语句或函数。形成判断条件最常见的方式是采用关系操作符。
在Python语言中,任何非零的数值,非空的数据类型的布尔值为True,0或空类型的布尔值为False。
Python语言中使用not,not和or对条件进行逻辑运算或组合。
not表示单个条件的“否”关系。
and表示多个条件的“与”关系
or表示多个条件的“或”关系
多条件之间可以通过小括号进行组合,实现条件之间的运算。

3、程序的循环结构

Python语言的循环结构包括两种,遍历循环和无限循环。遍历循环使用保留字for依次提取遍历结构各元素进行处理,无限循环保留字while根据判断条件执行程序。

  • (1)、遍历循环:for

for 循环的语法结构:
for 循环变量 in 遍历结构:
语句块

遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行依次语句块。for语句的循环执行次数是根据遍历结构中的元素个数确定的。
遍历结构可以是字符串、文件、range()函数或组合数据类型等。
遍历字符串:
for循环变量 in 字符串变量:
语句块

使用range()函数,可以指定语句块的循环次数:
for 循环变量 in range(循环次数):
语句块

循环结构还有一种扩展模式,for-else结构。当for循环正常执行之后,程序会继续执行else语句中的内容。else语句只在循环正常执行之后才执行结束。
可以把循环中的else语句想象成一种奖励,当程序辛苦地执行完全全部循环,没有中途break终止,则额外给予一段程序执行的奖励。

  • (2)、无限循环:while

Python通过保留字while实现无限循环。
while语法结构:
while 条件:
语句块

条件与if语句中的判断条件一样,结果为True和False。
当程序执行到while语句时,判断条件如果为True,执行循环语句,语句结束后返回再次判断while语句的条件;当条件为False时,循环终止,执行与while同级别缩进的后续语句。
无限循环也有一种else的扩展模式:
while 条件:
语句块1
else:
语句块2

当while循环正常结束之后,程序会继续执行else语句中的内容。else语句只在循环正常执行后才执行。
(3)、循环结构:break和continue
循环结构有两个辅助循环控制结构的保留字:break和continue。
如果有两层循环或多层循环,break跳出某层循环。
在while或for循环语句中使用了break退出循环,那么else语句将不再执行。

4、程序的异常处理

Python程序一般对输入有一定的要求,但当 实际输入不满足程序要求时,可能会产生程序运行错误。
为了避免运行错误,在Python中使用try-except进行异常处理。
语法格式:
在这里插入图片描述
语句块1是正常执行的程序内容,当执行这个语句块发生异常时,则执行except后面的语句块2.

try:
    num = eval(input("请输入数字:"))
    print(n*2)
except:
    print("请输入一个正确的数字!")
```python

运行结果:
请输入数字:计算机Pyhon二级考试
请输入一个正确的数字!

除了输入之外,异常处理还可以处理程序执行中的运行结果。
例n/0,会出现ZeroDivisionError: division by zero的错误

try:
    67/0
except:
    print("ZeroDivisionError")


只用程序可能异常退出,无论哪种类型,都可以用try-except捕捉这种异常。

5、选择题

(1)、以下语句在Python中非法的是()
A、x=y=z
B、x=(y=z+1)
C、x,y=y,x
D、X+=y!
本题选B
(2)、以下选项运行结果为True的是()
A、(‘3’,‘2’)<(‘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(x)
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误
本题选A
(7)、for或者while与else搭配使用时,能够执行else对应语句块的情况是()
A、总会执行
B、永不执行
C、仅循环正常C结束时
D、仅循环非正常结束时,以break结束
本题选C
(8)、try-except结构中,能够执行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

6、代码题

第一题:

"""
编写一个“猜数字游戏”的程序,1-1000之间随机产生一个数,然后请用户循环猜
这个数字,对于每个答案只回答“猜大了”或“猜小了”,直到正确为止,输出
用户的猜测次数.

"""
import random
n= random.randint(1,1000)
count = 0
while True:
    try:
        num = eval(input("请输入你猜的数字:"))
        count +=1
        if n < num:
            print("大了大了")
        elif n > num:
            print("小了小了")
        else:
            print("对了对了")
            break
         
        print("猜测次数:",count)
    
    except:
        print("请输入正确!")

第二题:

"""
输入一个年份,输出是否为闰年。
(闰年条件:能被4整除但不能被100整数,或者能被400整数的都是闰年)

"""
while True:
    try:
        year = eval(input("请输入年份:"))
        if year % 400 ==0 or (year % 4==0 and year % 100 !=0):
            print(year,"年是闰年!")
        else:
            print(year,"年不是闰年!")
    except:
        print("请输入正确!")



第三题:
前提:isalpha()、isdigit() 和 isspace() 都是 Python 字符串的内置方法。

  • isalpha() 方法用于检查一个字符串是否只包含字母字符(包括大小写字母)。
  • isdigit() 方法用于检查一个字符串是否只包含数字字符。
  • isspace() 方法用于检查一个字符串是否只包含空格字符(包括空格、制表符、换行符等)。
    这些方法都返回布尔值,如果字符串符合条件,则返回True;否则返回False。使用这些方法可以方便地判断字符的类型,从而进行字符统计或其他操作。
"""
统计不同字符个数。用户从链盘链入行字竹,编写·个程序,
统计并输出其中英文;符、数字、空格和其它字符的个数。
"""
def count_characters():
    text = input("请输入字符串: ")
    char_count = 0
    digit_count = 0
    space_count = 0
    other_count = 0

    for char in text:
        if char.isalpha():
            char_count += 1
        elif char.isdigit():
            digit_count += 1
        elif char.isspace():
            space_count += 1
        else:
            other_count += 1

    print("英文字符个数:", char_count)
    print("数字个数:", digit_count)
    print("空格个数:", space_count)
    print("其他字符个数:", other_count)
count_characters()

第四题:

"""
最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。
最大公约数的计算一般使用辗转相除法,最小公倍数则使用两个效的乘积除以最大公约数。

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。

"""
def gcd(a, b):
    # 辗转相除法求最大公约数
    while b != 0:
        a, b = b, a % b
    return a

def lcm(a, b):
    # 计算最小公倍数
    gcd_value = gcd(a, b)
    lcm_value = (a * b) // gcd_value
    return lcm_value

# 用户输入两个整数
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))

# 调用函数计算最大公约数和最小公倍数
gcd_value = gcd(num1, num2)
lcm_value = lcm(num1, num2)

print(f"最大公约数为:{gcd_value}")
print(f"最小公倍数为:{lcm_value}")

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值