Python基础03-循环结构

零、文章目录

Python基础03-循环结构

1、循环简介

(1)循环是什么
  • 程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环
(2)循环的作用
  • 让代码高效的重复执行
(3)循环的分类
  • 在Python中,循环结构分为while和for两种。

2、while循环

(1)基本语法
while 条件:
	条件成立重复执行的代码1
	条件成立重复执行的代码2
	......
'''
while循环三步走:
① 定义一个计数器,一般为i = 0或者i = 1
② 编写循环条件,如while i <= 100:
③ 在循环体内部(有缩进)更新计数器的值

举个栗子:循环输出100遍老婆大人,我错了
'''
# 定义一个计数器
i = 1
# 2、编写循环条件
while i <= 100:
    # 4、执行要循环打印的代码
    print('老婆大人,我错了!')
    # 3、在循环体内部(有缩进),更新计数器的值
    i += 1
(2)循环过程
  • 初始状态
  • 循环条件
  • 循环体(要重复做的事情)
  • 为下次循环作准备
'''
举个栗子:循环打印输出1-5
Debug工具有两步:
① 打断点
② 启动调试 => step over工具

使用Debug调试工具,了解while循环执行流程:
第一步:代码都是从上往下一行一行执行,所以先执行i = 1这一行代码
第二步:执行到while i <= 5这一行,对变量i进行判断,判断是否满足循环条件,如果满足,则继续向下执行,如果不满足,则
while循环执行结束,继续向下执行;由于 1 <= 5,所以执行到循环体的内部,输出i = 1,然后进行i += 1操作,此时i = 2
第三步:执行了i += 1以后,返回到while i <= 5位置,判断i是否小于5,2 <= 5,条件成立,继续往循环内部执行
....
直到i = 6时,条件不成立,则循环结束
'''
# 1、定义一个计数器
i = 1
# 2、编写一个循环条件
while i <= 5:
    # 编写要循环输出的代码
    print(i)
    # 3、在循环体内部(缩进)更新计数器的值
    i += 1
(3)案例
  • 案例1:计算1-100累加和
'''
求1-100累加的结果,sum = 1 + 2 + 3 + 4 + 5 + ... + 97 + 98 + 99 + 100
sum = 5050
需求分析:
① 使用while循环输出1-100
② 定义一个变量,如sum = 0,在1-100循环的过程中,每循环1次往sum变量中追加一个元素值
i = 1,sum = 0 + 1
i = 2,sum = 0 + 1 + 2
i = 3,sum = 0 + 1 + 2 + 3
...
i = 100,sum = 0 + 1 + 2 + 3 ... + 97 + 98 + 99 + 100
'''
# 第一步:定义一个计数器
i = 1
# 第四步:定义变量,如sum = 0
sum = 0
# 第二步:编写循环条件
while i <= 100:
    # 第五步:把每次得到的变量i的值累加到变量sum中
    sum += i
    # 第三步:在循环体内容更新计数器的值
    i += 1
# 第六步:当所有循环(100次循环)结束后,输出最终结果sum
print(sum)
  • 案例2:计算1-100偶数累加和
'''
偶数:在整数中,能被2整除的数字都称之为叫偶数;不能被整除的数字都称之为叫做奇数!
0 2 4 6 8 10都是偶数
1 3 5 7 9 11都是奇数
案例:求1-100之间所有偶数的和,sum = 2 + 4 + 6 + 8 + 10 ...
需求分析:
第一步:使用while循环输出1-100
第二步:判断哪些数字为偶数,如果是偶数则进行累加到变量sum = 0中
关键点:如何判断一个数字是偶数,判断这个数字是否能被2整除
数字变量 % 2 == 0,能被除尽
'''
# 1、定义一个计数器
i = 1
# 4、定义一个变量sum = 0,用于接收所有偶数的和
sum = 0
# 2、编写循环条件
while i <= 100:
    # 5、如何获取1-100之间,哪些数字为偶数
    if i % 2 == 0:
        sum += i
    # 3、在循环体内部更新计数器的值
    i += 1
# 6、当循环结束,则输出最终的结果
print(sum)

3、while中continue与break

