从这节开始,开始使用开发工具来开发Python,因为交互式环境不方便编写代码,功能也不强大。
流程控制是为了控制代码的执行流程,好比人做事,要灵活。遇到不同的情况是否要执行,是否要重复执行,是否要批量执行(函数)。根据Python官网给出的流程控制知识点目录,函数也属于流程控制,但由于函数知识点庞大,留在下一章节详细讲解。
image.png

一、if 语句

最为人所知的就是 [if](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#if) 语句。例如:

  1. x = int(input("请输入一个整数: "))
  2. if x < 0:
  3. x = 0
  4. print('负数变为0')
  5. elif x == 0:
  6. print('Zero')
  7. elif x == 1:
  8. print('Single')
  9. else:
  10. print('More')
  • if 语句包含零个或多个 [elif](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#elif) 子句,及可选的 [else](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#else) 子句。关键字 ‘elif‘ 是 ‘else if’ 的缩写,适合用于避免过多的缩进。
  • If语句只会匹配一个表达式,一旦匹配上某一个,则结束匹配。

二、for 语句

遍历字符串

  1. s = 'hello'
  2. for i in s:
  3. print(i)

输出:
h
e
l
l
o

遍历列表/元组

元组和列表是类似的数据结构,遍历方式一样,这里演示遍历列表皆可

eg1.

  1. words = ['cat', 'window', 'defenestrate']
  2. for v in words:
  3. print(v, len(v))

输出:
cat 3
window 6
defenestrate 12

eg2.

  1. words = ['cat', 'window', 'defenestrate']
  2. for v in enumerate(words):
  3. print(v, len(v))

输出:
(0, ‘cat’) 2
(1, ‘window’) 2
(2, ‘defenestrate’) 2

eg3.

  1. words = ['cat', 'window', 'defenestrate']
  2. for k, v in enumerate(words):
  3. print(k,v, len(v))

输出:
0 cat 3
1 window 6
2 defenestrate 12

遍历字典

eg1.

  1. d = {'a': 1, 'b': 2}
  2. for v in d:
  3. print(v)

输出:
a
b

eg2.

  1. d = {'a': 1, 'b': 2}
  2. for v in d.values():
  3. print(v)

输出:
1
2

eg3.

  1. d = {'a': 1, 'b': 2}
  2. for k, v in d.items():
  3. print(k, v)

输出:
a 1
b 2

遍历组合序列

  1. L1 = ['a', 'b', 'c']
  2. L2 = ['d', 'e', 'f']
  3. for k, v in zip(L1, L2):
  4. print(k, v)

输出:
a d
b e
c f

三、[range()](https://docs.python.org/zh-cn/3.9/library/stdtypes.html#range) 函数

eg1.

语法格式:class range(start, stop[, step])

  1. for i in range(5):
  2. print(i)

输出:
0
1
2
3
4

eg2.

生成的序列不包含给定的终止数值;range(10) 生成 10 个值,这是一个长度为 10 的序列,其中的元素索引都是合法的。range 也能以另一个数字开头,或以指定的幅度递增(该幅度也可以是负数;称为 ‘步进’) :

  1. range(5, 10)
  2. 5, 6, 7, 8, 9
  3. range(0, 10, 3)
  4. 0, 3, 6, 9
  5. range(-10, -100, -30)
  6. -10, -40, -70

[range()](https://docs.python.org/zh-cn/3.9/library/stdtypes.html#range)[len()](https://docs.python.org/zh-cn/3.9/library/functions.html#len) 组合在一起,可以按索引遍历序列:

  1. >>> a = ['Mary', 'had', 'a', 'little', 'lamb']
  2. >>> for i in range(len(a)):
  3. ... print(i, a[i])
  4. ...
  5. 0 Mary
  6. 1 had
  7. 2 a
  8. 3 little
  9. 4 lamb

四、while语句

[while](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#while) 语句用于在表达式保持为真的情况下重复地执行:

  1. count = 0
  2. while (count < 5):
  3. print('The count is:', count)
  4. count = count + 1
  5. print("Good bye!")

输出:
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
Good bye!

五、多层循环

多个for、多个while、for+while等形式

  1. for i in range(1, 3):
  2. for j in range(4, 6):
  3. print(i, j)

输出:
1 4
1 5
2 4
2 5

六、循环+判断

for+if

  1. for i in range(1, 5):
  2. for j in range(2, 6):
  3. if i > j:
  4. print(i, j)

输出:
3 2
4 2
4 3

while+if

  1. count = 0
  2. while (count < 5):
  3. print('The count is:', count)
  4. count = count + 1
  5. for b in range(5):
  6. if count + b > 8:
  7. print('count + b > 8,为: ', count + b)
  8. print("Good bye!")

输出:
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
count + b > 8,为: 9
Good bye!

七、breakcontinue

break

[break](https://docs.python.org/zh-cn/3.9/reference/simple_stmts.html#break) 语句和 C 中的类似,用于跳出最近的 [for](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#for)[while](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#while) 循环。

  1. for i in range(2, 6):
  2. print(i)
  3. if i > 3:
  4. break

输出:
2
3
4

  1. for i in range(1, 5):
  2. for j in range(2, 6):
  3. if i > j:
  4. print(i, j)
  5. break

输出:
3 2
4 2

  1. count = 0
  2. while True:
  3. print('The count is:', count)
  4. count = count + 1
  5. if count >= 5:
  6. break
  7. print("Good bye!")

输出:
The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
Good bye!

continue

[continue](https://docs.python.org/zh-cn/3.9/reference/simple_stmts.html#continue) 在语法上只会出现于 [for](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#for)[while](https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#while) 循环所嵌套的代码中, 它会忽略本次循环[continue](https://docs.python.org/zh-cn/3.9/reference/simple_stmts.html#continue) 后面的代码,继续执行最近的外层循环的下一个轮次。

  1. for num in range(2, 5):
  2. if num % 2 == 0:
  3. print("发现一个偶数", num)
  4. continue
  5. print("发现一个奇数", num)

输出:
发现一个偶数 2
发现一个奇数 3
发现一个偶数 4

  1. for i in range(2):
  2. for num in range(2, 5):
  3. if num % 2 == 0:
  4. print("发现一个偶数", i,num)
  5. continue
  6. print("发现一个奇数", i,num)

输出:
发现一个偶数 0 2
发现一个奇数 0 3
发现一个偶数 0 4
发现一个偶数 1 2
发现一个奇数 1 3
发现一个偶数 1 4

八、pass 语句

[pass](https://docs.python.org/zh-cn/3.9/reference/simple_stmts.html#pass) 语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它。例如:

  1. >>> while True:
  2. ... pass # 忙-等待键盘中断 (Ctrl+C)
  3. ...

这通常用于创建最小的类:
>>> class MyEmptyClass:
pass
[pass](https://docs.python.org/zh-cn/3.9/reference/simple_stmts.html#pass) 的另一个可以使用的场合是在你编写新的代码时作为一个函数或条件子句体的占位符,允许你保持在更抽象的层次上进行思考。 pass 会被静默地忽略:

  1. >>> def initlog(*args):
  2. ... pass # Remember to implement this!
  3. ...