【笔记】2022.4.14~15 分支结构和循环结构

1. 流程控制的三种类型

根据控制代码执行方式的不同,将代码分为三种结构
(1)顺序执行(默认):代码从上往下按顺序依次执行,并且每条语句只执行一次

RIGHT Example:

a = 10
print(a)
print('111')
print('222')

(2)分支结构(if语句):根据条件选择执行代码

RIGHT Example:

age = 34
if age >= 18:
    print('成年')
else:
    print('未成年')

(3)循环结构(for、while):让代码重复执行(代码只写一遍,执行多次)

RIGHT Example:

for x in range(10):
    print('hello world!')

附:一个简单的三种结构的图示
在这里插入图片描述

2. 分支结构


2.1 if单分支结构:如果xxx就xxx


2.1.1 语法

if 条件语句:

	代码段

2.1.2 对语法的说明

(1)if:关键字;固定写法
(2)条件语句:可以是任何有结果的表达式,例如:具体数据、已经赋值过的变量、有结果的某种运算的运算表达式等

WRONG Example:

age = 18
if age += 18:
	print('满足条件才执行的代码')             # 报错,SyntaxError

RIGHT Example:

if 'abc':
    print('满足条件才执行')

(3):(冒号):固定写法,必须是英文输入法下的冒号

WRONG Example:

age = 20
if age >= 18:
	print('满足条件才执行的代码')             # 报错,SyntaxError

(4)代码段:结构上就是和if保持一个缩进的一条或者多条语句(至少一条);逻辑上就是满足条件才执行的代码

WRONG Example:

age = 20
if age >= 18:
print('满足条件才执行的代码')                 # 报错,IndentationError

2.1.3 应用案例

APPLICATION 1 如果num是偶数就打印’偶数’,不管是什么数都打印’Number’:

num = int(input('请输入一个数:'))
if num % 2 == 0:
    print('偶数')
print('Number')

APPLICATION 2 根据年龄值打印’成年’:

age = int(input('请输入年龄:'))
if age >= 18:
    print('成年')

APPLICATION 3 如果num能被4整除,就打印’4的倍数’:

num = int(input('请输入一个整数:'))
if num % 4 == 0:
    print('4的倍数')

2.2 if双分支结构:如果xxx就xxx否则就xxx


2.2.1 语法

if 条件语句:
    代码段1               # 条件成立的时候要执行的代码
else:
    代码段2               # 条件不成立的时候要执行的代码

2.2.2 应用案例

APPLICATION 1 根据num的奇偶性打印’奇数’或者’偶数’:

# 方法1
num = int(input('请输入一个整数:'))
if num % 2 == 0:
    print('偶数')
else:
    print('奇数')

# 方法2
if num % 2:
    print('奇数')
else:
    print('偶数')

说明:if语句在执行时会强行把条件语句转化成布尔值,True执行代码段1,False执行代码段2

布尔类型转换:所有类型的数据都可以转换成布尔,转换的时候所有的0值和空值会转换成False,其他都是True

数据类型转换详见2022.4.12日笔记

APPLICATION 1 VARIANT 根据num的奇偶性打印’奇数’或者’偶数’:

# 方法1
str1 = input('请输入一个字符串:')
if str1 == '':
    print('空字符串')
else:
    print('非空字符串')

# 方法2
str1 = input('请输入一个字符串:')
if str1:
    print('非空字符串')
else:
    print('空字符串')

# 方法3
str1 = input('请输入一个字符串:')
if not str1:
    print('空字符串')
else:
    print('非空字符串')

APPLICATION 2 根据year对应的年份打印’平年’或者’闰年’:

year = int(input('请输入一个年份:'))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print('闰年')
else:
    print('平年')

2.3 if多分支结构


2.3.1 语法

(1)方式1:适用于条件不互斥的情况

if 条件语句1:
    代码段1
if 条件语句2:
    代码段2
if 条件语句3:
    代码段3
...

(2)方法2:适用于条件互斥的情况

if 条件语句1:
    代码段1
elif 条件语句2:
    代码段2
elif 条件语句3:
    代码段3
else:
    代码段N

2.3.2 应用案例

APPLICATION 1 如果考试100:买车;如果90多分:买电脑;如果80多分:买鞋;如果低于80分:打死:

(1)方法1

if score == 100:
    print('买车')
if 90 <= score < 100:
    print('买电脑')
if 80 <= score < 90:
    print('买鞋')
if score < 80:
    print('打死')

说明:在本案例中,由于条件之间互斥,选择方法1每步代码都运行一次,会造成CPU资源浪费。

(2)方法2

if score == 100:
    print('买车')
elif 90 <= score:
    print('买电脑')
elif 80 <= score:
    print('买鞋')
else:
    print('打死')

APPLICATION 2 根据年龄范围打印:幼儿(03)、少年(417)、青年(1838)、中年(3969)、老年(70~):

