Python笔记(二) 程序的控制结构

程序的分支结构

单分支结构:if 语句

  Python中的 if 语句的语法格式如下:

1
2
if <条件>:
<语句块>

  语句块是 if 条件满足之后执行的一个或者多个语句序列,语句块中语句通过与 if 所在行形成缩进表达包含关系。if 评价条件的返回值,True则进行语句块,False反之。if 语句中条件部分能够使用任何能够产生True或者False的语句或者函数。

二分支结构:if-else 语句

  Python中的 if 语句的语法格式如下:

1
2
3
4
5
6
7
----------第一种----------
if <条件>:
<语句块1>
else:
<语句块2>
----------第二种----------
<表达式1> if <条件> else <表达式2>

  语句块1是满足 if 后的条件时执行的一个或者多个语句序列,语句块2是不满足 if 后的条件的情形。

多分支结构:if-elif-else 语句

  Python中的 if 语句的语法格式如下:

1
2
3
4
5
6
7
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
...
else:
<语句块N>

  Python依次评估寻找第一个结果为True的条件,并且执行该条件下的语句块,然后跳过整个分支结构,执行后面的语句。如果没有任何的条件能够成立,那么 else 下面的语句块将会被执行。


实例演示与分析

案例1:“水仙花数”

  水仙花数是指1个3位十进制数,其各位数字的立方和恰好等于该数本身。编写程序,打印输出全部的“水仙花数”。

1
2
3
4
for i in range(100,1000)
bai,shi,ge=map(int,str(i)) # map()函数把函数func一次映射到序列或者迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果。
if ge**3+shi**3+bai**3==i:
print(i)

案例2:决赛成绩计算过程模拟

  先获取所有评委对一个选手的打分,去掉一个最高分、去掉一个最低分,计算剩余分数的平均数。首先输入评委人数 n,然后依次输入评委的分数。在 n 个分数当中,找出最高分和最低分,最后计算截尾平均数并输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
while True:            #这一个循环用来控制输入的评委人数是合法的,如不合法则重新输入。
try:
n=int(input('请输入评委的人数:'))
if n<=2:
print('评委人数太少,必须多于两个人。')
else:
break
except:
pass

scores=[] #建立空列表,用来保存所有评委的打分。

for i in range(n):
while True: #这一循环用来控制输入的分数是合法的,如不合法则重新输入。
try:
score=input('请输入第{0}个评委的分数:'.format(i+1)) #把字符串转换为实数。
score=float(score) #保证输入的数字在0-100之间。
assert 0<=score<=100 #assert(断言)用于判断一个表达式,在表达式条件为false时触发异常。
scores.append(score) #顺次放入列表当中。
break
except:
print('分数错误!')

highest=max(scores) #计算并且删除最高分、最低分。
lowest=min(scores)
scores.remove(highest)
scores.remove(lowest)
finalScore=round(sum(scores)/len(scores),2)

formatter='去掉一个最高分{0}\n去掉一个最低分{1}\n最后得分{2}'
print(formatter.format(highest,lowest,finalScore)) #format函数是一种格式化输出字符串的函数(str.format), 基本语法是通过{}和:来代替以前的%。

案例3:抓小狐狸的小游戏

  假设墙上有5个洞,小狐狸最开始的时候在其中一个洞口,然后有人随机打开了一个洞口,如果里面有小狐狸就抓到了;如果洞里没有小狐狸就明天再来抓,但是第二天小狐狸会在有人来抓之前跳到隔壁洞口里。

1
2
3
4
5
6
7
8
9
10
11
12
from random import choice,randrange     #调用random库。

def catchMe(n=5,maxStep=10):
'''模拟抓小狐狸,共n个洞口,允许抓maxStep次;如果失败,小狐狸就会跳到隔壁洞口。'''
positions=[0]*n
oldPos=randrange(1,n)
positions[oldPos]=1
while maxStep>0:
maxStep-=1
while True:
try:
x=input('今天打开哪个洞?')