Python学习路线 - Python语言基础入门 - 循环语句

前言

循环普遍存在于日常生活中,同样,在程序中,循环功能也是至关重要的基础功能。

在这里插入图片描述

为什么学习循环语句

循环在程序中同判断一样,也是广泛存在的,是非常多功能实现的基础:

在这里插入图片描述

在这里插入图片描述

while循环的基础语法

while循环语句

在这里插入图片描述

代码示例:

"""
演示while循环的基础应用
"""
i = 0
while i < 100:
    print("好好学习,天天向上")
    i += 1

while循环注意点

1.while的条件需得到布尔类型,True表示继续循环,False表示结束循环
2.需要设置循环终止的条件,如i += 1配合 i < 100,就能确保100次后停止,否则将无限循环
3.空格缩进和if判断一样,都需要设置

while循环的基础案例

练习案例:求1-100的和

需求:通过while循环,计算从1累加到100的和

提示:
1.终止条件不要忘记,设置为确保while循环100次
2.确保累加的数字,从1开始,到100结束

"""
演示while循环基础练习题:求1-100的和
"""

sum = 0
i = 1
while i <= 100:
    # sum += i
    sum = sum + i
    i += 1

print(f"1-100累加的和是:{sum}")

在这里插入图片描述

猜数字案例
设置一个范围1-100的随机整数变量,通过while循环,配合input语句,判断输入的数字是否等于随机数

  • 无限次机会,直到猜中为止

  • 每一次猜不中,会提示大了或小了

  • 猜完数字后,提示猜了几次

  • 提示:

  • 无限次机会,终止条件不适合用数字累加来判断

    • 可以考虑布尔类型本身(True or False)
  • 需要提示几次猜中,就需要提供数字累加功能

  • 随机数可以使用:
    import random
    num = random.randint(1,100)

在这里插入图片描述

代码示例:

"""
演示while循环的基础案例 -  猜数字
"""
# 获取范围在1-100的随机数字
import random
num = random.randint(1,100)

# 通过一个布尔类型的变量,做循环是否继续的标记
flag = True

# 定义一个变量,记录总共猜测了多少次
count = 0

while flag:
    guess_num = int(input("请输入你猜测的数字:"))
    if num == guess_num:
        print("猜中了")
        flag = False
    else:
        if num > guess_num:
            print("你猜的数小了")
        else:
            print("你猜的数大了")
    count += 1
print(f"你总共猜测了{count}次")

在这里插入图片描述

while循环的嵌套应用

while循环的嵌套

在这里插入图片描述

代码示例:

"""
演示while循环的嵌套使用
"""

# 外层:表白100天得到控制
# 内层:每天的表白都送10只玫瑰花的控制

i = 1
while i <= 100:
    print(f"今天是第{i}天,准备表白......")

    # 内层循环的控制变量
    j = 1
    while j <= 10:
        print(f"送给小美第{j}只玫瑰花")
        j += 1

    print("小美,我喜欢你")
    i += 1

print(f"坚持到第{i-1}天,表白成功。")

注意点

  • 同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进。
    • 基于空格缩进来决定层次关系
  • 注意条件的设置,避免出现无限循环(除非真的需要无限循环)

while循环的嵌套案例

补充知识 - print输出不换行

默认print语句输出内容会自动换行,如下图:
在这里插入图片描述

在即将完成的案例中,我们需要使用print语句,输出不换行的功能,非常简单,实现方式如下:
在这里插入图片描述

如上图,在print语句中,加上end=''即可输出不换行了

补充知识 - 制表符\t

在字符串中,有一个特殊符号:\t,效果等同于在键盘上按下:tab键。
它可以让我们的多行字符串进行对齐。

比如:

print("Hello World")
print("Mry best")

print("Hello\tWorld")
print("Mry123\tbest")

在这里插入图片描述

练习案例 - 打印九九乘法表

通过while循环,输出如下九九乘法表内容
在这里插入图片描述

"""
演示使用while的嵌套循环
打印输出九九乘法表
"""

# 定义外层循环的控制变量
i = 1
while i <= 9:

    # 定义内层循环的控制变量
    j = 1
    while j <= i:
        print(f"{j} * {i} = {i*j}\t",end='')
        j += 1

    print("")
    i += 1

for循环的基础语法

基础语法

for循环
除了while循环语句外,Python同样提供了for循环语句。
两者能完成的功能基本差不多,但仍有一些区别:

  • while循环的循环条件是自定义的,自行控制循环条件
  • for循环是一种"轮询"机制,是对一批内容进行"逐个处理"

在这里插入图片描述

for循环语句
在这里插入图片描述
代码示例:

"""
演示for循环的基础语法
"""

name = "haohaoxuexi"

for x in name:
    # 将name的内容,挨个取出赋予x零时变量
    # 就可在循环体内对x进行处理
    print(x)