# 由于条件之间互斥,所以不再用多个if的写法,直接选择elif语句

age = int(input('请输入您的年龄:'))
if age <= 3:
    print('您是幼儿')
elif age <= 17:
    print('您是少年人')
elif age <= 38:
    print('您是青年人')
elif age <= 69:
    print('您是中年人')
else:
    print('您是老年人')

2.4 if嵌套

APPLICATION 根据num的值打印’偶数’、‘奇数’和’4的倍数’:

num = int(input('请输入一个数:'))
if num % 2 == 0:
    print('这个数是偶数')
    if num % 4 == 0:
        print('这个数是4的倍数')
else:
    print('这个数是奇数')

注意:想要搞清楚到底用多if语句还是elif语句还是if嵌套,可以先画韦恩图搞清楚条件之间的容斥关系


3. 循环结构


3.1 for循环


3.1.1 语法

for 变量 in 序列:
    循环体

3.1.2 对语法的说明

(1)for、in:关键字;固定写法
(2)变量:变量名
(3)序列:容器型数据类型的数据,例如:字符串、列表、字典、元组、集合、迭代器、生成器、range
(4):(冒号):固定写法
(5)循环体:结构上,循环体就是和for保持一个缩进的一条或者多条语句(至少1条);
逻辑上,循环体中的代码就是需要重复执行的代码


3.1.3 执行过程

让变量去序列中取值,一个一个地取,取完为止,每取一个值就执行一次循环体
for循环的循环次数和序列中元素的个数有关

RIGHT Example:

for x in ['小明', '小红']:
    print(x,':hello world!')
print('end!')

3.2 range()函数


3.2.1 功能:

(1)range(N):产生[0,N)的等差数列,公差是1;例如:range(3):0,1,2

RIGHT Example:

for x in range(4):
    print('x =', x)

(2)range(M,N):产生[M,N)的等差数列,公差是1;例如:range(2,8):2,3,4,5,6,7

RIGHT Example:

for x in range(7, 20):
    print('x =', x)

(3)range(M,N,step):产生[M,N)的等差数列,公差是step;例如:range(1, 10, 3):1,4,7

RIGHT Example:

for x in range(7, 20, 5):
    print('x =', x)

for x in range(10, 0, -2):
    print('x =', x)                        # 10,8,6,4,2

3.2.2 应用

APPLICATION 1 利用range函数产生一个数字序列:-1,1,3,5,7:

print('第一题:', end='')
for x in range(-1, 9, 2):
    print(x, end=' ')
print('')

APPLICATION 2 利用range函数产生一个数字序列:0,1,2,3,4,5,6,7,8,9,10:

print('第二题:', end='')
for x in range(11):
    print(x, end=' ')
print('')

APPLICATION 3 利用range函数产生一个数字序列:0,3,6,9,12,15:

print('第三题:', end='')
for x in range(0, 18, 3):
    print(x, end=' ')
print('')

3.3 for循环与range()函数的综合应用


3.3.1 求和问题

APPLICATION 1 用代码计算:1+2+3+…+100:

# 第一步:定义一个变量保存最后的和,初始值是0
sum = 0
# 第二步:通过for循环获取到需要求和的每个数据:1,2,3,4,... ,100
for x in range(1, 101):
    # 第三步:每取到一个需要求和的数据,就往保存最后的和的变量中加一个
    sum += x
print('等差数列的和是:', sum)

APPLICATION 2 求nums中所有元素的和:

# nums = [10, 29, 30, 40]

sum = 0
for x in [10, 29, 30, 40]:
    sum += x
print('等差数列的和是:', sum)

APPLICATION 3 求100以内所有奇数的和:

# 1+3+5+7+9+11+...+99

sum = 0
for x in range(1, 100, 2):
    sum += x
print('等差数列的和是:', sum)

APPLICATION 4 求nums中所有奇数的和:

nums = [10, 29, 30, 25, 40, 8, 1]
sum = 0
for x in nums:
    if x % 2:
        sum += x
print('奇数的和是:', sum)

APPLICATION 5 计算100以内(不包括100)所有能被3整除或者能被5整除的数的和:

sum = 0
for x in range(100):
    if x % 3 == 0 or x % 5 == 0:
        sum += x
print('能被3整除或者能被5整除的数的和是:', sum)

3.3.2 统计个数

APPLICATION 1 统计100以内偶数的个数:

# 第一步:定义变量保存最后的个数,初始值是0
count = 0
# 第二步,:用for循环获取所有的统计对象
for x in range(2, 99, 2):
    # 第三步:取到一个统计对象,保存个数的变量就在原来的基础上加1
    count += 1
print('偶数的个数是:', count)

APPLICATION 2 统计100以内(不包括0和100)所有能被3整除或者能被4整除的数的个数:

