1
0
wiki/docs/开发/Python/流程控制语句.md

167 lines
4.5 KiB
Markdown
Raw Normal View History

2022-01-26 20:44:41 +08:00
---
2022-02-09 19:39:42 +08:00
id: 流程控制语句
title: 流程控制语句
2022-01-26 20:44:41 +08:00
sidebar_position: 2
2022-02-09 19:39:42 +08:00
data: 2022年2月9日
2022-01-26 20:44:41 +08:00
---
2022-02-10 16:12:12 +08:00
## 判断语句
2022-01-26 20:44:41 +08:00
2022-02-10 16:12:12 +08:00
### if
在Python中要构造分支结构可以使用`if`、`elif`和`else`关键字。
2022-01-26 20:44:41 +08:00
```python
"""
用户身份验证
Version: 0.1
Author: 骆昊
"""
2022-02-10 16:12:12 +08:00
2022-01-26 20:44:41 +08:00
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 用户名是admin且密码是123456则身份验证成功否则身份验证失败
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
```
当然如果要构造出更多的分支,可以使用`if...elif...else...`结构或者嵌套的`if...else...`结构。
2022-02-10 16:12:12 +08:00
### match
2022-01-26 20:44:41 +08:00
2022-02-10 16:12:12 +08:00
match 语句接受一个表达式并将它的值与以一个或多个 case 语句块形式给出的一系列模式进行比较。 这在表面上很类似 C, Java 或 JavaScript (以及许多其他语言) 中的 switch 语句,但它还能够从值中提取子部分 (序列元素或对象属性) 并赋值给变量。
2022-01-26 20:44:41 +08:00
2022-02-10 16:12:12 +08:00
```python
def http_error(status):
match status:
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"
```
2022-01-26 20:44:41 +08:00
2022-02-10 16:12:12 +08:00
最后一个代码块: "变量名" `_` 被作为 *通配符* 并必定会匹配成功。 如果没有任何 case 语句匹配成功,则任何分支都不会被执行。
2022-01-26 20:44:41 +08:00
2022-02-10 16:12:12 +08:00
你可以使用 `|` (“ or ”)在一个模式中组合几个字面值:
```python
case 401 | 403 | 404:
return "Not allowed"
```
## 循环语句
### for
Python 的 for 语句与 C 或 Pascal 中的不同。Python 的 for 语句不迭代算术递增数值(如 Pascal或是给予用户定义迭代步骤和暂停条件的能力如 C而是迭代列表或字符串等任意序列元素的迭代顺序与在序列中出现的顺序一致。
2022-01-26 20:44:41 +08:00
```python
"""
用for循环实现1~100求和
Version: 0.1
Author: 骆昊
"""
sum = 0
for x in range(101):
sum += x
print(sum)
```
2022-02-10 16:12:12 +08:00
`range(101)`可以用来构造一个从1到100的范围当我们把这样一个范围放到`for-in`循环中,就可以通过前面的循环变量`x`依次取出从1到100的整数。当然`range`的用法非常灵活,下面给出了一个例子:
- `range(101)`可以用来产生0到100范围的整数需要注意的是取不到101。
- `range(1, 101)`可以用来产生1到100范围的整数相当于前面是闭区间后面是开区间。
- `range(1, 101, 2)`可以用来产生1到100的奇数其中2是步长即每次数值递增的值。
- `range(100, 0, -2)`可以用来产生100到1的偶数其中-2是步长即每次数字递减的值。
### while
2022-01-26 20:44:41 +08:00
2022-02-10 16:12:12 +08:00
如果要构造不知道具体循环次数的循环结构,那么使用`while`循环通过一个能够产生或转换出`bool`值的表达式来控制循环,表达式的值为`True`则继续循环;表达式的值为`False`则结束循环。
2022-01-26 20:44:41 +08:00
```python
"""
猜数字游戏
Version: 0.1
Author: 骆昊
"""
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
```
2022-02-10 16:12:12 +08:00
### break
break 语句和 C 中的类似,用于跳出最近的 for 或 while 循环。
### continue
continue 语句也借鉴自 C 语言,表示继续执行循环的下一次迭代。
### else
循环语句支持 else 子句for 循环中,可迭代对象中的元素全部循环完毕时,或 while 循环的条件为假时执行该子句break 语句终止循环时,不执行该子句。
```python
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n//x)
break
else:
# loop fell through without finding a factor
print(n, 'is a prime number')
"""
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
"""
```
## 其他语句
### pass
pass 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。例如:
```python
while True:
pass # Busy-wait for keyboard interrupt (Ctrl+C)
# 最小的类
class MyEmptyClass:
pass
```
2022-01-26 20:44:41 +08:00