可以看出,for循环是将字符串的内容:依次取出
所以,for循环也被称之为:遍历循环

注意点
同while循环不同,for循环是无法定义循环条件的。
只能从被处理的数据集中,依次取出内容进行处理。

所以,理论上讲,Python的for循环无法构建无限循环(被处理的数据集不可能无限大)

练习案例:数一数有几个a

定义字符串变量name,内容为:“mry is a brand of China”
通过for循环,遍历此字符串,统计有多少个英文字母:“a”
在这里插入图片描述
提示:
1.计数可以在循环外定义一个整数类型变量用来做累加计数
2.判断是否为字母"a",可以通过if语句结合比较运算符来完成

"""
演示for循环的练习题:数一数有几个a
"""

# 统计如下字符串中,有多少个字母a
name = "mry is a brand of China"

# 定义一个变量,用来统计有多少个a
count = 0

# for 循环统计
# for 临时变量 in 被统计的数据:
for x in name:
    if x == "a":
        count += 1

print(f"被统计的字符串中有{count}个a")

range语句

在这里插入图片描述
语法中的:待处理数据集,严格来说,称之为:序列类型
序列类型指,其中内容可以一个个依次取出的一种类型,包括:

  • 字符串
  • 列表
  • 元组

  • 目前我们只学了字符串类型,其余类型在后续章节会详细学习它们

for循环语句,本质上是遍历:序列类型
尽管除字符串外,其它的序列类型目前没学习到,但是不妨碍我们通过学习range语句,获得一个简单的数字序列

语法1
range(num)
获取一个从0开始,到num结束的数字序列(不含num本身)
如range(5)取得的数据是:[0,1,2,3,4]

语法2
range(num1,num2)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
如,range(5,10)取得的数据是:[5,6,7,8,9]

语法3
range(num1,num2,step)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
数字之间的步长,以step为准(step默认为1)
如,range(5,10,2)取得的数据是:[5,7,9]

"""
演示Python中的range()语句的基本使用
"""

# range语法1 range(num)
for x in range(10):
    print(x)

# range 语法2 range(num1,num2)
for x in range(5,10):
    # 从5开始,到10结束(不包含10本身)的一个数字序列
    print(x)

# range 语法3 range(num1,num2,step)
for x in range(5,10,2):
    # 从5开始,到10结束(不包含10本身)的一个数字序列,数字之间的间隔是2
    print(x)

练习案例:有几个偶数
定义一个数字变量num,内容随意
并使用range()语句,获取从1到num的序列,使用for循环遍历它。
在遍历的过程中,统计有多少偶数出现

提示:
1.序列可以使用:range(1, num)得到
2.偶数通过if来判断,判断数字余2是否为0即可

"""
演示1到100(不含100本身)范围内的偶数个数
"""

count = 0
num = range(1,100)
for x in num:
    if x % 2 == 0:
        count += 1

print(f"1到100(不含100本身)范围内,有{count}个偶数")

在这里插入图片描述

变量作用域

在这里插入图片描述

如图代码,思考一下:
红框中的print语句,能否访问到变量 i ?
在这里插入图片描述

for循环临时变量作用域

for 临时变量 in 待处理数据集:
循环满足条件时执行的代码

回看for循环的语法,我们会发现,将从数据集(序列)中取出的数据赋值给:临时变量
为什么是临时的呢?

临时变量,在编程规范上,作用范围(作用域),只限定在for循环内部

如果在for循环外部访问临时变量:

  • 实际上是可以访问到的
  • 在编程规范上,是不允许、不建议这么做的

代码示例:

"""
演示Python for循环临时变量的作用域
"""

for i in range(5):
    print(i)

print(i)

在这里插入图片描述

如果实在需要在循环外访问循环内的临时变量,可以在循环外预先定义:
在这里插入图片描述
如图,每一次循环的时候,都会将取出的值赋予i变量。

  • 由于i变量是在循环之前(外)定义
  • 在循环外访问i变量是合理的、允许的

注意点:
1.for循环中的临时变量,其作用域限定为:
循环内
2.这种限定:

  • 是编程规范的限定,而非强制限定
  • 不遵守也能正常运行,但是不建议这样做
  • 如需访问临时变量,可以预先在循环外定义它

for循环的嵌套应用

在这里插入图片描述

代码示例:

"""
演示嵌套应用for循环
"""

# 坚持表白100天,每天都送10朵花
# range
i = 0
for i in range(1,101):
    print(f"今天是向小美表白的第{i}天,加油坚持。")

    # 写内层的循环了
    for j in range(1, 11):
        print(f"给小美送的第{j}朵玫瑰花")

    print("小美我喜欢你")

print(f"第{i}天,表白成功")

注意点:
如图,和while循环一样,需要注意缩进
因为通过缩进,确定层次关系

总结:
1.for循环的嵌套语法:
见下图:
在这里插入图片描述

