三、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循环区别:
| 循环类型 | 特点 | 是否自定义循环条件 | 是否能无限循环 |
|---|---|---|---|
| while | while循环的循环条件是自定义的,自行控制循环条件 | 是 | 是 |
| for | for循环是一种”轮询”机制,是对一批内容进行”逐个处理 | 否 | 否(因为被处理数据集不可能无限大) |
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直接结束发工资

码字不易,如果大家觉得有用,请高抬贵手给一个赞让文章上推荐让更多的人看到吧,也可以评论提出意见让后面的文章内容越来越生动丰富。
本文深入讲解Python中的选择结构和循环结构,包括if语句、while循环及for循环的不同形式和应用案例,帮助读者掌握Python流程控制的核心技巧。

510

被折叠的 条评论
为什么被折叠?



