简介

Python代码在执行时是按照自上向下顺序执行的。通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次. 流程控制语句分成两大类:

  • 条件判断语句
  • 循环语句

条件判断语句

if语句

1
2
3
# 语法:
if 条件表达式 :
代码块

执行的流程:

if语句在执行时,会先对条件表达式进行求值判断,如果为True,则执行if后的语句 . 如果为False,则不执行.

缩进有两种方式,一种是使用tab键,一种是使用空格(四个)Python的官方文档中推荐我们使用空格来缩进

Python代码中使用的缩进方式必须统一 ! ! !

可以使用逻辑运算符来连接多个条件,如果希望所有条件同时满足,则需要使用and , 如果希望只要有一个条件满足即可,则需要使用or .

1
2
3
4
5
num = 18
if num > 10 and num < 20 :
print('num比10大,num比20小!')
if 10 < num < 20 :
print('num比10大,num比20小!')

input( )函数

该函数用来获取用户的输入 , input()调用后,程序会立即暂停,等待用户输入 ,用户输入完内容以后,点击回车程序才会继续向下执行 , 用户输入完成以后,其所输入的的内容会以返回值得形式返回 .

input( ) 的返回值是一个字符串 !

input()函数中可以设置一个字符串作为参数,这个字符串将会作为提示文字显示.

1
2
a = input('请输入任意内容:')
print('用户输入的内容是:',a)

input()也可以用于暂时阻止程序结束.

if-else

1
2
3
4
5
6
# if-else语句
# 语法:
if 条件表达式 :
代码块
else :
代码块

执行流程: if-else语句在执行时,先对if后的条件表达式进行求值判断 , 如果为True,则执行if后的代码块 . 如果为False,则执行else后的代码块 .

1
2
3
4
5
age = 7
if age > 17 :
print('你已经成年了~~')
else :
print('你还未成年~~')

if-elif-else

1
2
3
4
5
6
7
8
9
10
11
12
# if-elif-else语句
# 语法:
if 条件表达式 :
代码块
elif 条件表达式 :
代码块
elif 条件表达式 :
代码块
elif 条件表达式 :
代码块
else :
代码块

执行流程: if-elif-else语句在执行时,会自上向下依次对条件表达式进行求值判断,如果表达式的结果为True,则执行当前代码块,然后语句结束 ; 如果表达式的结果为False,则继续向下判断,直到找到True为止 ; 如果所有的表达式都是False,则执行else后的代码块 . if-elif-else中只会有一个代码块会执行 .

1
2
3
4
5
6
7
8
9
10
age = 68

if age >= 18 and age < 30 :
print('你已经成年了!')
elif age >= 30 and age < 60 :
print('你已经中年了!')
elif age >= 60 :
print('你已经退休了!')

# 最有一个 else 可以不写

循环语句

循环语句可以使指定的代码块重复指定的次数 , 循环语句分成两种,while循环 和for循环 . 这里先介绍while循环.

1
2
3
4
5
6
7
# while循环
# 语法:
语法:
while 条件表达式 :
代码块
else :
代码块

执行流程 : while语句在执行时,会先对while后的条件表达式进行求值判断,如果判断结果为True,则执行循环体(代码块)循环体执行完毕,继续对条件表达式进行求值判断,以此类推,直到判断结果为False,则循环终止,如果循环有对应的else,则执行else后的代码块 其他语言我还没见过这样的

1
2
3
4
5
6
i = 0
while i < 10 :
i += 1
print(i,'hello')
else :
print('else中的代码块')

break和continue

  1. break可以用来立即退出循环语句(包括else)
  2. continue可以用来跳过当次循环
  3. pass是用来在判断或循环语句中占位的

breakcontinue都是只对离他最近的循环起作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
i = 0
while i < 5:
if i == 3:
break
print(i)
i += 1
else :
print('循环结束')

# 输出结果:
0
1
2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
i = 0
while i < 5:
i += 1
if i == 2:
continue
print(i)
else :
print('循环结束')
# 输出结果:
1
3
4
5
循环结束

本节练习

练习1

编写一个程序 , 获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。

参考代码
1
2
3
4
5
num = int(input('请输入一个整数:'))
if num % 2 == 0 :
print(num,'是偶数')
else :
print(num,'是奇数')

练习2

