Python03 流程控制

Python03 流程控制

  • 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块
  • 流程控制主要分为三种
    • 顺序结构
    • 条件分支结构
    • 循环结构

3.1 顺序结构

程序从上至下依次逐行的执行,中间没有任何的判断和跳转的情况(比如咱们前面基础语法部分的代码案例)

a = 100
a += 1
# 输出101  a = a + 1,最终a = 100 + 1
print(a)

b = 2
b *= 3
# 输出6  b = b * 3,最终b = 2 * 3
print(b)

c = 10
c += 1 + 2
# 输出13, 先算运算符右侧1 + 2 = 3, c += 3 , 推导出c = 10 + 3
print(c)

3.2 条件分支结构

  • 单分支(if)
  • 双分支(if…else)
  • 多分支(if…elif…else)
  • if嵌套(if 或者 else 语句中 又包含了另一个 条件分支判断)

3.2.1 单分支(if语句)

格式:

if 条件表达式:
	条件成立执行的代码

注意:条件表达式结果 必须是 布尔类型

执行流程:

案例:输入年龄,判断是否是合法工龄

# 输入年龄
age = input("请输入年龄:")
# 判断是否是合法工龄
if 18<age<60print("合法工龄!")

3.2.2 双分支(if…else语句)

格式:

if 条件表达式 :
	条件成立执行的代码
else:
	条件不成立执行的代码

执行流程:

案例:输入一个整数,判断是偶数还是奇数

# 输入一个数据
num = input("请输入一个整数:")  
# 判断奇偶性==> 除 2 看余数是否为 0 
if num % 2 == 0:  
    print(f"{num} 是偶数")  
else:  
    print(f"{num} 是奇数")

3.2.3 多分支(if…elif…else 语句)

格式:

if 条件表达式 1:
   代码块 1
elif 条件表达式 2:
  代码块 2
elif 条件表达式 n:
代码块 n
else:
  以上条件都不满足执行的代码

一旦条件表达式为true,则进入执行相应的语句块

执行流程:

案例:

王者荣耀排位分段
王者选手       0  ~ 25  星 
无双王者       26 ~ 50  星 
荣耀王者       51 ~ 100
star = int(input("请输入您的星星数:"))  
if 0 < star <= 25:  
    print("王者选手")  
elif 26 < star <= 50:  
    print("无双王者")  
elif 50 < star <= 100:  
    print("荣耀王者")  
elif star > 100:  
    print("别瞎想了!最高 100 星!你个假选手")  
else:  
    print("啥都不是!回家学习吧!")

3.2.4 if 嵌套

if 或者 else 语句种 友包含了另一个 条件分支判断

假设需求:输入一个数字 判断是否是 10 以内的数字,然后判断 是否是 偶数

格式:

if 条件 1:
	if 条件 2 :
		满足条件 12 的语句
	else:
		不满足条件 2 的语句
else:
	不满足的语句

执行流程

案例实现:

# 输入数字  
num = input("请输入数字:")  
# 1、判断是否在 0~10if 0 <= num < 10:  
    # 2、判断是否是 偶数  
    if num % 2 == 0:  
        print(f"数字:{num},是偶数")  
    # 除 2 余数 不等于 2    else:  
        print(f"数字:{num},不是偶数")  
# 不满足条件 (num 不在 0~10 之间)  
else:  
    print(f"数字:{num},不在0~10之间!")

3.2.5 练习

1. 输入3个数,分别为 a 、b、c ,按照从小到大的顺序进行输出
2. 简单的登录操作,假设:用户名="root" , 密码="123456" ,输入用户名和密码进行登录
3. 数字猜谜(指定一个数据,用户输入所猜的数字)

实现

练习1:

# 输入3个数,分别为 a 、b、c ,按照从小到大的顺序进行输出  
"""  
从键盘输入数据方式 1 ,单个直接输入  
a=int(input("请输入第1个数据:"))  
b=int(input("请输入第2个数据:"))  
c=int(input("请输入第3个数据:"))  
"""  
  
"""  
从键盘输入数据方式 2 ,接收字符串再进行分割  
str = input("请输入3个数据,以,分割:")  
# split()分割  
new_str = str.split(",")  
# 或者切片  
new_str = str[::2]  
"""  
  
