三、python的选择结构和循环结构--附代码案例

本文深入讲解Python中的选择结构和循环结构,包括if语句、while循环及for循环的不同形式和应用案例,帮助读者掌握Python流程控制的核心技巧。


python语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。

3.1 选择结构

在这里插入图片描述

3.1.1 if语句

请添加图片描述

# 语法:
if 要判断的条件:
	条件成立时,要做的事情1	# 归属于if判断的代码语句块,需在前方填充4个空格缩进。
	条件成立时,要做的事情2	# 代码块归属于成功条件下

Python通过缩进判断代码块的归属(层次)关系,缩进的代码是归属于距离自己上面最近的、没有缩进的代码。其中缩进是4个空格或者tab键。
在这里插入图片描述

3.1.2 if…else语句

# 语法:
if 要判断的条件:
	条件成立时,要做的事情1		# 代码块归属于成功条件下
	条件成立时,要做的事情2		# 代码块归属于成功条件下
	......
else:							# else不需要缩进,因为else不属于if,跟if同级,且else不需要条件,只要if不成立,就执行else
	条件不成立时,要做的事情1	# 代码块归属于不成功条件下
	条件不成立时,要做的事情2	# 代码块归属于不成功条件下
	......

请添加图片描述

3.1.3 if…elif…else语句

# 语法:
if 要判断的条件:
	条件A成立时,要做的事情1		# 代码块归属于条件A下
	条件A成立时,要做的事情2		# 代码块归属于条件A下
	......
elif:
	条件B成立时,要做的事情1	# 代码块归属于条件B下
	条件B成立时,要做的事情2	# 代码块归属于条件B下
......
elif:
	条件N成立时,要做的事情1	# 代码块归属于条件N下
	条件N成立时,要做的事情2	# 代码块归属于条件N下
	......
else:
	条件都不成立时,要做的事情1	# 代码块归属于都不成功条件下
	条件都不成立时,要做的事情2	# 代码块归属于都不成功条件下
	......

请添加图片描述
注意:①判断是互斥且按照从上到下的顺序。
②else也可以省略不写,效果等同3个独立的if判断。
在这里插入图片描述
代码优化:①减少变量的定义;②减少内存占用;③不需要输入每个变量值,只要有一个成功,可以直接结束判断。
在这里插入图片描述

3.1.4 判断语句的嵌套

# 语法:
if 要判断的条件A:
	条件A成立时,要做的事情1		# 代码块归属于条件A下
	条件A成立时,要做的事情2		# 代码块归属于条件A下
	......
	if 要判断的条件B:			# B条件也归属于条件A,形参嵌套
		条件B成立时,要做的事情1
		条件B成立时,要做的事情2
......
# 定义一个数字(1~10,随机产生),通过3次判断来猜出来数字,①数字随机产生,范围1-10;②有3次机会猜测数字,通过3层嵌套判断实现;③每次猜不中,会提示大了或小了。
# 1. 构建一个随机的数字变量
import random                   # 导入随机数库
num = random.randint(1, 10)     # 通过randint()函数创建1-10之间的随机数

guess_num = int(input("输入你要猜测的数字:"))
# 2. 通过if判断语句进行数字的猜测
if guess_num == num:
    print("恭喜,第一次就猜中了")
else:
    if guess_num > num:
        print("你猜测的数字大了")
    else:
        print("你猜测的数字小了")

    guess_num = int(input("再次输入你要猜测的数字:"))
    if guess_num == num:
        print("恭喜,第二次猜中了")
    else:
        if guess_num > num:
            print("你猜测的数字大了")
        else:
            print("你猜测的数字小了")

        guess_num = int(input("第三次输入你要猜测的数字:"))
        if guess_num == num:
            print("第三次猜中了")
        else:
            print("三次机会用完了,没有猜中。")

3.2 循环结构

在这里插入图片描述
循环主要分为while循环和for循环。

3.2.1 while循环

# 语法:
1、定义一个循环变量
while 条件:
	2、通过缩进确定层次关系,输入需要循环的表达式
	执行的语句1
	执行的语句1
	......
	执行的语句n
	3、输入循环变量的变化,配合循环条件设置一个中止条件,否则会变成无限循环
# 案例1:求1-100的累加
sum = 0
i = 1
while i<=100:
    sum += i
    i += 1
print(f"1-100累加的和是:{sum}")
# 案例2:优化第三章判断语句的嵌套的猜数字案例,解决代码的冗余。
import random                   # 导入随机数库
num = random.randint(1, 10)     # 通过randint()函数创建1-10之间的随机数

i = 1
while i < 4:
    guess_num = int(input("输入你要猜测的数字:"))
    # 2. 通过if判断语句进行数字的猜测
    if guess_num == num:
        print(f"恭喜,第{i}次就猜中了")
        break
    else:
        if guess_num > num:
            print("你猜测的数字大了")
        else:
            print("你猜测的数字小了")
    i += 1
    if i > 3:
        print("三次机会用完了,没有猜中。")
# 案例3:设置一个范围1-100的随机整数变量,通过while循环,配合input语句,判断输入的数字是否等于随机数:①无限次机会,直到猜中为止;②每一次猜不中,会提示大了或小了;③猜完数字后,提示猜了几次
import random
num = random.randint(1, 100)
count = 0		# 定义一个变量,记录总共猜测了多少次