编写一个程序,检查任意一个年份是否是闰年。如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年

参考代码
1
2
3
4
5
year = int(input("请输入一个年份:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 :
print(year,'是闰年')
else :
print(year,'不是闰年')

练习3

我家的狗5岁了,5岁的狗相当于多大年龄的人呢?其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。那么5岁的狗相等于人类的年龄就应该是10.5+10.5+4+4+4 = 33岁

编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。

如果用户输入负数,请显示一个提示信息

参考代码
1
2
3
4
5
6
7
dog_age = -1
while dog_age < 0 :
dog_age = float(input('请输入狗狗的年龄:'))
if dog_age < 0 :
print('请输入一个正数')
else :
print(dog_age,'岁的够, 相当于',(2 * dog_age if dog_age <= 2 else 21+(dog_age-2)*4),'岁的人')

练习4

从键盘输入小明的期末成绩:

  • 当成绩为100时,‘奖励一辆BMW’
  • 当成绩为[80-99]时,‘奖励一台iphone’
  • 当成绩为[60-79]时,‘奖励一本参考书’
  • 其他时,什么奖励也没有
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while True:
score = float(input('请输入小明的分数:'))
if (score <= 100 and score >= 0):
break
else:
print("请输入一个合法的分数.")

if score == 100 :
print('奖励一辆BMW')
elif score >= 80 :
print('奖励一台iphone')
elif score >= 60 :
print('奖励一本参考书')
else :
print('什么也没有')

练习5

大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上; 富:1000万以上; 帅:500以上; 如果这三个条件同时满足,则:‘我一定要嫁给他’ ; 如果三个条件有为真的情况,则:‘嫁吧,比上不足,比下有余。’ ; 如果三个条件都不满足,则:‘不嫁!’

参考代码
1
2
3
4
5
6
7
8
9
10
height = float(input('请输入你的身高:'))
money = float(input('请输入你的财富:'))
face = float(input('请输入你的颜值:'))

if height>180 and money>1000_0000 and face>500 :
print('我一定要嫁给他!')
elif height>180 or money>1000_0000 or face>500 :
print('嫁吧,比上不足,比下有余。')
else :
print('不嫁!')

练习6

求100以内奇数之和

参考代码
1
2
3
4
5
6
7
i = 1
sum = 0 # 这句话不加会报错
while i < 100 :
sum += i
i += 2
else :
print('100以内奇数之和是:',sum)

练习7

求100以内7的倍数之和, 以及数量.

参考代码
1
2
3
4
5
6
7
8
9
count = 0
sum = 0
i = 7
while i < 100 :
sum += i
count += 1
i += 7
else :
print('和为',sum,' 数量是', 'count')

练习8

水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:13 + 53 + 3**3 = 153)

求1000以内所有的水仙花数

参考代码
1
2
3
4
5
6
7
8
9
10
11
num = 100
while num < 1000:
temp = num
ge = temp % 10
temp //= 10
shi = temp % 10
temp //= 10
bai = temp % 10
if ge**3 + shi**3 + bai**3 == num :
print(num,'是水仙花数')
num += 1

练习9

获取用户输入的任意数,判断其是否是质数。

参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while True:
num = input('请输入一个大于或等于2的整数:')
if float(num) - int(num) == 0 and float(num) >= 2:
break
else :
print('你输入的数字不合法, 请重新输入.')

num = float(num)
i = 2
while i < num**0.5:
if num % i == 0 :
print(num,'不是素数')
break
i += 1
else:
print(num,'是素数')

练习10

在控制台打印如下图形:

*

**

***

****

*****

****

***

**

*

参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
i = 1
while i <= 5:
j = 1
while j <= i:
print('*',end='')
j += 1
i += 1
print()
i -= 2
while i > 0:
j = 1
while j <= i:
print('*',end='')
j += 1
i -= 1
print()

练习11

打印99乘法表

参考代码
1
2
3
4
5
6
7
8
9
10
i = 1

while i <= 9:
j = 1
while j <= i:
print(' ',j,'*',i,'=',j*i,end='')
j += 1
i += 1
print()

练习12

求10000以内所有的素数, 或求100000以内所有的素数. 通过引入time模块来比较算法的优缺点

参考代码
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 第一种方法
from time import *
begin = time()
i = 2
while i < 10000 :
j = 2
flag = True
while j < i :
if i % j == 0:
flag = False
j += 1
if flag:
print(i,' ',end='')
i += 1
end = time()
print('程序运行花费了',end-begin,'秒')
# 时间: 10.622482776641846

# 第一次改进
from time import *
begin = time()
i = 2
while i < 10000 :
j = 2
flag = True
while j < i :
if i % j == 0:
flag = False
break # 不是素数没必要在继续进行了
j += 1
if flag:
print(i,' ',end='')
i += 1
end = time()
print('程序运行花费了',end-begin,'秒')
# 花费时间 : 1.3919658660888672

# 第二次改进
from time import *
begin = time()
i = 2
while i < 10000 :
j = 2
flag = True
while j < i**0.5 :
if i % j == 0:
flag = False
break # 不是素数没必要在继续进行了
j += 1
if flag:
print(i,' ',end='')
i += 1
end = time()
print('程序运行花费了',end-begin,'秒')
# 花费时间 : 0.10251498222351074

## 可见, 每一次优化后的算法与优化前都存在着10倍左右的差距!!

练习13

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 小游戏

# 显示欢迎信息
print('-'*20,'欢迎光临《唐僧大战白骨精》','-'*20)

# 显示身份选择的信息
print('请选择你的身份:')
print('\t1.唐僧')
print('\t2.白骨精')
# 游戏的身份选择
player_choose = input('请选择[1-2]:')

# 打印一条分割线
print('-'*66)

# 根据用户的选择来显示不同的提示信息
if player_choose == '1':
# 选择1
print('你已经选择了1,你将以->唐僧<-的身份来进行游戏!')
elif player_choose == '2':
# 选择2
print('你竟然选择了白骨精,太不要脸了,你将以->唐僧<-的身份来进行游戏!')
else :
# 选择3
print('你的输入有误,系统将自动分配身份,你将以->唐僧<-的身份来进行游戏!')

# 进入游戏

# 创建变量,来保存玩家的生命值和攻击力
player_life = 2 # 生命值
player_attack = 2 # 攻击力

# 创建一个变量,保存boss的生命值和攻击力
boss_life = 10
boss_attack = 10

# 打印一条分割线
print('-'*66)
# 显示玩家的信息(攻击力、生命值)
print(f'唐僧,你的生命值是 {player_life} , 你的攻击力是 {player_attack}')

# 由于游戏选项是需要反复显示的,所以必须将其编写到一个循环中
while True :
# 打印一条分割线
print('-'*66)
# 显示游戏选项,游戏正式开始
print('请选择你要进行的操作:')
print('\t1.练级')
print('\t2.打BOSS')
print('\t3.逃跑')
game_choose = input('请选择要做的操作[1-3]:')

# 处理用户的选择
if game_choose == '1' :
# 增加玩家的生命值和攻击力
player_life += 2
player_attack += 2
# 显示最新的信息
# 打印一条分割线
print('-'*66)
# 显示玩家的信息(攻击力、生命值)
print(f'恭喜你升级了!,你现在的生命值是 {player_life} , 你的攻击力是 {player_attack}')
elif game_choose == '2' :
# 玩家攻击boss
# 减去boss的生命值,减去的生命值应该等于玩家的攻击力
boss_life -= player_attack

# 打印一条分割线
print('-'*66)
print('->唐僧<- 攻击了 ->白骨精<-')
# 检查boss是否死亡
if boss_life <= 0 :
# boss死亡,player胜利,游戏结束
print(f'->白骨精<-受到了 {player_attack} 点伤害,重伤不治死了,->唐僧<-赢得了胜利!')
# 游戏结束
break

# boss要反击玩家
# 减去玩家的生命值
player_life -= boss_attack
print(' ->白骨精<- 攻击了 ->唐僧<-')
# 检查玩家是否死亡
if player_life <= 0 :
# 玩家死亡
print(f'你受到了 {boss_attack} 点伤害,重伤不治死了!GAME OVER')
# 游戏结束
break
elif game_choose == '3' :
# 打印一条分割线
print('-'*66)
# 逃跑,退出游戏
print('->唐僧<-一扭头,撒腿就跑!GAME OVER')
break
else :
# 打印一条分割线
print('-'*66)
print('你的输入有误,请重新输入!')