第五天
程序的分支结构
概述
- 单分支结构
- 二分支结构
- 多分支结构
- 条件判断及组合
- 程序的异常处理
二、单分支结构
根据判断条件结果而选择不同向前路径的运行方式
2.1 单分支示例
if True:
print("条件正确")
guess = eval(input("请输入你猜测的年龄:"))
if guess == 99:
print("猜对了")
请输入你猜测的年龄:99
猜对了
三、二分支结构
根据判断条件结果而选择不同向前路径的运行方式
3.1 二分支示例
if True:
print("语句块1")
else:
print("语句块2")
guess = eval(input())
if guess == 99:
print("猜对了")
else:
print("猜错了")
26
猜错了
3.2 紧凑形式
紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>
guess = eval(input())
print("猜{}了".format("对" if guess == 99 else "错"))
26
猜错了
四、多分支结构
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
……
else:
<语句块N>
- 的包含关系
- 注意变量取值范围的覆盖
score = eval(input())
if score >= 60:
grade = 'D'
elif score >= 70:
grade = 'C'
elif score >= 80:
grade = 'B'
elif score >= 90:
grade = 'A'
print("输入成绩属于级别{}".format(grade))
五、条件判断及组合
5.1 条件判断
操作符 | 数学符号 | 描述 |
---|---|---|
< | < | 小于 |
<= | ≤ | 小于等于 |
>= | ≥ | 大于等于 |
> | > | 大于 |
== | = | 等于 |
!= | ≠ | 不等于 |
5.2 条件组合
用于条件组合的三个保留字
操作符及使用 | 描述 |
---|---|
x and y | 两个条件x和y的逻辑与 |
x or y | 两个条件x和y的逻辑或 |
not x | 条件x的逻辑非 |
5.3 条件判断及组合
guess = eval(input())
if guess > 99 or guess < 99:
print("猜错了")
else:
print("猜对了")
23
猜错了
六、程序的异常处理
6.1 异常处理
num = eval(input("请输入一个整数: "))
print(num**2)
# 当用户没有输入整数时,会产生异常,怎么处理?
6.2 异常处理的基本使用
6.2.1 示例1
try:
<语句块1>
except:
<语句块2>
try:
num = eval(input("请输入一个整数: "))
print(num**2)
except:
print("输入不是整数")
请输入一个整数: 234sdfr
输入不是整数
6.2.2 示例2
try:
<语句块1>
except <异常类型>:
<语句块2>
try:
num = eval(input("请输入一个整数: "))
print(num**2)
# 标注异常类型后,仅响应该异常
# 异常类型名字等同于变量
except NameError:
print("输入不是整数")
请输入一个整数: sdf2
输入不是整数
6.3 异常处理的高级使用
try:
<语句块1>
except:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
finally
对应语句块4一定执行else
对应语句块3在不发生异常时执行
程序的循环结构
概述
- 遍历循环
- 无限循环
- 循环控制保留字
- 循环的高级用法
二、遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <遍历结构>:
<语句块>
- 从遍历结构中逐一提取元素,放在循环变量中
- 由保留字
for
和in
组成,完整遍历所有元素后结束 - 每次循环,所获得元素放入循环变量,并执行
三、遍历循环的应用
3.1 计数循环(N次)
fro i in range(N):
<语句块>
- 遍历由
range()
函数产生的数字序列,产生循环
for i in range(5):
print(i)
0
1
2
3
4
for i in range(5):
print('hello:', i)
hello: 0
hello: 1
hello: 2
hello: 3
hello: 4
3.2 计数循环(特定次)
fro i in range(M,N,K):
<语句块>
- 遍历由
range()
函数产生的数字序列,产生循环
for i in range(1, 6):
print(i)
1
2
3
4
5
for i in range(1, 6, 2):
print('hello:', i)
hello: 1
hello: 3
hello: 5
3.3 字符串遍历循环
for c in s:
<语句块>
- s是字符串,遍历字符串每个字符,产生循环
for c in 'python':
print(c, end=',')
p,y,t,h,o,n,
3.4 列表遍历循环
for item in ls:
<语句块>
- ls是一个列表,遍历其每个元素,产生循环
for item in [123, "PY", 456]:
print(item, end=",")
123,PY,456,
3.5 文件遍历循环
for line in fi:
<语句块>
- fi是一个文件标识符,遍历其每行,产生循环
# fi.txt
优美胜于丑陋
明了胜于隐晦
简洁胜于复杂
for line in fi:
print(line)
优美胜于丑陋
明了胜于隐晦
简洁胜于复杂
四、无限循环
由条件控制的循环运行方式
- 反复执行语句块,直到条件不满足时结束
a = 3
while a > 0:
a = a - 1
print(a)
2
1
0
# 死循环, (CTRL + C 退出执行)
a = 3
while a > 0:
a = a + 1
print(a)
五、循环控制保留字
5.1 break 和 continue
- break跳出并结束当前整个循环,执行循环后的语句
- continue结束当次循环,继续执行后续次数循环
- break和continue可以与for和while循环搭配使用
5.1.1 for
for c in "PYTHON":
if c == 'T':
continue
print(c, end=',')
P,Y,H,O,N,
for c in "PYTHON":
if c == 'T':
break
print(c, end=',')
P,Y,
5.1.2 while
- break仅跳出当前最内层循环
s = "PYTHON"
while s != "":
for c in s:
print(c, end=',')
s = s[:-1]
P,Y,T,H,O,N,P,Y,T,H,O,P,Y,T,H,P,Y,T,P,Y,P,
s = "PYTHON"
while s != "":
for c in s:
if c == 'T':
break
print(c, end=',')
s = s[:-1]
P,Y,P,Y,P,Y,P,Y,P,Y,P,
六、循环的高级用法
6.1 循环的扩展
循环与else
6.1.1 for
for <变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
6.1.2 while
while <条件>:
<语句块1>
else:
<语句块2>
- 当循环没有被break语句退出时,执行else语句块
- else语句块作为"正常"完成循环的奖励
- 这里else的用法与异常处理中else用法相似
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
rangdom库的使用
**一丶 random库的基本介绍 **
random库是使用随机数的Python标准库
- 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
- random库主要用于生成随机数
- 使用random库:
import random
1.1 random库概述
random库包括两类函数,常用共8个
- 基本随机数函数:
seed(), random()
- 扩展随机数函数:
randint(), getrandbits(), uniform(),randrange(), choice(), shuffle()
二、基本随机数函数
2.1 随机数种子
函数 | 描述 |
---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间 |
random() | 生成一个[0.0, 1.0)之间的随机小数 |
import random
random.seed(10) # 产生种子10对应的序列
random.random()
0.5714025946899135
random.random()
0.4288890546751146
random.seed(10)
random.random()
0.5714025946899135
三、扩展随机数函数
函数 | 描述 |
---|---|
randint(a,b) | 生成一个[a, b]之间的整数 |
randrange(m, n[, k]) | 生成一个[m, n)之间以k为步长的随机整数 |
getrandbits(k) | getrandbits(k) |
uniform(a, b) | 生成一个[a, b]之间的随机小数 |
choice(seq) | 从序列seq中随机选择一个元素 |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 |
import random
random.randint(10, 100)
64
random.randrange(10, 100, 10)
80
random.getrandbits(16)
37885
random.uniform(10, 100)
11.334920142209832
random.choice([1, 2, 3, 4, 5, 6, 7])
6
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(s)
print(s)
[3, 9, 7, 4, 1, 2, 6, 5, 8]
3.1 随机数函数的使用
需要掌握的能力
- 能够利用随机数种子产生"确定"伪随机数
- 能够产生随机整数
- 能够对序列类型进行随机操作
圆周率的计算实例
一,公式法
圆周率的近似计算公式:
π=∑k=0∞[116k(48k+1−28k+4−18k+5−18k+6)]
pi = 0
N = 10
for k in range(N):
pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 /
(8 * k + 5) - 1 / (8 * k + 6))
print("圆周率值是: {}".format(pi))
二,蒙特卡罗方法
rom random import random
DARTS = 1000 * 1000
hits = 0.0
for i in range(1, DARTS + 1):
x, y = random(), random()
dist = pow(x**2 + y**2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits / DARTS)
print("圆周率值是: {}".format(pi))
作业
1. 使用while循环输出1 2 3 4 5 6 8 9 10
i = 0
while i<10 :
i +=1
if i==7:
continue
print(i)
2. 求1-100的所有数的和
s = 0
for i in range(101):
s=s+i
print(s)
3. 输出 1-100 内的所有奇数
for i in range(100):
if i%2==1:
print(i)
4 输出 1-100 内的所有偶数
for i in range(100):
if i%2==0:
print(i)
5. 求1-2+3-4+5 ... 99的所有数的和
x = 0
for i in range(100):
if i%2==0 :
x=x-i
else:
x=x+i
print(x)
6. 用户登陆(三次机会重试)
for i in range(3):
s=input('请输入密码:')
if s=='123':
print('密码正确!')
break
else:
print('密码错误!请重新输入')
7:猜年龄游戏
要求:
允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
import random
mb = random.randint(0,100)
age= 0
for i in range(3):
age = eval(input('请输入年龄:'))
if age > mb:
print('猜大了')
elif age == mb:
print('猜对了')
break
elif age < mb:
print('猜小了')
8:猜年龄游戏升级版(选做)
要求:
允许用户最多尝试3次
每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
如何猜对了,就直接退出
import random
mb = random.randint(0,100)
s = 'y'
while s=='y':
for i in range(3):
s = 'n'
age = eval(input('请输入年龄:'))
if age > mb:
print('猜大了')
elif age == mb:
print('猜对了')
break
elif age < mb:
print('猜小了')
else:
s = input('是否继续(y/n):')
9.for循环打印99乘法表
for i in range(1,10) :
for s in range(1,i+1):
print(f'{i}*{s}={s*i}',end=" ")
else:print('\n')
10.for循环打印金字塔:如下
*
***
*****
*******
*********
for i in range(5):
s=(i+1)*2-1
print(f"{'*'*s: ^9}")