控制流程

控制流程

Yiuhang Chan

条件判断

前置知识:Input方法

在 Python 中,input()是一个内置函数,用于从标准输入中获取用户输入的数据

注意

  1. 输入的值是字符串类型
  2. 如果想输入是整数 那就需要进行类型转换

a = int(input("请输入想输入的内容'))

1
2
3
4
# 变量a 就存储着用户输入的数据
a = input('请输入想输入的内容 )
# 当我们输入完后可以通过print将输入的内容打印出来
print(a)

什么是条件判断

条件判断是编程中一种非常常见的控制结构,它可以帮助我们根据不同的条件来执行不同的代码。可以把它想象成我们生活中的决策过程。

判断的过程中,比较的类型需要一样,例如都是数值类型

1. 语法:

1
2
3
4
5
6
7
8
if 判断条件:
# 执行语句....
else:
# 执行语句....

# if:如果
# else 否则
# if 可以单独存在,如果不满足就不会执行if里面的代码,但会继续执行if外面的代码

2. 案例 1

假如天气晴朗,我就去打篮球,否则我就去看电影。

1
2
3
4
5
6
# 定义一个a变量 存储今天的天气
a = input('输入今天的天气:')
if a == '晴天': # == 是否等于
print('今天是晴天,我要出去打篮球')
else:
print('今天是下雨天,我要去看电影')

3. 案例 2

随意输入0-100的整数,如果大于60 就在控制台返回 会当凌绝顶一览众山小 如果小于60就返回 三十年河东三十年河西 莫欺少年穷

1
2
3
4
5
a = int(input('随意输入0-100的整数:'))
if a > 60:
print('会当凌绝顶一览众山小')
else:
print('三十年河东三十年河西 莫欺少年穷')

多个条件判断

1. 什么是多个条件判断

有些时候,我们的判断语句不可能只有两个,有些时候需要多个,比如说大于等于 60 的为及格,那我们还要判断大于等于 90 的为优秀,在 80 到 90 之间的良好呢?

这时候需要用到 if 语句多个判断条件

2. 语法

1
2
3
4
5
6
7
8
9
10
11
12
if 判断条件1:
# 执行语句1.....
elif 判断条件2:
# 执行语句2.....
elif 判断条件3:
# 执行语句3.....
else:
# 执行语句4.....

# if:如果
# elif:或者
# else 否则

3. 案例 1

1
2
3
4
5
6
7
8
9
a = int(input('请输入分数'))
if a >= 90:
print('优秀')
elif a >= 80:
print('良好')
elif a >= 60:
print('及格')
else:
print('恭喜 没有及格 )

4. 案例 2

有时候我们会遇到多个条件的时候该怎么操作呢?

比如说:学校举行一场考试,要求小明的python和java两门语言 都达到80分才算优秀。

  • 这时候我们可以结合 or 和 and 来使用。
  • or (或)表示两个条件有一个成立时判断条件成功
  • and (与)表示只有两个条件同时成立的情况下,判断条件才成功。
1
2
3
4
5
6
7
python = int(input('请输入python分数'))
java = int(input('请输入java分数'))
# 当我们输入完 我们的变量python和java就分别存储着 python和java的分数
if python >= 80 and java >= 80:
print('优秀')
else:
print('不优秀')
1
2
3
4
5
6
7
8
python = int(input('请输入python分数'))
java = int(input('请输入java分数'))
# 当我们输入完 我们的变量python和java就分别存储着 python和java的分数
# 将and改为or 就意味着 只需要一个条件满足就是优秀
if python >= 80 or java >= 80:
print('优秀')
else:
print('不优秀')

嵌套

1. 嵌套是指什么

就跟字面意思差不多,指 if 语句中可以嵌套 if 语句。

2. 案例 1

小明,平时正常上班太累了,到了周末如果是晴天,那就出去打篮球,如果不是那就在家看电视

1
2
3
4
5
6
7
8
9
10
11
# 定义一个变量来保存今天是不是周末
# 定义一个变量b来保存今天的天气
a = '周末'
b = '晴'
if a == '周末':
if b == '晴':
print('今天是周末,又是晴天可以去打篮球')
else:
print('今天是周末,但是下雨在家乖乖看电视')
else:
print('乖乖上班')

match…case

Python 3.10 引入了 match...case 语句,提供了一种更加结构化和可读性更强的方式来进行条件判断。这个新特性使得编写复杂的条件逻辑变得更加简单和直观,是 Python 对模式匹配功能的实现。以下是对 match...case 语句的使用方法和特点的详细解析。

基本语法

match...case 语句的基本语法如下:

1
2
3
4
5
6
7
8
9
match subject:
case 条件1:
<action_1>
case 条件2:
<action_2>
case 条件3:
<action_3>
case _:
<action_wildcard>
  • match 后面跟着的是要匹配的对象(subject)。
  • case 后面定义了匹配的条件,如果 subject 满足某个条件,则执行该 case 下的代码块。
  • **_**(通配符)用于匹配所有未被前面的 case 匹配的情况。

多条件匹配

一个 case 语句可以包含多个用管道符(|)隔开的匹配条件,如果 subject 与其中任何一个条件相匹配,则执行该 case 下的代码块。

1
2
3
4
5
6
7
match subject:
case 条件1 | 条件2:
<action_1_2>
case 条件3:
<action_3>
case _:
<action_wildcard>

使用场景

match...case 语句适用于需要基于一个对象的值或类型进行多个条件判断的场景。它使得代码更加清晰易读,特别是在处理复杂的条件逻辑时,相比于传统的多层 if-else 语句,提供了更好的可读性和效率。

示例

以下是一个使用 match...case 语句的示例,根据不同的水果名称打印相应的颜色:

1
2
3
4
5
6
7
8
9
10
fruit = "apple"
match fruit:
case "apple":
print("red")
case "banana":
print("yellow")
case "orange":
print("orange")
case _:
print("Unknown color")

注意

  • match...case 语句是 Python 3.10 及以后版本的新特性,在此之前的版本中不可用。
  • 使用 match...case 时,需要确保 case 后的条件覆盖了所有可能的情况,或者使用通配符 _ 来处理未匹配到的情况。

三目运算

  1. 也叫三元运算符,是一种简洁的条件语句表达式。它可以根据条件的成立与否来返回两个值中的一个。

作用:简化代码

  1. 之前案例,今天学校期末数学考试(60分及格),小明考了66分,请问小明是及格还是没有及格。
1
2
3
4
5
6
7
8
9
# 定义一个变量a 来保存小明的数学成绩
a = 66
# 三目运算
print('及格') if a > 6 else print('不及格')
# 普通的if判断
if a > 60:
print('及格')
else:
print('不及格')

循环语句

Python 提供了 for 循环和 while 循环(在 Python 中没有 do..while 循环):

循环类型 描述
while 循环 在给定的判断条件为 true 时执行循环体,否则退出循环体。
for 循环 重复执行语句
嵌套循环 你可以在while循环体中嵌套for循环

循环控制语句

循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句:

控制语句 描述
break 语句 在语句块执行过程中终止循环,并且跳出整个循环
continue 语句 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass 语句 pass是空语句,是为了保持程序结构的完整性。

1. 什么是循环

可以让程序自动地执行多次相同或类似的任务,从而节省编写代码的时间和精力。

一共有两种循环:

  • for循环
  • while循环

2. for循环

可以遍历一个序列或其他可迭代对象中的元素,并执行特定的代码块。

语法
1
2
for 形参 in 遍历对象: 	
print(形参)

信息

对象(Objects)

在Python中,几乎所有东西都是对象。这包括数字、字符串、列表、函数,甚至是类和类型本身。每个对象都有三个特性:身份、类型和值。

  • 身份:每个对象都有一个唯一的身份,用于区分不同的对象。可以通过 id() 函数来查看对象的身份。
  • 类型:对象的类型定义了它可以进行哪些操作或拥有哪些方法。类型可以通过 type() 函数查看。
  • 值:对象表示的数据。

形参(Formal Parameters)

当定义一个函数时,可以在函数定义中指定一些参数。这些参数被称为形式参数(形参),它们是函数内部的局部变量。当函数被调用时,形参会接收传递给函数的实际值。这些值被称为实参(实际参数)。

例如:

1
2
def add(a, b):  # a 和 b 是形参
return a + b

在这个例子中,ab 是形参,它们在函数 add 被调用时接收实际的输入值。

案例
1
2
3
4
5
6
7
8
9
10
11
# 案例: 将List的内容全部打印出来
# 定义一个列表List
list = ['苹果', '香蕉', '梨子']
# 以前
print(list[0])
print(list[1])
print(list[2])
# 如果List里面有1000 个值呢,是不是要写一干遍
# 我们学习for循环后
for item in list:
print(item)
range函数

Python 中的 range() 函数是一个非常有用的工具,用于生成一个不可变的数值序列。与 for 循环结合使用时,range() 使得遍历数字序列变得简单高效。这个函数在数据迭代、循环执行等多种场景下都有广泛应用。

功能和用法
  • 生成数字序列range() 可以生成一个从起始值到终值(不包含终值),按照指定步长的数字序列。
基本语法
1
2
range(stop)
range(start, stop[, step])
  • **start**:序列的起始值,默认为0。
  • **stop**:序列的终止值,生成的序列不包含此值。
  • **step**:序列中每个数之间的差(步长),默认为1。当步长为正时,序列按升序排列;步长为负时,序列按降序排列。
示例
  • 基本遍历
1
2
for i in range(5):
print(i) # 输出 0 到 4
  • 指定区间的值
1
2
for i in range(5, 9):
print(i) # 输出 5 到 8
  • 指定步长
1
2
for i in range(0, 10, 2):
print(i) # 输出 0, 2, 4, 6, 8
  • 反方向迭代
1
2
for i in range(0, -8, -2):
print(i) # 输出 0, -2, -4, -6
访问和转换
  • 通过下标访问
1
2
a = range(1, 3)
print(a[0], a[1]) # 输出 1 2
  • 转换为列表、元组、集合
1
2
3
4
5
6
a = list(range(0, -8, -2))
b = tuple(range(0, -8, -2))
c = set(range(0, -8, -2))
print(a) # 输出 [0, -2, -4, -6]
print(b) # 输出 (0, -2, -4, -6)
print(c) # 输出 {0, -2, -4, -6}
结合 len() 遍历序列索引
1
2
3
a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a)):
print(i, a[i])
列表、元组、集合、字典、字符串的for循环的使用案例

列表、元组、集合、字典、字符串皆为 数值类型,详细内容与调用方法跳转查阅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 列表
List_test = ['香蕉', '苹果', '梨子']
for item in List_test:
print(item)
# 香蕉
# 苹果
# 梨子


# 元组
tuple_test = ('香蕉', '苹果', '梨子')
for item in tuple_test:
print(item)
# 香蕉
# 苹果
# 梨子


# 集合
set_test = {'香蕉', '苹果', '梨子'}
for item in set_test:
print(item)
# 香蕉
# 苹果
# 梨子


# 字典
dict_test = {
"username": 'user',
'age': 25
}
for item in dict_test:
# 在字典中 item:key
print(item)
# 如果想拿到vaLue的值 : List[item]
print(item, dict_test[item])
# username
# username user
# age
# age 25


#字符串
str_test = 'hello word'
for item in str_test:
print(item)
# h
# e
# l
# l
# o

# w
# o
# r
# d
双层for循环

也可以用于遍历嵌套的数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 列表里面包字典,这是开发最常见的一种数据方式,我们需要把里面的数据给拿出来
list_dic = [{
'username': 'users1',
'age': 18
}, {
'username': 'users2',
'age': 20
}]

# 第一层for循环遍历出两个字典
for item in list_dic:
# 第二层for循环遍历出字典里面的值
for i in item: # 通过i形参就是传递出字典里的值
# item就是字典本身,通过遍历item获取value
print(i, item[i]) # items 就是拿到了,item字典里面的key

# username users1
# age 18
# username users2
# age 20

3. while循环

常见的循环结构,它可以在条件满足的情况下重复执行一段代码块,直到条件不再满足为止。

语法
1
2
while 判断条件: 
输出内容
案例
1
2
3
4
5
6
7
a = 11
while a > 10:
# 这样会陷入无尽的循环 因为a会一直大于 10 这个时候
print('a大于10 这行代码就会一直运行')
break #我们可以用break来终止

# a大于10 这行代码就会一直运行
1
2
3
4
5
6
7
8
a = 8
while a < 10:
# 可以在循环里面加改变条件的运算 让循环变成 有限循环 而不是无限循环
a += 1
print('aaaaaaa')

# aaaaaaa
# aaaaaaa

QA

问:

break用于退出当前循环?

答:

在Python中,break 语句用于立即退出循环,无论是 for 循环还是 while 循环。一旦执行了 break,循环将完全终止。

问:

for对可迭代对象进行遍历

答:

for 循环在Python中用于遍历可迭代对象(如列表、字符串、元组等),对其中的每个元素执行循环体内的语句。

问:

breakcontinue必须成对出现

答:

这个说法是错误的。breakcontinue 是两个不同的循环控制语句,它们可以独立使用。break 用于完全退出循环,而 continue 用于跳过当前循环的剩余部分并继续执行下一次循环迭代。它们没有必须成对出现的要求。

问:

continue是退出当前循环,继续下一轮循环

答:

这个说法是正确的,但需要稍微澄清。continue 语句并不是退出整个循环,而是结束当前的循环迭代,并立即开始下一次的迭代。如果是在 for 循环中使用 continue,则会跳到循环的下一个元素;如果是在 while 循环中,会重新评估循环条件。

  • 标题: 控制流程
  • 作者: Yiuhang Chan
  • 创建于 : 2018-08-02 11:13:45
  • 更新于 : 2024-02-28 18:49:00
  • 链接: https://www.yiuhangblog.com/2018/08/02/20180802流程控制/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论