第三篇 条件控制和循环
1.条件控制
if语句的形式一般为:
1 if 条件1: 2 语句1 3 elif 条件2: 4 语句2 5 else: 6 语句3
注意:代码的缩进为一个tab键,或者4个空格,建议使用空格。
实例:
age = int(input("请输入您的年龄:")) if age >= 18: print("已满18岁,可以入内") else: print("未满18岁,禁止入内")
注意:
- 每个条件后面要使用冒号,以表示接下来是满足条件后要执行的代码块。
- 使用缩进来划分语句块,相同的缩进为一个代码块。
- if和else语句以及各自的缩进部分共同是一个完整的代码块。
在第二篇中学习到的操作符,在if语句中经常使用的比较运算符,如下:
操作符 | 描述 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 相等 |
!= | 不相等 |
另外,在程序开发过程中,通常需要判断多个条件,多个条件满足时才能执行后续代码,这个时候需要用到逻辑运算符,逻辑运算符可以把多个条件按照逻辑进行连接,Python中的逻辑运算符包括:and、or、not三种。
1.1条件1 and 条件2:条件1和条件2同时成立时才返回True。
# 判断一个数是否同时被4和6整除的条件语句,并且打印对应的结果 num = int(input('请输入一个整数:')) if num % 4 == 0 and num % 6 == 0: print("能够被4和6同时整除")
1.2条件1 or 条件2:条件1和条件2有一个成立就返回True。
# 写出判断一个数是否能够被3或者7整除,但是不能同时被3和7整除的条件语句,并打印结果 num = int(input("请输入一个数字:")) if (num % 3 == 0 or num % 7 == 0) and (num % 21 != 0): print("能够被3或者7整除,但是不能同时被3和7整除")
1.3not 条件:条件为真返回False,条件为假返回True。
is_man = False if not is_man: print("不是个男人")
说明,当多个逻辑运算符在一起时,可以进行换行,建议的格式如下:
# 导入包的时候,应该将导入的语句放在文件的顶部,这样方便下方代码可以在任何时候使用工具包中的代码 import random player = int(input("请输入您要出的拳:1(剪刀)/2(石头)/3(布)")) computer = random.randint(1, 3) print("您出的拳为:%s,电脑出的拳为:%s" % (player, computer)) if ((player == 1 and computer == 3) or (player == 2 and computer == 1) or (player == 3 and computer == 2)): print("电脑输了") elif player == computer: print("平局") else: print("电脑赢了")
if语句可以进行嵌套,如下:
ticket = input("是否买票了(N/Y)?") if ticket == "Y": safe = input("安检是否通过(N/Y)?") if safe == "Y": print("安检通过了,可以进候车室") else: print("安检未通过,不能进入候车室") else: print("未买票,请先买票")
注:所有的标准对象均可用于布尔测试,同类型的对象可以比较大小,每个对象天生都有True或者False值与其对应。
None,0,0.0+0.0j,"",[],()等的布尔值均为False。
1.4if语句的注意点
- 1.区间判断
score = float(input("请输入你的成绩:")) # 在某些语言里,判断区间不能连写,需要使用逻辑运算符来连接 score >= 0 and score < 60 # Python里可以使用连续的区间判断 if 60 > score >=0: print("不及格")
- 2.隐式类型转换
if 4: # if后面需要的是一个bool类型的值,如果if后面不是布尔类型,会自动转换成为布尔类型 print("hello world")
- 3.三元表达式(对if...else语句的简写)
例如如果x>y的结果为真,则a=12,否则a=13:
a=12 if x>y else 13
2.while循环
程序的三大流程分别为顺序(从上到下),分支(根据条件判断,决定执行代码的分支),循环(让特定代码重复执行)。
while语句的一般形式为:
while 条件: 循环体
实例,计算1+2+3+...99的和。
i = 1 count = 0 while i <= 100: count += i i += 1 # python中没有i++ print(count)
注:可以使用Ctrl+C来结束循环。
while...else语句
当while条件中为False时执行else代码块:
i = 1 while i < 10: print("i的值为:", i) i += 1 else: print("i的值为10,程序跳出while循环,执行else语句块内容")
如果while循环体的语句只有一条语句,则该语句可以和while在同一行。
i = 1 while i : print("无限循环")
3.for循环
for循环可以用来遍历任何序列,如列表和字符串等。
for循环的一般形式为:
for 变量名 in sequence: # in的后面必须是一个可迭代对象,目前接触的可迭代对象:字符串,列表,元祖,字典,集合,range 循环体
else:
没有通过break退出循环,循环结束后,会执行的代码
实例:
names=["zhangsan", "lisi", "wangwu", "boxiaoyuan"] for name in names: print(name)
应用场景:
在迭代遍历嵌套的数据类型时,例如一个列表包含了多个字典。
需求:要判断某一个字典中是否存在指定的值,如果存在,提示并且退出循环,如果不存在,在循环整体结束后,给出一个统一的提示。
students = [{"name": "小明", "sex": "男", "age": "18"}, {"name": "张红", "sex": "女", "age": "22"}] for student in students: if student.get("name") == "小山": break else: print("抱歉,没有找到小山")
4.range()函数
range()是内置的可以用来生成数字列表的方法,根据传入的值生成可迭代对象,顾头不顾尾,例如range(0,10,1),其中0为开始值(包括),10为结束值(不包括),1为步长,因此会生成[0,1,2,3,4,5,6,7,8,9]。
for i in range(0, 10, 1): print(i)
另外,也可以使用len方法结合range,遍历列表:
names = ["zhangsan", "lisi", "wangwu", "boxiaoyuan"] for i in range(len(names)): print(names[i])
5.break和continue
- break和continue在Python里只能用在循环语句里。
- break关键字用来结束for循环或者while循环,for...else或者while...else后的else均不执行,continue关键字用来结束for或者while的本次循环,然后接着执行下次循环。
break
i = 0 while i < 5: i += 1 if i == 3: break print(i) # 输出结果为1和2
continue
i = 0 while i < 5: i += 1 if i == 3: continue print(i) # 输出1 2 4 5
while...else,当while中遇到break也不会执行else中语句块
i = 0 while i < 5: i += 1 if i == 3: break print(i) # 1 2 else: print("执行了else中的内容")
6.pass语句
pass关键字在python里没有意义,只是单纯的用来占位,保证语句的完整性。
names = ["zhangsan", "lisi", "wangwu", "boxiaoyuan"] for name in names: if name == "wangwu": pass print("执行了pass") print("name的值:", name)