(1)break与continue
  • break和continue是循环中满足一定条件退出循环的两种不同方式
  • 举例:一共吃5个苹果,吃完第一个,吃第二个…,这里"吃苹果"的动作是不是重复执行?
  • 情况一:如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第5个苹果,即是吃苹果的动作停止,这里就是break控制循环流程,即终止此循环
  • 情况二:如果吃的过程中,吃到第三个吃出一个大虫子…,是不是这个苹果就不吃了,开始吃第四个苹果,这里就是continue控制循环流程,即退出当前一次循环继而执行下一次循环代码
(2)break关键字
  • break:表示终止整个循环结构
'''
在循环中,有这样一个关键字叫做break,代表终止整个循环结构
'''
# 1、定义一个计数器
i = 1
# 2、编写循环条件
while i <= 5:
    # 4、添加一个判断条件
    if i == 4:
        print('已经吃饱了,后面的苹果不吃了!')
        break
    print(f'正在吃第{i}个苹果!')
    # 3、在循环体内部更新计数器的值
    i += 1
  • 输出
正在吃第1个苹果!
正在吃第2个苹果!
正在吃第3个苹果!
已经吃饱了,后面的苹果不吃了!
(3)continue关键字
  • continue:表示退出当前一次循环继而执行下一次循环代码
'''
在循环中,有这样一个关键字叫做continue,代表中止本次正在执行的循环结构,继而进入下一次循环
'''
# 1、定义一个计数器
i = 1
# 2、编写循环条件
while i <= 5:
    # 4、添加一个判断条件
    if i == 3:
        print('不好,有大虫,这个苹果不吃了!')
        # 特别注意:在while循环中,continue关键字之前一定要手工更新一下计数器,否则就是一个死循环
        i += 1
        continue

    print(f'正在吃第{i}个苹果!')
    # 3、在循环体内部更新计数器的值
    i += 1
  • 输出
正在吃第1个苹果!
正在吃第2个苹果!
不好,有大虫,这个苹果不吃了!
正在吃第4个苹果!
正在吃第5个苹果!

4、死循环

(1)死循环是什么
  • 在编程中一个靠自身控制无法终止的程序称为“死循环”。
'''
什么是死循环呢?记住:一个通过自身控制无法终止的循环结构就被称之为死循环!
死循环产生的两种场景:
① 因为程序编写错误造成的死循环,目前遇到两种情况:
while循环三步走,丢弃了最后一步,更新计数器,则会造成死循环
在while循环中,使用continue关键字之前没有更新计数器的值,也会造成死循环
② 因为业务的需要,人为设计的死循环
基本语法:
while True:
    需要一直被执行的代码,可以缩进放在此位置
特别说明:死循环本身没有任何意义,如果想让其有意义必须要结合input()输入语句
'''
while True:
     print('你是风儿我是沙,缠缠绵绵到天涯...')
(2)猜数字案例
'''
需求:计算机从1 ~ 10之间随机生成一个数字,然后提示输入数字,如果我们输入的数字与随机数相等,则提示恭喜你,答对了。如果输入的数字比随机数大,则提示,猜大了。反之,则提示猜小了,一共有3次机会。
需求分析:
第一步:从1-10之间生成一个随机数字(要用到随机数)
第二步:使用循环,循环3次
第三步:进行条件判断,相等、比随机数大、比随机数小 => if多分支结构
while:
    while:
        break只能终止离它最近的循环结构,而没有办法终止所有循环
'''
# 1、让计算机从1-10之间随机生成一个数字
import random
randnum = random.randint(1, 10)

# 2、使用while实现死循环
while True:
    # 3、在循环体内部,提示用户输入要猜的数字
    usernum = int(input('请输入您要猜的数字:'))
    # 4、进行条件判断
    if usernum == randnum:
        print('恭喜您,猜对了')
        break
    elif usernum > randnum:
        print('很抱歉,猜大了')
    else:
        print('很抱歉,猜小了')
  • 输出
请输入您要猜的数字:5
很抱歉,猜大了
请输入您要猜的数字:3
很抱歉,猜大了
请输入您要猜的数字:1
恭喜您,猜对了

5、for循环结构

(1)基本语法
for 临时变量 in 数据容器:
	重复执行的代码1
	重复执行的代码2
	......
