文章目录
1 程序的分支结构
程序有三种控制结构,顺序结构,分支结构和循环结构
1.1 分支结构
有单分支结构,二分支结构和多分支结构
二分支结构有一种紧凑形式:
<表达式1> if <条件> else <表达式2>
example:
- 单分支示例:
guess = eval(input())
if guess == 99:
print("猜对了")
- 二分支结构:
guess = eval(input())
if guess == 99:
print("猜对了")
else :
print("猜错了")
紧凑结构:
guess = eval(input())
print("猜{}了".format("对" if guess == 99 else "错"))
- 多分支结构
score = eval(input())
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
print("输入成绩属于级别{}".format(grade))
1.2 条件判断及组合
操作符 | 描述 |
---|---|
< | 小于 |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
== | 等于 |
!= | 不等于 |
条件组合
操作符及使用 | 描述 |
---|---|
x and y | 两个条件 x 和 y 的逻辑与 |
x or y | 两个条件 x 和 y 的逻辑或 |
not x | 条件 x 的逻辑非 |
1.3 程序的异常处理
异常处理的基本使用
example:
try:
num = eval(input("请输入一个整数:"))
print(num**2)
except:
print("输入的不是整数")
异常处理的高级使用
2 实例: 身体质量指数 BMI
BMI = 体重 (kg) / 身高2 (m2)
分类 | 国际BMI值 (kg/m2 ) | 国内BMI值 (kg/m2 ) |
---|---|---|
偏瘦 | <18.5 | <18.5 |
正常 | 18.5 ~ 25 | 18.5 ~ 24 |
偏胖 | 25 ~ 30 | 24 ~ 28 |
肥胖 | ≥30 | ≥28 |
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))
bmi = weight / pow(height, 2)
print("BMI数值为:{:.2f}".format(bmi))
who, net = "", ""
if bmi < 18.5:
who, net = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
who, net = "正常", "正常"
elif 24 <= bmi < 25:
who, net = "偏胖", "正常"
elif 25 <= bmi < 28:
who, net = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, net = "肥胖", "偏胖"
else:
who, net = "肥胖", "肥胖"
print("BMI指标为:国际'{}',国内'{}'".format(who, net))
3 程序的循环结构
3.1 遍历循环
for <循环变量> in <遍历结构> :
<语句块>
example:
- 计数循环(N次)
>>> for i in range(5):
print("Hello", i)
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
- 计数循环(特定次)
>>> for i in range(1, 6, 2):
print("Hello", i)
Hello 1
Hello 3
Hello 5
- 字符串遍历循环
>>> for c in "python":
print(c, end = ",")
p,y,t,h,o,n,
- 列表遍历循环
>>> for item in [123, 'python', 456]:
print(item, end = ",")
123,python,456,
- 文件遍历循环
>>> for line in fi :
print(line)
优美胜于丑陋
明了胜于隐晦
简洁胜于复杂
3.2 无限循环
while <条件> :
<语句块>
example:
>>> a = 3
>>> while a > 0:
a = a - 1
print(a)
2
1
0
3.3 循环控制保留字
break 和 continue
- break 跳出并结束当前整个循环,只影当前循环,外层循环不影响
- continue 结束本次循环,循环继续
- break 和 continue 可以与 for 和 while 循环搭配使用
example:
>>> for c in "python":
if c == "t":
continue
print(c, end = "")
pyhon
>>> for c in "python":
if c == "t":
break
print(c, end = "")
py
3.4 循环的高级用法
- 当循环没有被 break 语句退出时,执行 else 语句块
- else 语句块作为"正常"完成循环的奖励
example:
for c in "python":
if c == "t":
continue
print(c, end = "")
else:
print("正常退出")
运行结果:
pyhon正常退出
for c in "python":
if c == "t":
break
print(c, end = "")
else:
print("正常退出")
运行结果:
py
4 random 库的使用
random库主要用于生成随机数,使用 random 库: import random
random库包括两类函数,常用共8个
- 基本随机数函数: seed(),random()
- 扩展随机数函数: randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
4.1 基本随机数函数
函数 | 描述 |
---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间 >>>random.seed(10) #产生种子10对应的序列 |
random() | 生成一个[0.0, 1.0)之间的随机小数 >>>random.random() 0.5714025946899135 |
example:
>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.random()
0.4288890546751146
4.2 扩展随机数函数
函数 | 描述 |
---|---|
randint(a, b) | 生成一个 [a, b] 之间的整数 >>>random.randint(10, 100) 64 |
randrange(m, n[, k]) | 生成一个 [m, n) 之间以 k 为步长的随机整数 >>>random.randrange(10, 100, 10) 80 |
getrandbits(k) | 生成一个 k 比特长的随机整数 >>>random.getrandbits(16) 30315 |
uniform(a, b) | 生成一个 [a, b] 之间的随机小数 >>>random.uniform(10, 100) 13.096321648808136 |
choice(seq) | 从序列 seq 中随机选择一个元素 >>>random.choice([1,2,3,4,5,6,7,8,9]) 8 |
shuffle(seq) | 将序列 seq 中元素随机排列,返回打乱后的序列 >>>s=[1,2,3,4,5,6,7,8,9]; random.shuffle(s); print(s) [3, 5, 8, 9, 6, 1, 2, 7, 4] |
5 实例: 圆周率的计算
蒙特卡罗方法
生成两个 0-1 之间的随机数,该点落在坐标系的右上区域,计算落在圆中的点与右上区域正方形区域点的比值就可以计算出圆周率。
from random import random
from time import perf_counter
DATAS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, DATAS + 1):
x, y = random(), random()
dist = pow(x**2 + y**2, 0.5)
if dist <= 1.0:
hits = hits + 1;
pi = 4 * (hits/DATAS)
print("圆周率是:{}".format(pi))
print("运行时间是:{:.2f}s".format(perf_counter() - start))
6 小结
程序的分支结构
- 单分支 if,二分支 if-else 及紧凑形式
- 多分支 if-elif-else 及条件之间关系
- not,and,or,>,>=,==,<=,<,!=
- 异常处理 try-except-else-finally
程序的循环结构
- for…in 遍历循环: 计数、字符串、列表、文件…
- while 无限循环
- continue 和 break
- 循环 else 的高级用法: 与 break 有关