控制语句
1. 控制语句简介
控制语句是用来改变程序执行的顺序。程序利用控制语句有条件地执行语句,循环地执行语句或者跳转到程序中的其他部分执行语句。
Python支持三种不同的控制语句:if,for和while,不支持C语言中的switch语句。
1.1 if 语句
编程时经常需要检查一系列条件,并据此决定采取什么措施。在Python中,if语句让你能够检查程序的当前状态,并据此采取相应的措施。Python中的if语句的语法根java中的表示有点小小的区别。java中执行语句块需要用大括号括起来,而Python中是在if表达式后加冒号。
注意:一个if 语句可以有多个 eli f部分,但是,只能有一个else 。
1.1.1 简单的 if 语句
最简单的 if 语句只有一个条件和一个执行的语句块。其语法格式如下:
if 表达式 :
语句块
以上 if 语句 只有表达式的值为真,才会执行语句块,否则,忽略语句块,什么也不操作。
例如,提示用户输入两个值,如果相同,则输出它们。
1 a = input("a:") 2 b = input("b:") 3 if a == b: 4 print("a的值和b的值相等,都等于",a,"。")
结果如下:
1 a:20 2 b:20 3 a的值和b的值相等,都等于 20 。
1.1.2 if - else 语句
很多情况下,我们在中文中都会说,如果...就... ,否则就...。其语法格式如下所示:
if 表达式 :
语句块1
else :
语句块2
以上 if 语句,如果 表达式为真,则执行语句块1,否则,则执行语句块2。
例如,我们将用户名和密码存在变量中,然后根据用户输入的用户名和密码判断是否正确,并打印相应提示信息。
1 _username = 'Yun' 2 _password = 'abc123' 3 username = input("username:") 4 password = input("password:") 5 if _username == username and _password == password: 6 print("Welcome user {name} loging...".format(name=username)) 7 else: 8 print("Invalid username or password")
输入的用户名和密码正确时,运行结果如下:
1 username:Yun 2 password:abc123 3 Welcome user Yun loging...
输入的用户名和密码不正确时,运行结果如下:
1 username:Yun 2 password:123abc 3 Invalid username or password
1.1.3 if - elif - else 语句
许多情况下,我们需要判断的情况不止两种,为此可以使用Python提供的if - elif - else 语句。其语法格式如下所示:
if 表达式 1:
语句块1
elif 表达式 2 :
语句块2
else :
语句块3
以上 if 语句,如果表达式1为真,则执行语句块1;否则如果表达式2为真,则执行语句块2;否则,则执行语句块3。
例如,我们输入a和b两个整数,然后判断a、b的大小,输入最大值。
代码1:
1 a = input("a:") 2 b = input("b:") 3 if a > b : 4 print("你输入的最大值为",a,"。") 5 elif b > a: 6 print("你输入的最大值为",b,"。") 7 else: 8 print("你输入的a的值和b的值相等。")
(1)当我们输入的值都是整数时:
1 a:10 2 b:20 3 你输入的最大值为 20 。
(2)当我们输入的值有一个为字符时:
1 a:10 2 b:abc 3 你输入的最大值为 abc 。
说明:在数据类型的介绍中,我们知道,python会将输入的整数当做字符串。所以我们需要用int()函数将输入的整数强行转换为整数,然后才能当作整数使用。
当我们输入的a和b都是整数时,不用int()转换,其结果跟整数比较的结果一样,但是,如果输入的不是整数时,代码仍然可以运行,但是 不是我们想要的整数比较,而是字符串比较。
因此,为了避免输入错误导致不必要的结果,我们应该将输入的值强行转换为整型,这样,当我们输入的不是整数时,就会报异常,我们就知道自己输入的数据不满足需求。这也是写代码养成良好的习惯的细节表现。
代码2:
1 a = int(input("a:")) 2 b = int(input("b:")) 3 if a > b : 4 print("你输入的最大值为",a,"。") 5 elif b > a: 6 print("你输入的最大值为",b,"。") 7 else: 8 print("你输入的a的值和b的值相等。")
(1)当我们输入的值是字符时:
1 a:10 2 b:abc 3 Traceback (most recent call last): 4 File "F:/PyProject/s14/day1/if.py", line 21, in <module> 5 b = int(input("b:")) 6 ValueError: invalid literal for int() with base 10: 'abc'
(2)当我们输入的值是浮点数时:
1 a:10 2 b:20.10 3 Traceback (most recent call last): 4 File "F:/PyProject/s14/day1/if.py", line 21, in <module> 5 b = int(input("b:")) 6 ValueError: invalid literal for int() with base 10: '20.10'
(3)当我们数据的都是整数时,分为三种情况输出一下。
- a 小于 b的情况:
1 a:10 2 b:20 3 你输入的最大值为 20 。
- a 大于b的情况:
1 a:30 2 b:10 3 你输入的最大值为 30 。
- a等于b的情况:
1 a:10 2 b:10 3 你输入的a的值和b的值相等。
1.1.4 多个elif代码块
if 表达式 1:
语句块1
elif 表达式 2 :
语句块2
......
elif 表达式 n:
语句块n
else :
语句块n+1
以上 if 语句,如果表达式1为真,则执行语句块1;否则如果表达式2为真,则执行语句块2;否则如果表达式N为真,则执行语句块N;否则,则执行语句块n+1。
例如,我们输入一个学生的姓名、学号即成绩,然后根据学生分数来划分成绩等级:优、良、中、差、不及格,即,大于等于90分为A;大于等于80分为B;大于等于70分C;大于等于60分为D;小于60分为F。
代码:
1 student_name = input("请输入学生的姓名:") 2 student_no = input("请输入学生的学号:") 3 student_score = input("请输入该学生的成绩:") 4 if student_score >= '90' : 5 grade = "A" 6 elif student_score >= '80': 7 grade = "B" 8 elif student_score >= '70': 9 grade = "C" 10 elif student_score >= '60': 11 grade = "D" 12 else: 13 grade = "F" 14 print(student_name,student_no,grade) 15 16 if grade == "F": 17 print("亲爱的",student_name,"该努力了!") 18 else: 19 print("亲爱的",student_name,"恭喜过关,再接再厉!")
(1)成绩为99分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S100001 3 请输入该学生的成绩:99 4 Yun Qtian S100001 A 5 亲爱的 Yun Qtian 恭喜过关,再接再厉!
(2)成绩为87分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:87 4 Yun Qtian S1000001 B 5 亲爱的 Yun Qtian 恭喜过关,再接再厉!
(3)成绩为76分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:76 4 Yun Qtian S1000001 C 5 亲爱的 Yun Qtian 该努力了!
(4)成绩为60分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:60 4 Yun Qtian S1000001 D 5 亲爱的 Yun Qtian 恭喜过关,再接再厉!
(5)成绩为56分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:56 4 Yun Qtian S1000001 F 5 亲爱的 Yun Qtian 该努力了!
1.1.5 省略 else 代码块
在Python代码中,一个 if 语句不能带有多个else 代码块 ,但是可以省略else代码块。
例如,我们将上一节中的例子中的代码里面的else省略后,改为 用 elif 代替它。
代码:
1 student_name = input("请输入学生的姓名:") 2 student_no = input("请输入学生的学号:") 3 student_score = input("请输入该学生的成绩:") 4 if student_score >= '90' : 5 grade = "A" 6 elif student_score >= '80': 7 grade = "B" 8 elif student_score >= '70': 9 grade = "C" 10 elif student_score >= '60': 11 grade = "D" 12 elif student_score < '60' 13 grade = "F" 14 print(student_name,student_no,grade) 15 16 if grade == "F": 17 print("亲爱的",student_name,"该努力了!") 18 else: 19 print("亲爱的",student_name,"恭喜过关,再接再厉!")
(1)成绩为99分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S100001 3 请输入该学生的成绩:99 4 Yun Qtian S100001 A 5 亲爱的 Yun Qtian 恭喜过关,再接再厉!
(2)成绩为87分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:87 4 Yun Qtian S1000001 B 5 亲爱的 Yun Qtian 恭喜过关,再接再厉!
(3)成绩为76分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:76 4 Yun Qtian S1000001 C 5 亲爱的 Yun Qtian 该努力了!
(4)成绩为60分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:60 4 Yun Qtian S1000001 D 5 亲爱的 Yun Qtian 恭喜过关,再接再厉!
(5)成绩为56分:
1 请输入学生的姓名:Yun Qtian 2 请输入学生的学号:S1000001 3 请输入该学生的成绩:56 4 Yun Qtian S1000001 F 5 亲爱的 Yun Qtian 该努力了!
从以上运行结果来看,跟上一节中的完全一致。虽然这有编写Python解释器也支持,但是为了更规范,也让学习过其他语言的朋友更好的理解Python代码,尽量保持相同的编程风格。
1.1.6 多个 if 条件
在Python,虽然 if-elif-else 结构功能强大,但仅适用于只有一个条件满足的情况,因为如果前面的条件满足后,后面的条件就会跳过。这种行为很好,效率很高,让你能测试一个特定的条件。
然后,有时我们需要检查所有条件。在这种情况下,就应该使用多个不包含 elif 和 else 代码块的简单 if 语句。在可能有多个条件为True,且你需要在每个条件为True时都采取相应的措施时,适合使用这种方法。
例如,在一个比萨店中,如果顾客点了两种配料,就需要确保在其比萨中包含这些配料:
代码:
1 requested_toppings = ['mushrooms','extra cheese'] 2 3 if 'mushrooms' in requested_toppings: 4 print("Adding mushrooms.") 5 if 'pepperoni' in requested_toppings: 6 print("Adding pepperoni.") 7 if 'extra cheese' in requested_toppings: 8 print("Adding extra cheese.") 9 print("\nFinished making your pizza!")
运行结果如下:
1 Adding mushrooms. 2 Adding extra cheese. 3 4 Finished making your pizza!
1.2 while 语句
在java 中,while 语句的表达式用括号括起来,循环体用大括号括起来,但在Python中,while 语句的表达式不需要用括号括起来,循环体也不需要用大括号括起来,而是在表达式后用冒号即可。
while 语句条件为真时,while语句重复执行语句块。在Python 中的 while 语句的基本语法为:
while 表达式 :
循环体
首先,while 语句计算表达式,它将返回一个boolean 值(true 或者 false)。如果表达式返回true,则执行循环体中的语句。然后,while 语句继续测试表达式来确定是否执行循环体,直到表达式返回false。
例如,用while循环打印0到5:
1 count = 0 2 while count < 5: 3 print(count) 4 count += 1
运行结果如下:
1 0 2 1 3 2 4 3 5 4
1.3 for 语句
for 语句提供了一个更简便、灵活的方法来进行循环。在Python中,for 语句的语法 如下所示:
for 变量 in 对象:
循环体
例如,循环打印0到5 的数据:
1 count = 1 2 for i in range(0,5): 3 print("第",count,"个数是:",i) 4 count += 1
运行结果如下:
1 第 1 个数是: 0 2 第 2 个数是: 1 3 第 3 个数是: 2 4 第 4 个数是: 3 5 第 5 个数是: 4
1.4 跳转语句
Python 语言有两种跳转语句:
(1)break 语句。跳出循环。
(2)continue 语句。跳出本次循环,继续下一次循环。
1.4.1 break 语句
要立即退出 while 循环或者 for 循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用 break 语句。break 语句用于控制程序流程,可使用它控制哪些代码行将执行,哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。
例如,我们循环打印数据,每次加1,直到我们要求退出时结束循环。
代码:
1 count = 0 2 while True: 3 print("count:",count) 4 count += 1 5 if count == 5: 6 break
运行结果如下:
1 count: 0 2 count: 1 3 count: 2 4 count: 3 5 count: 4
1.4.2 continue 语句
在循环中,如果要返回到循环开头,并根据条件测试结果决定 是否继续执行循环,可使用continue语句,它不像break语句那样不再执行余下的代码并退出整个循环。
例如,我们来看一个从1数到10,但只打印其中的奇数的循环。
代码:
1 count = 0 2 while count < 10: 3 count += 1 4 if count % 2 == 0: 5 continue 6 print(count)
运行结果如下:
1 1 2 3 3 5 4 7 5 9