'''
在Python代码中,循环结构一共有两大关键字:while循环 和 for循环
对于循环次数已知的情况,适合使用while循环(因为while循环有计数器)
对于循环次数未知的情况,如数据容器(字符串、列表、元组、字典、集合统称数据容器)的遍历,推荐使用for循环
所以for循环其实是专门用于实现对数据容器的遍历操作
什么是遍历操作?简单来说就是把数据容器中的数据一个一个查询出来的过程,我们就称之为遍历!

基本语法:
for 临时变量 in 数据容器:
    print(临时变量)
执行原理:
① 首先判断数据容器中有多少个元素,则for循环就要循环多少次
② 每次循环时,系统会自动将遍历得到的字符放入临时变量(临时变量一般起名叫做i)中,打印这个变量就相当于输出字符串中的
每一个字符
'''
str1 = 'mynameisly'
for i in str1:
    print(i)
  • 输出
m
y
n
a
m
e
i
s
l
y
(2)range函数
  • Python2 () 函数返回的是列表,而在Python3中 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
  • 基本语法:
range(stop)
range(start, stop[, step])

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是 [0, 1, 2, 3, 4] 没有 5
step:步长,默认为1。例如:range(0,5) 等价于 range(0, 5, 1)
'''
问题:for循环也是循环,能不能实现固定循环多少次,比如循环10次
答:默认情况下,for循环只能用于遍历数据容器。但是如果一定想要达到这个效果,可以使用range()方法

range(5) 等价于 range(0, 5, 1),从0开始,到5结束(不包含5),每次前进1步
range(1, 11, 2) 生成一个容器,从1开始,每次前进2步,1 3 5 7 9
'''
# 使用for循环 + range()生成从0到4
for i in range(5):  # range(0, 5, 1)
    print(i)
  • 输出
0
1
2
3
4
(3)案例
  • 案例1:计算1-100累加和
'''
需求:使用for循环求1-100累加的和
'''
# 1、定义一个变量sum = 0,用于接收1-100累加的结果
sum = 0
# 2、编写一个for循环,从1循环到100
for i in range(1, 101):  # 只顾不顾尾
    sum += i
# 3、当循环结束,累加结束
print(sum)
  • 案例2:计算1-100偶数累加和
'''
观察偶数特点:
① 能被2整除
② 相邻的偶数与偶数之间,差2位,2 4 6 8 10 12 14 ...
'''
# 第一种解法
# sum = 0
# for i in range(1, 101):
#     if i % 2 == 0:
#         sum += i
# print(sum)

# 第二种解法
sum = 0
for i in range(2, 101, 2):  # 2 4 6 8
    sum += i
print(sum)

6、for中的continue与break

(1)break与continue
  • break和continue是循环中满足一定条件退出循环的两种不同方式
(2)break关键字
  • break:表示终止整个循环结构
'''
break和continue是循环中满足一定条件退出循环的两种不同方式
记住:
break:满足一定条件,则终止整个循环结构
continue:满足一定条件,则中止本次循环,继而进入下一次循环
'''
# 1、定义一个字符串
str1 = 'mynameisly'
# 2、需求:遇到字符e则终止整个循环结构
for i in str1:
    # 添加一个判断条件,判断i是否等于字符'e'
    if i == 'e':
        print('遇到字符e则终止整个循环结构')
        break
    print(i)
(3)continue关键字
  • continue:表示退出当前一次循环继而执行下一次循环代码
'''
break和continue是循环中满足一定条件退出循环的两种不同方式
记住:
break:满足一定条件,则终止整个循环结构
continue:满足一定条件,则中止本次循环,继而进入下一次循环
'''
# 1、定义一个字符串
str1 = 'mynameisly'
# 2、需求:遇到字符e则中止本次循环,继而进入下一次循环
for i in str1:
    # 添加一个判断条件,判断i是否等于字符'e'
    if i == 'e':
        print('遇到字符e则中止本次循环,继而进入下一次循环')
        continue  # 强调:for循环中的continue不需要更新计数器!
    print(i)
(4)案例
'''
案例:用for循环实现用户登录
① 输入账号和密码
② 判断账号和密码是否正确(username='admin',password='admin888'),必须要同时匹配
③ 登录仅有三次机会,超过3次会报错
④ 如果用户登录失败,则提示用户名错误还是密码错误
⑤ 获取剩余的登录次数
'''
# 第五步:添加一个变量
trycount = 0
# 第一步:编写一个循环,只能循环3次
for i in range(3):
    # 第六步:手工更新登录次数
    trycount += 1
    # 第二步:接收账号与密码
    username = input('请输入您的账号:')
    password = input('请输入您的密码:')

    # 第三步:判断账号是否正确
    if username == 'admin':
        # 第四步:在账号正确的基础上,在判断密码是否正确
        if password == 'admin888':
            print('恭喜您,登录成功')
            break
        else:
            print('很抱歉,您的密码输入有误,请重新输入!')
            print(f'您还剩余{3-trycount}次登录机会!')

    else:
        print('很抱歉,您的账号输入有误,请重新输入!')
        print(f'您还剩余{3 - trycount}次登录机会!')