count = 0
for x in range(1, 100):
    if x % 3 == 0 or x % 4 == 0:
        count += 1
print('能被3整除或者能被4整除的数的个数是:', count)

3.4 while循环


3.4.1 语法

while 条件语句:
    循环体

3.4.2 说明

(1)while:关键字,固定写法
(2)条件语句:和if中的条件语句的要求一样
(3):(冒号):固定写法
(4)循环体:结构上,和while保持一个缩进的一条或者多条语句;逻辑上,需要重复执行的代码


3.4.3 执行过程

不断判断条件语句是否为True,如果是,就执行循环体,否则循环就结束。

RIGHT Example:

x = 0
while x < 5:
    x += 1
    print('好耶')

APPLICATION 1 打印1~100所有的整数:

x = 1
while x <= 100:
    print(x, end=' ')
    x += 1

APPLICATION 2 打印1~100所有的偶数:

x = 2
while x <= 100:
    print(x, end=' ')
    x += 2

APPLICATION 3 打印1~100所有的偶数(倒序):

x = 100
while x >= 0:
    print(x, end=' ')
    x -= 2

3.5 for循环和while循环的选择


3.5.1 for和while循环的关系

(1)在解决问题的范围上面,while循环包含了for循环
(2)在使用难度上,for控制次数更简单
(3)在运行效率上,for高于while(参考Python 实现循环的最快方式


使用建议

(1)能用for循环解决的问题都用for,解决不了的才用while。
(2)循环次数确定:用for
(3)循环次数不确定:只能使用用while


3.5.2 只能用while循环的一些应用案例

APPLICATION 1 输密码:

pw = '11029'
i_pw = input('请输入密码:')
while i_pw != pw:
    i_pw = input('密码错误,请重新输入密码:')

APPLICATION 2 猜数游戏:

# 补充:python创建随机数
from random import randint
# 产生一个0到100的随机数
x = randint(0, 100)
num = -1
while num != x:
    num = int(input('请输入一个整数(0~100):'))
    if num > x:
        print('大了,再小点儿')
    else:
        print('小了,再大点儿')
print('恭喜你,猜对了!')

3.5 循环关键字continue、break和else

注意:前两个关键字都只能出现在循环体中


3.5.1 continue

用处:结束一次循环,每次在执行循环体的时候,如果遇到continue,那么这次循环直接结束,直接进入下一次循环

RIGHT Example:

for x in range(5):
    print(x)
    print('=====')
    continue
    print('+++++')
    
"""
结果:可以看出continue之后的没有执行
0
=====
1
=====
2
=====
3
=====
4
=====
"""

APPLICATION 1 打印偶数:

for x in range(10):
    if x % 2:
        continue
    print(x)

APPLICATION 2

x = 0
while x <= 10:
    print(x)
    if x % 2 == 0:
        x += 3
        continue
    x += 1
    
"""
执行过程:
x = 0:0小于等于10,打印0,0是2的倍数,x加3变成3,再continue
x = 3:3小于等于10,打印3,3不是2的倍数,x加1变成4
x = 4:4小于等于10,打印4,4是2的倍数,x加3变成7,再continue
x = 7:7小于等于10,打印7,7不是2的倍数,x加1变成8
x = 8:8小于等于10,打印8,8是2的倍数,x加3变成11,再continue
x = 11:11大于10,循环结束
"""

3.5.2 break

用处:结束整个循环,在执行整个循环体的时候,如果遇到break,那么整个循环直接结束,不会进入下次循环

RIGHT Example:

for x in range(5):
    print(x)
    print('=====')
    break
    print('++++++')
    
"""
结果:可以看出break之后就没有循环了
0
=====
"""

APPLICATION 1 遇到奇数就结束循环:

for x in range(5):
    if x % 2:
        break
    print(x)                         # 只会打印一个0

APPLICATION 2 while循环通用格式:

"""
while True:
    需要重复执行的代码
    if 循环的结束条件:
        break    
"""

# 输密码程序:
pw = '123456'
while True:
    i_pw = input('请输入密码:')
    if pw == i_pw:
        break

3.5.3 else

用处:else的存在不会影响原来循环的执行;

​ 如果循环不是因为遇到break而结束的,else后的代码段就会在循环结束后执行,否则不执行

完整的循环结构:

# (1)完整的for循环
for 变量 in 序列:
    循环体
else:
    代码段

# (2)完整的while循环
while 条件语句:
    循环体
else:
    代码段

RIGHT Example:

for x in range(5):
    if x == 3:
        break
    print(x, '==========')
else:
    print('++++++++')

APPLICATION 判断素数:

num = int(input('请输入一个正整数:'))
if num == 2:
    print('这是个素数')
else:
    for x in range(2, int(num ** 0.5) +2 ):
        if num % x == 0:
            print('这是个合数')
            break
    else:
        print('这是个素数')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值