"""  
从键盘输入数据方式 3 ,eval()函数==》eval()函数用来执行一个字符串表达式,
并返回表达式的值。还可以把字符串转化为list、tuple、dict。  
"""  
a, b, c = eval(input("请输入3个数据,以,分割:"))  
# 判断 a 和 bif a > b:  
    # 如果 a>b ==> 判断 b 和 c    if b > c:  
        # 已知 a>b 且 b>c ==》a>b>c  
        print("排序后:", a, b, c)  
# 判断 a和 c ; 已知第一次 if 时 a<=b的 ,所以判断 a 和c  
elif a > c:  
    # 已知 a<=b 且 a>c ==>  b>a>c    print("排序后:", b, a, c)  
# 已知 前两次 判断 得出 a<=b 且 a<=c ==>所以 这里可以直接 判断 b和 celif b > c:  
    # 已知a<=b , a<=c 且 b<c ==> b>c>a    print("排序后:", b, c, a)  
# 不满足上面 3个条件==> a<=b , a<=c ,b<=c 推出==> c>b>a  
else:  
    print("排序后:", c, b, a)

eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。,比如用户恶意输入就会获得当前目录文件*

练习2:

# 2. 简单的登录操作,假设:用户名="root" , 密码="123456" ,输入用户名和密码进行登录  
user = "root"  
pwd = 123456  
  
# 输入数据  
user_input = input("用户名:")  
pwd_input = int(input("密 码:"))  
# 判断指定数据和输入数据是否相同  
if user == user_input and pwd == pwd_input:  
    print("登录成!")  
else:  
    print("用户名或密码错误!")

练习3:

# 3. 数字猜谜(指定一个数据,用户输入所猜的数字)  
  
num = 99  # 指定数字  
n = input("请猜数字:")  
# 比较大小  
if n > num:  
    print("猜大了!")  
elif n < num:  
    print("猜小了!")  
else:  
    print("恭喜!猜对了!")

3.2.6 拓展

Python 3.10 增加了 match…case 的条件判断,不需要再使用一连串的 if-else 来判断了。
match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切。

格式:

match 表达式:
    case 数据1:
        (表达式结果 == 数据1) 所执行的代码块
    case 数据2:
        同上
    case 数据3:
        同上
    case _:
        当其他的都不满足时 匹配 这个

case _: 类似于 C 和 Java 中的 default:,当其他 case 都无法匹配时,匹配这条,保证永远会匹配成功。

mystatus=400
match mystatus:  
	case 400:  
		return "Bad request"  
	case 404:  
		return "Not found"  
	case 418:  
		return "I'm a teapot"  
	case _:  
		return "Something's wrong with the internet"

3.3 循环结构

  • 概念:在 特定条件 之下,重复的 执行特定功能
  • 分类:
    • while 循环
    • for 循环
  • 结构要素:
    • 初始条件
    • 结束条件
    • 循环内容(重复的功能)
    • 迭代部分

3.3.1 while 循环

while循环是一个条件循环语句,当条件满足时重复执行代码块,直到条件不满足为止。

格式:

while 条件表达式:
    条件成立重复执行的代码1
    条件成立重复执行的代码2

结构分解:

1.初始条件
while 2.循环条件(条件是否成立/结束条件):
	3.循环体内容(重复执行的特定功能)
	4.迭代部分

执行流程:

案例:计算 10!(10的阶乘)

# 1.定义初始条件 从1开始计算阶乘  
i = 1  
# 2.定义变量 res 用于接收 每一次阶乘的结果  
res = 1  
# 3.条件:当 i>10时停止循环计算  
while i <= 10:  
    # 4.将每次阶乘结果赋值  
    res *= i  # ==> res=res*i  
    # 5.每次 计算了阶乘 就让 i+1i += 1  
print(res)

3.3.2 for 循环

Python for 循环可以 遍历任何可迭代对象,如一个列表或者一个字符串。

格式:

for 临时变量 in 可迭代对象:
    重复执行的语句1
    重复执行的语句2

结构分解:

for 1.初始化 in 2.循环条件+3.迭代部分 :
	3.循环体内容(重复执行的特定功能)

执行流程:

案例:计算 10!(10的阶乘)

# 定义变量 res 用于接收 每一次阶乘的结果  
res = 1  
for i in range(1, 11):  
    # 将每次阶乘结果赋值  
    res *= i  # ==> res=res*i  
print(res)