7、for循环中的else结构

(1)基本语法
for 临时变量 in 序列:
	重复执行的代码
	... 
else:
	循环正常结束之后要执行的代码
'''
在Python中,while循环/for循环都可以结合else语句结构,基本语法:
while 循环条件:
    pass
else:
    当循环正常结束后,要执行的代码!

for 临时变量 in 数据容器:
    pass
else:
    当循环正常结束后,要执行的代码!

问题1:什么情况代表正常结束?什么情况又是非正常结束?
答:在整个循环过程中,只要没有执行break关键字,循环都代表正常结束!

问题2:当循环正常结束后,else语句中的代码会被执行多少次?
答:只会被执行1次
'''
# 1、定义一个字符串
str1 = 'mynameisly'
# 2、使用for循环对str1进行遍历操作
for i in str1:
    # 3、添加一个判断条件,如果字符 == 'e',终止整个循环
    if i == 'e':
        print('遇到字符e则终止整个循环结构')
        break
    print(i)
else:
    print('当循环正常结束后,else语句中的缩进代码会自动被执行1次!')
(2)案例
'''
案例:用for循环实现用户登录
① 输入账号和密码
② 判断账号和密码是否正确(username='admin',password='admin888'),必须要同时匹配
③ 登录仅有三次机会,超过3次会报错
'''
# 第一步:编写一个循环,只能循环3次
for i in range(3):  # 0 1 2
    # 第二步:提示用户输入要登录的账号与密码
    username = input('请输入您的账号:')
    password = input('请输入您的密码:')

    # 第三步:对账号与密码进行判断,判断账号是否等于admin且密码是否等于admin888
    if username == 'admin' and password == 'admin888':
        print('恭喜您,登录成功!')
        break
    else:
        print('很抱歉,您的账号或密码输入有误,请重新输入!')
else:
    print('很抱歉,您的3次登录机会已用完,请10分钟以后再试!')

8、综合案例:报数字游戏(数7游戏)

(1)游戏规则
  • 一些同学从1开始报数,当需要报出的数字尾数是7或者该数字是7的倍数时,则该同学跳过这个数字,不进行报数。所有同学都参与游戏后,游戏结束。如输入学生数量为50,游戏结束后,报数的同学数量为39。
(2)代码实现
'''
报数字(数7游戏)
一些同学从1开始报数,当需要报出的数字尾数是7或者该数字是7的倍数时,则该同学跳过这个数字,不进行报数。所有同学都参与游戏后,游戏结束。如输入学生数量为50,游戏结束后,报数的同学数量为39。
假设班级中一共有15个同学:
1 2 3 4 5 6 过 8 9 10 11 12 13 过 15
需求分析:
① 提示用户手工输入班级中同学的数量
② 使用for循环,循环班级中的每一个同学编号(1 - 50)
③ 关键点:如何判断这个编号是7的倍数或者尾数为7呢(17、27、37)?
if i % 7 == 0   7的倍数
if i % 10 == 7  尾数为7   17 % 10 = 7  27 % 10 = 7  37 % 10 == 7
④ 满足条件③则执行continue跳过操作
⑤ 定义变量,用于计数,统计报数的同学
'''
# 第一步:提示用户手工输入班级中同学的数量
num = int(input('请输入班级中同学的数量:'))  # 50
count = 0
# 第二步:使用for循环,从1开始,循环到num
for i in range(1, num + 1):
    # 第三步:如何判断这个编号是7的倍数或者尾数为7呢?
    if i % 7 == 0 or i % 10 == 7:
        continue
    # 第四步:使用count += 1进行计数
    count += 1
# 第五步:当循环结束,打印count的值就代表参与数数的同学数量
print(f'游戏结束,一共有{count}个同学,参数计数!')

猜你喜欢

转载自blog.csdn.net/liyou123456789/article/details/135039184