Python中的分支和循环


使用编程语言编写代码时,难免不遇到需要做逻辑判断或者循环处理事件的时候,有时还需要结合逻辑判断和循环体,在Python中也有相应的支持,和其它语言一样,也是for、if、while语句,只是用法稍微有区别,这篇文章讲解的具体内容有:

  • for循环
    1. for_each方式
    2. enumerate方式
    3. 索引迭代方式
    4. for循环嵌套
    5. for … else用法
    6. break用法
    7. continue用法
  • if条件语句
    1. if-elif-else方式
    2. if表达式中的小技巧
  • while循环体
    1. 有限循环
    2. 无限循环
    3. while循环嵌套
    4. while...else用法

for循环

for_each方式
  1. 遍历字符串时,会把字符串中的每个字符遍历出来:
str = 'hello!'
for x in str:
    print x

打印结果:

h
e
l
l
o
!
  1. 遍历列表时,会把列表中的每个元素遍历出来:
list = ['hello', 'world']
for x in list:
    print x

打印结果:

hello
world
  1. 遍历字典时,会把字典中的每个key值遍历出来:
dict = {'a': 'hello', 'b': 'world'}
for x in dict:
    print x

打印结果:

a
b
enumerate方式

有时候我们希望遍历一个列表时,把对应的下标也获取到,这时可以用到enumerate:

names = ['lilei', 'xiaoming', 'zhangdan']
for index, name in enumerate(names):
    print (index, name)

打印结果:

(0, 'lilei')
(1, 'xiaoming')
(2, 'zhangdan')

思考:如何遍历字典中对应的key和value呢?

info = {'lilei': '170', 'xiaoming': '175', 'zhangdan': '165'}
for key, value in info.items():
    print (key, value)

打印结果:

('lilei', '170')
('xiaoming', '175')
('zhangdan', '165')

索引迭代方式

遍历列表,依然可以使用取下标方式获取元素值,此时借助range()/xrange()函数:

fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
    print fruits[index]

打印结果:

banana
apple
mango

for循环嵌套

像很多其它语言一样,Python也是支持循环体嵌套的,嵌套个数不限,这里只举嵌套两层的例子:

heights = ['170', '175', '180']
weights = ['55', '57', '60']
for height in heights:
    for weight in weights:
        print 'probability:' + height, weight

打印结果:

probability:170 55
probability:170 57
probability:170 60
probability:175 55
probability:175 57
probability:175 60
probability:180 55
probability:180 57
probability:180 60

for … else用法

for … else它表达了这样的功能,当for循环体正常执行完时,它执行else里的代码块,当用break中断循环时,它不会执行else里的代码:

a = [1, 2, 3, 4, 5]
for x in a:
    if x == 3:
        print '执行了break'
        break
else:
    print '执行了else'

打印结果:

执行了break

break用法

break代表立即中断当前循环体,即忽略掉当前循环体后序过程,当有多层循环体嵌套时,并不影响上一层循环:

heights = ['170', '175', '180']
weights = ['55', '57', '60']
for height in heights:
    for weight in weights:
        if height == '175':
            break
        print 'probability:' + height, weight

打印结果:

probability:170 55
probability:170 57
probability:170 60
probability:180 55
probability:180 57
probability:180 60

continue用法

continue代表立即跳过当前循环体正在执行的过程,执行当前循环体的下一个执行过程:

heights = ['170', '175', '180']
weights = ['55', '57', '60']
for height in heights:
    for weight in weights:
        if weight == '57':
            continue
        print 'probability:' + height, weight

打印结果:

probability:170 55
probability:170 60
probability:175 55
probability:175 60
probability:180 55
probability:180 60

if条件语句

if-elif-else方式

很多语言中都有if-else if-else语句,在Python中只是把else if简写成了elif,功能还是一样的,但是Python中并没有switch-case语句,切记,以下给出if-elif-else例子:

names = ['lilei', 'xiaoming', 'zhangdan']
height = 0
for name in names:
    if name == 'lilei':
        height = '170'
    elif name == 'xiaoming':
        height = '175'
    elif name == 'zhangdan':
        height = '180'
    else:
        pass
    print height

pass代表什么也不做,占位用
打印结果:

170
175
180

if表达式中的小技巧

  1. 当if语句中需要判断多个条件时,如何写呢,可以用关键字and表示所有条件都满足,或者用关键字or表示满足其中一个条件:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for x in a:
    if x > 2 and x < 5:
        print x

打印结果:

3
4

当然可以更简洁点写:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for x in a:
    if 2< x < 5:
        print x
  1. 如何判断一个字符串包含某个字符:
b = 'hello'
if 'o' in b:
    print 'True'
else:
    print 'False'

打印结果:

True
  1. 如何判断一个列表中包含某个元素:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
if 1 in a:
    print 'True'
else:
    print ‘False’

打印结果:

True

当列表中元素为其它类型时,也是同样用法

while循环体

有限循环

打印从0到99个数:

i = 0
while i < 100:
    print i
    i += 1

无限循环

一直打印‘ha’,这里的1也可以改成True或者不为空的字符串、列表、字典

while 1:
    print 'ha'

while循环嵌套

while循环嵌套和上面所说到的for循环嵌套类似:

i = 1
while i < 3:
    j = 1
    while j < 3:
        print i * j
        j += 1
    i += 1

打印结果:

1
2
2
4

while循环体还可以和for循环体相互嵌套:

for i in range(1,3):
    j = 1
    while j < 3:
        print i * j
        j += 1

打印结果:

1
2
2
4

while...else用法

while...else用法和上面说到的for...else用法类似:

a = [1, 2, 3, 4, 5]
i = 1
while i < 5:
    if i == 3:
        print '执行了break'
        break
    i += 1
else:
    print '执行了else'

打印结果:

执行了break
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容