flag = True		# 通过一个布尔类型的变量,做循环是否继续的标记
while flag:
    guess_num = int(input("请输入你猜测的数字:"))
    count += 1
    if guess_num == num:
        print("猜中了")
        flag = False	# 无限次机会,终止条件不适合用数字累加来判断,设置为False就是终止循环的条件
    else:
        if guess_num > num:
            print("你猜的大了")
        else:
            print("你猜的小了")
print(f"你总共猜测了{count}次")
# 案例4:设计拍桌子游戏,1-50内数字为7的倍数或者个位是7的人不能喊出来,只是拍桌子;其他数的人只能喊出来,不能拍桌子。
i = 1
while i < 50:
    if i % 7 == 0 or i % 10 == 7:
        print("拍桌子")
    else:
        print(i,end='\t')
    i += 1

在这里插入图片描述

# 案例5:打印出100-1000内的水仙花数
import math
num = 100
while num < 1000:
    a = num // 100
    b = num // 10 % 10
    c = num % 10
    if pow(a,3) + pow(b,3) + pow(c,3) == num:
        print(f"{a}*{a}*{a}+{b}*{b}*{b}+{c}*{c}*{c}={num}")
    num += 1

在这里插入图片描述

3.2.2 while循环的嵌套

同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进,也是基于空格缩进来决定层次关系。

# 九九乘法表
i = 1				# 外层循环:控制行的数量(9行)
while i < 10:
    j = 1			# 内层循环,控制每一行输出的循环(j <= i)
    while j <= i:
        print(f"{j}*{i}={j*i}",end='\t')
        j += 1
    print()			# 换行
    i += 1

在这里插入图片描述

3.2.3 for循环

# 语法1
for 临时循环变量 in 序列:
	循环语句1
	循环语句2
	......
# 功能:对序列(字符串、列表、元组)里的数据逐个取出,每一次循环就将当前的数据赋值给临时变量,执行循环体代码

语法2:for 临时循环变量 in range(num1, num2):
功能:获取一个从num1开始,到num2结束(不包括num2)的数字序列,每一次循环就将当前的数据赋值给临时变量。

举例:range(1, 5)取得的数据是:[1, 2, 3, 4]。
语法3:for 临时循环变量 in range(num2):
功能:获取一个从0开始,到num2结束==(不包括num)==的数字序列,每一次循环就将当前的数据赋值给临时变量。其中num1不写默认为0。
举例:range(5)取得的数据是:[0, 1, 2, 3, 4]。
语法4:for 临时循环变量 in range(num1, num2, step):
功能:获取一个从num1开始,到num2结束(不包括num2)的数字序列,步长(数据间隔)为step,默认为1,每一次循环就将当前的数据赋值给临时变量。
举例:range(1, 5, 2)取得的数据是:[1, 3]。
作用域问题:临时循环变量i在定义在循环的内部,规范上来说是只能在循环体内部访问,但是python语言在循环体外部也能访问,只是代码会给个警告,提示变量没有在(外部)定义。解决方案就是在循环语句之前定义循环变量。

for i in range(5):	# 临时循环变量i在定义在循环的内部
    print(i)		# 作用域在内部
print(i)			# 出现阴影,提示警告:i没有定义,虽然不报错,但不规范

解决办法:在判断语句之前定义变量。

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

while循环跟for循环区别:

循环类型特点是否自定义循环条件是否能无限循环
whilewhile循环的循环条件是自定义的,自行控制循环条件
forfor循环是一种”轮询”机制,是对一批内容进行”逐个处理否(因为被处理数据集不可能无限大)

3.2.4 for循环的嵌套

# 九九乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print(f"{j}*{i}={j*i}",end='\t')
    print()
# 时间制作
import time     # 时钟库
import os		# 系统库
hour = 0
minute = 0
second = 0
for hour in range(0,24):
    for minute in range(0,60):
        for second in range(0,60):
            os.system("cls")    # 清屏操作
            print("%02d:%02d:%02d\n" % (hour, minute, second))
            time.sleep(1)		# 睡眠1秒

注意:pycharm没有实现清屏,但是在命令行执行可以实现清屏。
在这里插入图片描述
注意:for循环和while循环之间也可以相互嵌套。

3.2.5 循环中断:break和continue

continue关键字:中断本次循环,直接进入下一次循环。如果是嵌套循环,则中断continue所归属的循环,直接进入下一次循环continue所归属的循环。
break关键字:直接结束循环。如果是嵌套循环,则结束break所归属的循环。

# 案例:某公司,账户余额有1W元,给20名员工发工资。
# 员工编号从1到20,从编号1开始,依次领取工资,每人可领取1000元。
# 领工资时,财务判断员工的绩效分(1-10)(随机生成),如果低于5,不发工资,换下一位。
# 如果工资发完了,结束发工资。
import random
salary = 10000
for employee in range(1, 21):			# for循环对员工发工资
    performance = random.randint(1, 10)
    if performance < 5:					# 绩效判断
        print(f"员工{employee},绩效分{performance},不发工资,下一位")
        continue						# continue用于跳过员工工资发放
    if salary >= 1000:					# 判断余额够不够
        print(f"向员工{employee}发放工资1000元,账户余额还剩余{salary}")
        salary -= 1000
    else:
        print("工资发完了,下个月领取吧")
        break							# break直接结束发工资

在这里插入图片描述

码字不易,如果大家觉得有用,请高抬贵手给一个赞让文章上推荐让更多的人看到吧,也可以评论提出意见让后面的文章内容越来越生动丰富。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值