Python语言程序设计笔记 - 4 程序的控制结构
4 程序的控制结构
4.1 程序的分支结构
单分支结构:
1
2
3guess = eval(input())
if guess == 99:
print("You are right")二分支结构
1
2
3
4
5guess = eval(input())
if guess == 99:
print("You are right")
else:
print("You are wrong")表达的紧凑形式:
1
2guess = eval(input())
print("You are {}".format("right" if guess==99 else 'wrong'))多分支结构:成绩分级
1
2
3
4
5
6
7score = eval(input())
if score <= 60:
grade = "D"
elif score <= 70:
grade = 'C'
else:
grade = 'A'条件判断操作符:

条件组合:

异常处理:
try:
<语句块1>
except <异常类型>:
<语句块2>
1
2
3
4
5try:
num = eval(input("Please input an int: "))
print(num**2)
except NameError:
print('It\'s not an int.')高级异常处理方法:
try:
<语句块1>
except:
<语句块2>
else:
<语句块3>
finally:
<语句块4>
4.2 实例8:身体质量指数
定义:BMI = 体重 / 身高^2
输入:身高和体重
输出:BMI分类
版本1
1
2
3
4
5
6
7
8
9
10
11
12
13
14#CalBMIv1.py
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
who = ""
if bmi < 18.5:
who = "偏瘦"
elif 18.5 <= bmi < 25:
who = "正常"
elif 25 <= bmi < 30:
who = "偏胖"
else:
who = "肥胖"
print("BMI 指标为:国际'{0}'".format(who))版本2
1
2
3
4
5
6
7
8
9
10
11
12
13
14#CalBMIv2.py
height, weight = eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
nat = ""
if bmi < 18.5:
nat = "偏瘦"
elif 18.5 <= bmi < 24:
nat = "正常"
elif 24 <= bmi < 28:
nat = "偏胖"
else:
nat = "肥胖"
print("BMI 指标为:国内'{0}'".format(nat))版本3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#CalBMIv3.py
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
who, nat = "", ""
if bmi < 18.5:
who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
who, nat = "正常", "正常"
elif 24 <= bmi < 25:
who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖", "肥胖"
else:
who, nat = "肥胖", "肥胖"
print("BMI 指标为:国际'{0}', 国内'{1}'".format(who, nat))
4.3 程序的循环结构
遍历循环:
for <循环变量> in <遍历结构>:
<语句块>
- 计数循环:for i in range(M, N, K):
- 字符串遍历:for c in s:
- 列表遍历:for item in ls:
- 文件遍历:for line in fi:
无限循环:
while <条件>:
<语句块>
循环控制保留字:
- break: 跳出并结束整个当前循环
- continue: 跳出当前循环,执行下一次循环
循环的扩展:for,while 后接 else。else作为正常循环的奖励(没有break退出)
4.4 模块3:random库
- 伪随机数:采用梅森旋转算法生成的(伪)随机序列中的元素
- import random
- 基本随机函数:
- random():生成一个0.0到1.0之间的随机小数
- random.seed(a=None): 确定随机数种子,默认为当前系统时间
- 扩展随机数函数:
- randint(a,b): 生成[a,b] 之间的整数
- randrange(m,n,[,k]): 生成一个[m,n)之间,k为步长的随机整数
- getrandbits(k): 生成一个k比特长的随机整数
- uniform(a,b): 生成[a,b]之间的随机小数
- choice(seq): 从序列中随机选择一个元素
- shuffle(seq): 将序列中的元素随机排序,返回打乱后的序列
4.5 实例6:圆周率的计算
- 蒙特卡罗方法:随机撒点比较扇形和方形面积的比值
1 | # solution 1 |
- solution2
1 | from random import random |
4. Practice
三位水仙花数:ABC是一个”3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。请按照从小到大的顺序输出所有的3位水仙花数,请用”逗号”分隔输出结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20arr = []
for i in range(100,1000):
a = i//100
b = (i%100)//10
c = i-a*100-b*10
if (a**3+b**3+c**3)==i:
arr.append(i)
print(','.join(str(i) for i in arr))
# solution 2
l = ''
for i in range(100,1000,1):
t = str(i)
s = eval(t[0])**3 + eval(t[1])**3 + eval(t[2])**3
if s == i:
l = l + '{}'.format(i) + ','
print(l[:-1])
# solution 3
a = list(map(lambda x: x[1], filter(lambda x: x[0], [(i*100+j*10+k == i**3+j**3+k**3, i**3+j**3+k**3) for i in range(1, 10) for j in range(0, 10) for k in range(0, 10)])))整数的加和减:1-2+3-4…966,奇数为正,偶数为负
1
2
3
4result = 0
for i in range(1,967):
result += i if (i%2==1) else -i
print(result)用户登陆的三次机会:
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。
1
2
3
4
5
6
7
8
9
10
11i = 0
while True:
if i==3:
print('3次用户名或者密码均有误!退出程序。')
break
username = input()
password = input()
if username == 'Kate' and password == '666666':
print('登录成功!')
break
i += 1


