【原创文章】欢迎正常授权转载(联系作者)
【反对恶意复制粘贴,如有发现必维权】
【微信公众号原文传送门】
条件判断与循环是计算机自动化的基础,本节教程将简单介绍Python下判断与循环的基本使用。
01 条件判断
(1)if 条件判断
条件判断主要与布尔值打交道,如果不熟悉这一基本数据类型,可以查看我之前的文章(点我就到),话不多说直接上语法。
# 单条件
if 条件1:
业务代码1
else:
业务代码2
# 多条件情况
if 条件1:
业务代码1
elif 条件2:
业务代码2
....
elif 条件k:
业务代码k
else:
其他
单条件时,很简单也很好理解,条件1为真执行业务代码1,不满足执行业务代码2。多条件时,从第一个条件开始,哪一个条件为真就执行对应的业务代码,执行完后直接跳出该条件判断代码块。
需要强调的是:一定注意代码中的空格及对齐,与c++不同,为了开发者高效的开发,Python中减去了一些繁琐的操作,例如:一句代码结束不使用分号,代码块不使用大括号而使用对齐等。因此,很多初学者总会出现,代码没有错,但是运行时总是出现报语法错误,多半是对齐的问题。
(2)条件表达式
条件表达式除了可以使用基本的逻辑运算符和关系运算符外,Python还支持一些特殊的运算,总结如下:
- 大于或大于等于 ---- > 或 >=;
- 小于或小于等于 ---- < 或 <=;
- 等于 ---- ==;
- 不等于 ---- !=;
- 与 ---- and;
- 或 ---- or;
- 非 ---- not;
- 是 ---- is;
- 包含 ---- in
a = 10
if 0 < a <= 12: # Python中支持这样的关系表达式连写
print('ha ha ha ')
else:
print('he he he')
if a != 10: # 此时a等于10 因此下面的业务代码不执行,跳到下一条件
print('老子不是10')
elif not a: # a=10,对应的布尔值为True,not a 是False
print('a的布尔值是False')
else:
print(a)
运行结果:
ha ha ha
10
着重说一下 is 和 in 的用法。
is是判断比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。先来看代码。
a = 10
b = 10
st = 'I\'m a boy!'
st2 = 'I\'m a boy!'
print('a is b:', a is b)
print('st is st2:', st is st2)
ls = [12, 45, 'st', a]
ls2 = [12, 45, 'st', a]
t = (12, 's')
t2 = (12, 's')
dic = {'name': 'Tom'}
dic2 = {'name': 'Tom'}
print('ls is ls2:', ls is ls2)
print('t is t2:', t is t2)
print('dic is dic2:', t is t2)
运行结果:
a is b: True
st is st2: True
ls is ls2: False
t is t2: False
dic is dic2: False
上述代码中a,b明显是不同的变量,只是有同样的值,根据is的功能来看,a is b的结果应该是False,为什么会判断他们是一样的呢?而且似乎对于整数和字符串而言,is与 == 没有什么区别。其实这与Python内部的缓存机制有关,Python会对一些较小的对象进行缓存,下次用的时候直接从缓存中获取这个小对象,上面代码中的整数和字符串就属于这种情况,因此,a is b的结果True。当对象较大时就会发生变化,例如下面的代码:
a = 10 * 1000000000000000000
b = 10 * 1000000000000000000
st = 'I\'m a boy!' * 1000 # 表示将前面的字符串重复1000次并连接
st2 = 'I\'m a boy!' * 1000
print('a is b:', a is b)
print('st is st2:', st is st2)
运行结果:
False
False
结果是不是不一样了,这次对象较大,a 与 b就不是同一个对象了。
通常在条件表达式中,in 用于判断对象是否存在另一可迭代对象(包含多个子对象)中,这里的可迭代对象不包括生成器。具体用法如下所示:
# 字符串中
st = 'I\'m a boy!'
print('a' in st)
# 列表中
ls = [12, 45, 'st']
print(12 in ls)
# 元组中
t = (12, 's')
print('s' in t)
# set 中
s = set([4, 4, 5, 6, 7]) # 这里是 set 数据类型
print(s)
print(4 in s)
执行结果:
True
True
True
{4, 5, 6, 7}
True
02 循环
(1)for 循环
for 元素 in 迭代对象:
循环体
语法非常简单,每次循环时,从迭代对象中依次“拿出”元素,然后执行循环体,直到迭代对象中没有元素时结束。(这里“拿出”只是形象的说法,并不是真的将迭代对象中的元素拿出来,这个过程只获得元素,并不对迭代对象进行实质性的改变。)
sl = 'abcdefg'
for s in sl:
print(sl)
ls = [1, 2, 3, 4, 5]
for num in ls:
print(num)
是不是很方便?直接就获得对象,不用像c语言一样使用计数加索引的方式来处理。
有时候我们只是要循环固定次数,怎么做呢?配合 range 函数就可以了。
for i in range(需要循环的次数):
循环体
有时候有了循环的迭代对象,但需要知道当前元素的索引,添加一个变量来计数吗?其实Python还提供了 enumerate 函数可以快速简单的实现这一常用需求。
sl = 'abcd'
for index, s in enumerate(sl):
print(index, s)
运行结果:
0 a
1 b
2 c
3 d
(2)while 循环
while 条件表达式:
循环体
执行到while 循环代码块时,先判断条件表达式的值,结果是True时执行循环体,之后再判断-循环,直到条件表达式的值为False时停止。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
执行结果:
2500
(3)循环中的控制
循环中的控制主要指在一定特殊情况下跳过或跳出循环,主要涉及到 break 与 continue 语句。 break :直接跳出整个循环; continue :从此处跳过后续循环内容。
for 元素 in 迭代对像:
...
if 跳出循环条件:
break
if 跳过循环条件:
continue
...
while 循环条件:
...
if 跳出循环条件:
break
if 跳过循环条件:
continue
...
本文配套源代码下载地址:
关注下方公众号,回复关键字即可获取
回复“ Python基础教程源代码 ”获取。