*拓展:range()函数
内置的函数,主要用于生成指定区间的数据
格式:range(开始,结束,步长)
案例:range(1,5,1) --> 步长为 1 可以不写 --> range(1,5)
结果:1,2,3,4
注意:range()函数 不会取到 结束位置

循环选择:

*遍历有明显的循环次数(范围)的需求,选择for循环
遍历没有明显的循环次数(范围)的需求,选择while循环

3.3.4 循环嵌套

*1. 指 一个循环结构A 的循环体是另一个 循环结构B。比如,for循环里面还有一个for循环,就是嵌套循环。其中,for ,while 均可以作为外层循环或内层循环。
2.嵌套循环就是把内层循环当成外层循环的循环体

以 for 嵌套 for 为例 (while或者其他情况同理)

结构:

for i in 序列:
	for j in 序列

执行流程:

案例:打印5行直角三角形

*
**
***
****
*****
# 外层循环 i 控制 行  
for i in range(1, 6):  
    # 内层循环 j 作为 列数控制  
    for j in range(1, i + 1):  
        # 打印* ,指定结尾  
        print("*", end="")  
    # 每行结束之后打印换行  
    print()

*技巧:

  1. 外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n
  2. 外层循环控制行数,内层循环控制列数
  3. 外层循环执行一次,内层循环执行一轮。
  4. 实际开发中,嵌套循环一般是两层。一般不会出现超过三层的嵌套循环(如果出现,请好好反思一下自己的逻辑)*

3.3.5 循环控制(break 和 continue)

break 和 continue 主要用于控制循环是否继续执行

  • break:停止整个循环,不再继续执行
  • continue:跳过(只停止)当前循环,继续执行下一次循环

案例:break

#遇到 e 不再打印(停止整个)
s = 'abcdefg'
for i in str1:
    if i == 'e':
        print('遇到e不再打印')
        break
    print(i)

案例:continue

#遇到 e 不打印(只停止当前)
s = 'abcdefg'
for i in str1:
    if i == 'e':
        print('遇到e不打印')
        continue
    print(i)

3.3.6 循环+else

循环可以和else配合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码

*注意:

  1. 有 break 时 :else指的是循环正常结束之后要执行的代码,如果是break终止循环的情况,else下方缩进的代码将不执行
  2. 有 continue 时 :continue 是退出当前一次循环,继续下一次循环,所以该循环在continue控制下是可以正常结束的,当循环结束后,则执行了else缩进的代码。

3.3.7 练习

1. 遍历1-100的偶数,并计算所有偶数的和、偶数的个数
2. 从键盘输入整数,输入0结束,统计输入的正数、负数的个数
3. 输出水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。例如: `153 = 1*1*1 + 3*3*3 + 5*5*5`
4. 输出任意位数的水仙花数据
5. 随机生成一个100以内的数,猜这个随机数是多少?
	从键盘输入数,如果大了提示,大了;
	如果小了,提示小了;
	如果对了,就不再猜了,
	并统计一共猜了多少次。

6. 打印"菱形"
        * 
      * * * 
    * * * * * 
  * * * * * * * 
* * * * * * * * * 
  * * * * * * * 
    * * * * * 
      * * * 
        * 	
7. 打印 99 乘法表
8. 将一天中的(偶数)的时间打印到控制台(x 时 xx 分 的形式)
9. 生成 1-100 之间的随机数,直到生成了 97 这个数,看看一共用了几次?
10. 某一年的某一个月的某一天,(比如:2023224日)你决定要改变了。
你立志于1天比你的小伙伴多学习 1 小时 ==> 请计算 两年之后的那个年底 你比你小伙伴总共多学习了 多少 小时?
但是假如你每天和小伙伴一起打一个小时王者荣耀排位赛,一小时打两把,输赢随机,但是会没每一个月都会被重置 。请计算 两年之后你和你小伙伴王者多少星
重置规则:
1. 0 < * < 35 重置到 钻石(王者 -15 颗星)
2. 35 <= * <50 重置到 星耀 (王者 -5 课星 )
3. 50 <= * <=100 重置到 王者 0 星

比如:输入-案例:
你觉醒的日子:2023224日
你的王者段位(王者多少*):25
========>
两年之后:
你多学习了 xx 小时
你的王者段位:xxx

*拓展:随机数 random模块
random 模块(需要导入:import random)
整数生成格式:random.randint(开始,结束)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值