2.注意事项:

  • 需要注意缩进,嵌套for循环同样通过缩进确定层次关系
  • for循环和while循环可以相互嵌套使用

练习案例-for循环打印九九乘法表

通过for循环,输出如下九九乘法表内容
在这里插入图片描述

代码示例:

"""
演示for循环打印九九乘法表
"""

# 通过外层循环控制行数
for i in range(1,10):
    # 通过内层循环控制每一行的数据
    for j in range(1,i+1):
        # 在内层循环中输出每一行的内容
        print(f"{j} * {i} = {j * i}\t", end='')
    # 外层循环可以通过print输出一个回车符
    print()

循环中断:break和continue

continue

continue关键字用于:中断本次循环,直接进入下一次循环
continue可以用于:for循环和while循环效果一致
在这里插入图片描述

代码演示:

# 演示循环中断语句 continue
for i in range(1,6):
    print("语句1")
    continue
    print("语句2")

在这里插入图片描述

continue在嵌套循环中的应用

continue关键字只可以控制:它所在的循环临时中断
代码演示:

# 演示continue的嵌套应用
for i in range(1,6):
    print("语句1")
    for j in range(1,6):
        print("语句2")
        continue
        print("语句3")

    print("语句4")

输出结果:

D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\03_循环中断.py 
语句1
语句2
语句2
语句2
语句2
语句2
语句4
语句1
语句2
语句2
语句2
语句2
语句2
语句4
语句1
语句2
语句2
语句2
语句2
语句2
语句4
语句1
语句2
语句2
语句2
语句2
语句2
语句4
语句1
语句2
语句2
语句2
语句2
语句2
语句4

Process finished with exit code 0

break

break关键字用于:直接结束循环
break可以用于:for循环和while循环,效果一致
在这里插入图片描述

代码演示:

# 演示循环中断语句 break
for i in range(1, 101):
    print("语句1")
    break
    print("语句2")

print("语句3")

在这里插入图片描述

break在嵌套循环中的应用

break关键字同样只可以控制:它所在的循环结束

代码演示:

# 演示break的嵌套应用
for i in range(1,6):
    print("语句1")
    for j in range(1,6):
        print("语句2")
        break
        print("语句3")

    print("语句4")

结果输出:

D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\03_循环中断.py 
语句1
语句2
语句4
语句1
语句2
语句4
语句1
语句2
语句4
语句1
语句2
语句4
语句1
语句2
语句4

Process finished with exit code 0

总结
1.continue的作用是:
中断所在循环的当次执行,直接进入下一次
2.break的作用是:
直接结束所在的循环
3.注意事项:

  • continue和break,在for和while循环中作用一致
  • 在嵌套循环中,只能作用在所在的循环上,无法对上层循环起作用

综合案例

练习案例:发工资
某公司,账户余额有1W元,给20名员工发工资。
-员工编号从1到20,从编号1开始,依次领取工资,每人可领取1000元
-领工资时,财务判断员工的绩效分(1-10)(随机生成),如果低于5,不发工资,换下一位

  • 如果工资发完了,结束发工资。

提示:

  • continue用于跳过员工,break直接结束发工资
  • if判断余额,不要忘记发完工资后,余额减少1000哦

代码演示:

"""
演示循环综合案例:发工资
"""
import random
# 定义账户余额变量
money = 10000
# for循环对员工发放工资
for num in range(1,21):
    score = random.randint(1,10)
    # 判断余额足不足
    if money >= 1000:
        if score < 5:
            print(f"员工{num},绩效分{score},低于5,下一位")
            # continue跳过发放
            continue
        else:
            money -= 1000
            print(f"向员工{num}发放工资1000元,账户余额还剩余{money}元")
    else:
        print("工资发完了,下个月领取吧。")
        # break结束发放
        break

结果输出:

D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\04.py 
员工1,绩效分1,低于5,下一位
向员工2发放工资1000元,账户余额还剩余9000元
向员工3发放工资1000元,账户余额还剩余8000元
员工4,绩效分2,低于5,下一位
向员工5发放工资1000元,账户余额还剩余7000元
向员工6发放工资1000元,账户余额还剩余6000元
向员工7发放工资1000元,账户余额还剩余5000元
向员工8发放工资1000元,账户余额还剩余4000元
员工9,绩效分1,低于5,下一位
员工10,绩效分4,低于5,下一位
员工11,绩效分4,低于5,下一位
员工12,绩效分4,低于5,下一位
向员工13发放工资1000元,账户余额还剩余3000元
向员工14发放工资1000元,账户余额还剩余2000元
员工15,绩效分4,低于5,下一位
向员工16发放工资1000元,账户余额还剩余1000元
向员工17发放工资1000元,账户余额还剩余0元
工资发完了,下个月领取吧。

Process finished with exit code 0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值