191 lines
4.9 KiB
Markdown
191 lines
4.9 KiB
Markdown
---
|
||
id: 分支、循环结构
|
||
title: 分支、循环结构
|
||
sidebar_position: 2
|
||
data: 2022年1月26日
|
||
---
|
||
|
||
## if 语句
|
||
|
||
在Python中,要构造分支结构可以使用`if`、`elif`和`else`关键字。所谓**关键字**就是有特殊含义的单词,像`if`和`else`就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。
|
||
|
||
```python
|
||
"""
|
||
用户身份验证
|
||
|
||
Version: 0.1
|
||
Author: 骆昊
|
||
"""
|
||
username = input('请输入用户名: ')
|
||
password = input('请输入口令: ')
|
||
# 用户名是admin且密码是123456则身份验证成功否则身份验证失败
|
||
if username == 'admin' and password == '123456':
|
||
print('身份验证成功!')
|
||
else:
|
||
print('身份验证失败!')
|
||
```
|
||
|
||
需要说明的是和 C/C++、Java 等语言不同,Python 中没有用花括号来构造代码块而是**使用了缩进的方式来表示代码的层次结构**,如果`if`条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说**连续的代码如果又保持了相同的缩进那么它们属于同一个代码块**,相当于是一个执行的整体。**缩进**可以使用任意数量的空格,但**通常使用4个空格**,建议大家**不要使用制表键**或者**设置你的代码编辑工具自动将制表键变成4个空格**。
|
||
|
||
当然如果要构造出更多的分支,可以使用`if...elif...else...`结构或者嵌套的`if...else...`结构。
|
||
|
||
## range 队列
|
||
|
||
`range(1, 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是步长,即每次数字递减的值。
|
||
|
||
## for-in 循环
|
||
|
||
**如果明确的知道循环执行的次数或者要对一个容器进行迭代**,那么我们推荐使用`for-in`循环,例如下面代码中计算1~100求和的结果
|
||
|
||
```python
|
||
"""
|
||
用for循环实现1~100求和
|
||
|
||
Version: 0.1
|
||
Author: 骆昊
|
||
"""
|
||
|
||
sum = 0
|
||
for x in range(101):
|
||
sum += x
|
||
print(sum)
|
||
```
|
||
|
||
## while 循环
|
||
|
||
如果要构造不知道具体循环次数的循环结构,我们推荐使用`while`循环。`while`循环通过一个能够产生或转换出`bool`值的表达式来控制循环,表达式的值为`True`则继续循环;表达式的值为`False`则结束循环。
|
||
|
||
```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('你的智商余额明显不足')
|
||
```
|
||
|
||
上面的代码中使用了`break`关键字来提前终止循环,需要注意的是`break`只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了`break`之外,还有另一个关键字是`continue`,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。
|
||
|
||
## 常见循环示例
|
||
|
||
### 九九乘法表
|
||
|
||
```
|
||
"""
|
||
输出乘法口诀表(九九表)
|
||
|
||
Version: 0.1
|
||
Author: 骆昊
|
||
"""
|
||
|
||
for i in range(1, 10):
|
||
for j in range(1, i + 1):
|
||
print('%d*%d=%d' % (i, j, i * j), end='\t')
|
||
print()
|
||
```
|
||
|
||
### 判断是不是素数
|
||
|
||
```
|
||
"""
|
||
输入一个正整数判断它是不是素数
|
||
|
||
Version: 0.1
|
||
Author: 骆昊
|
||
Date: 2018-03-01
|
||
"""
|
||
from math import sqrt
|
||
|
||
num = int(input('请输入一个正整数: '))
|
||
end = int(sqrt(num))
|
||
is_prime = True
|
||
for x in range(2, end + 1):
|
||
if num % x == 0:
|
||
is_prime = False
|
||
break
|
||
if is_prime and num != 1:
|
||
print('%d是素数' % num)
|
||
else:
|
||
print('%d不是素数' % num)
|
||
```
|
||
|
||
### 打印三角形图案
|
||
|
||
```
|
||
*
|
||
**
|
||
***
|
||
****
|
||
*****
|
||
```
|
||
|
||
```
|
||
*
|
||
**
|
||
***
|
||
****
|
||
*****
|
||
```
|
||
|
||
```
|
||
*
|
||
***
|
||
*****
|
||
*******
|
||
*********
|
||
```
|
||
|
||
```
|
||
"""
|
||
打印三角形图案
|
||
|
||
Version: 0.1
|
||
Author: 骆昊
|
||
"""
|
||
|
||
row = int(input('请输入行数: '))
|
||
for i in range(row):
|
||
for _ in range(i + 1):
|
||
print('*', end='')
|
||
print()
|
||
|
||
|
||
for i in range(row):
|
||
for j in range(row):
|
||
if j < row - i - 1:
|
||
print(' ', end='')
|
||
else:
|
||
print('*', end='')
|
||
print()
|
||
|
||
for i in range(row):
|
||
for _ in range(row - i - 1):
|
||
print(' ', end='')
|
||
for _ in range(2 * i + 1):
|
||
print('*', end='')
|
||
print()
|
||
```
|
||
|