这一节我们将介绍python下的判断语句:if、while以及for三个循环,再加上break和continue两个关于循环控制的语句。如果有一定的编程基础对于本文的学习就只需要知道这几种循环语句在python下是如何使用的即可,如果是没有编程基础的童鞋,建议大家把下面的小例子敲到电脑中运行一下感受一下!(还是不要用拷贝的吧,手动输入电脑)

1.if 语句

if循环是各种语言中都有的判断语句,逻辑也很简单,if + 判断逻辑 --> 做A  如果满足这个逻辑做工作A ,else  做B 如果不满足那么做工作B。python下的if控制语法如下:

  1. if condition:                # if 接着判断语句 后加冒号,这是if 的用法  

  2.     do something    #  python 的冒号后面都要缩进,python是一种靠缩进来判断逻辑的  

  3. 语言!所以缩进尤为重要,如果缺失缩进程序运行会报错!  

  4. elif condition2:            # else if 语句在python下的语法!当然,这是可选的!  

  5.     do something  

  6. else:               # else语句也是可选的  

  7.     do something  


注:本节介绍的集中判断语句中缩进冒号尤为重要!大家要在使用中熟悉python中的缩进和冒号!

2.while 语句

相比其他语言,Python下的while循环除了需要添加冒号外还多了个可选的else 语句!这是大家经常会忽视的一点!


  1. while condition:          # while 语法就是这么简洁,while + 判断条件,如果满足这  

  2. 个判断条件则不断循环,直到不满足条件跳出循环。当然,也可以结合下面的 break 语句>跳出循环。  

  3.     do something  

  4. else:               # python下的 while 添加了个可选的 else 语句  

  5.     do something  


注: 对于while 你需要注意:


(1)尽量少用 while-loop,大部分时候foor-loop是个更好的选择

(2)重复检查你的while语句,确定测试的布尔表达式最终会变成False!

(3)如果不确定,就在while-loop的结尾打印出你要测试的值,观察他的变化!


3.for 语句

与 while 一样,Python的for循环也是添加了个可选的else语句:


  1. for i in range(1,5):    #  range(1,5)给出序列[1, 2, 3, 4]。默认地,range的步长为1。(所以 for i in range(1,5)等价于for i in [1, 2, 3, 4])如果我们为range提供第三个  

  2. 数,那么它将成为步长。例如,range(1,5,2)给出[1,3]。记住,range 向上 延伸到第二个数,即它不包含第二个数。  

  3.     do something  

  4. else:               # 可选,如果包含else,它总是在for循环结束后执行一次,除非遇到break语句。  

  5.     do something  


4.break 语句

与其他语言类似, break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。
注:如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。


5.continue 语句

continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环。


6.一个简单的小例子

使用" vim mygame.py "打开vim编辑器,然后输入下面的内容!

  1. # -*- coding: utf-8 -*-   

  2. # 呵呵,为什么加这一句?在本系列前篇中我已经提到,如果有种文字符在程序中,程序将无法运行。而我的注释都是中文的所以需要添加这一句,如果你想看看没有这句是什么样的,just try it!  

  3. # 这个例子是我根据《Learn Python The Hard Way》的例子31改的,中间有本节的for if while等语句,希望大家好好学习!  

  4. print "You enter a dark room with two doors. Do you go through door #1 or door #2?"  

  5. door = raw_input("> ")    # 本脚本一开始运行就会打印上句信息,会提示有两个们,请你输入1 或者2,本句的raw_input用于接收输入的参数,并赋值给door ,下面对door进行判断  

  6.   

  7. if door == "1":             # 使用if语句,如果door == 1 ,那么做下面的这些~  

  8.     print "There's a giant bear here eating a cheese cake.What do you do?"  

  9.     print "1. Take the cake."  

  10.     print "2. Scream at the bear."  

  11.   

  12.     bear = raw_input("> ")   # 有两个操作,请你选择1还是2  

  13.     if bear == "1":  

  14.         print "The bear eats your face off. Good job!"  

  15.     elif bear == "2":  

  16.         print "The bear eats your legs off. Good job!"  

  17.     else:  

  18.         print "Well, doing %s is probably better. Bear runs away." % bear  

  19.   

  20. elif door == "2":           # 通过elif 语句对door不等于1再次判断!  

  21.     print "You stare into the endless abyss at Cthuhlu's retina."  

  22.     print "1. Blueberries."  

  23.     print "2. Yellow jacket clothespins."  

  24.     print "3. Understanding revolvers yelling melodies."  

  25.       

  26.     live = 3  

  27.     insanity = raw_input("> ")  

  28.     if insanity == "1" or insanity == "2":  

  29.         print "Your body survives powered by a mind of jello. Good job!"  

  30.     else:  

  31.         while live > 0 : # 使用while对live进行判断  

  32.             print "You have %d seconds to live " % live  

  33.             live -= 1   

  34.         print "You got missed and killed yourself ,Good Job"  

  35.   

  36. else:  

  37.     print "You stumble around and fall on a knife and die."  

  38.     for i in range(1,4):        # 如上面讲到的range()函数,此处i会在三个循环中遍历1,2,3然后跳出循环!  

  39.         print "You ask for help %d times" % i  

  40.     print "Without help ,you die from not choice correct door,Good Job"  


保存并退出后使用 “python mygame.py” 运行它! 好好感受一下这个小程序!


7.and 和or

在Python下使用and和or执行布尔逻辑的盐酸(类似于C下的&&以及||),但是and/or与其他语言的相应操作有点不同,and和or并不返回布尔值True或者False,而是返回它们实际进行比较的值之一。
注:此处提一下,Python下只有0、''、[]、()、{}、None在布尔环境下为假,其他任何都为真。
所以在and运算时,自左至右的演算布尔表达式的值:如果表达式的所有的值都为真,那么and会返回最后一个值(and运算类似于&&,如果表达式都为真,会一直运行到最后一个才能知道整个表达式是否为真,从而会返回最后一个值)。如果布尔环境中有某个值为假,and会返回第一个假值(仍然用&&做比较,在计算时一旦出现假,整个表达式为假,所以也不必运行到最后,python会返回第一个假值)。
有了上面的经验,我们可以类推出or的演算逻辑:如果表达式都为假,or返回最后一个假值;如果表达式中有真值,or会返回第一个真值。(使用C下的||做比较,考虑一下!)
eg. 

  1. >>> 'a' and 'b'  

  2. 'b'  

  3. >>> '' and 'b'  

  4. ''  

  5. >>> 'a' and 'b' and 'c' and '' and 'x'  

  6. ''  

  7. >>> 'a' or 'b'  

  8. 'a'  

  9. >>> '' or 'b'  

  10. 'b'  

  11. >>> '' or [] or {}  

  12. {}  


那么我们在这介绍and和or,是不是and和or有强大的功能?还记得C语言下的 bool ? a : b 操作符么?整个表达式从左至右演算,先对bool运算进行判断如果bool表达式为真运行a,bool表达式为假则运行b。在Python下我们可以这样用:“ bool and a or b ”,所以表达式先进行and表达式的演算,如果bool为真,bool and a 演算值为a;如果bool为假,bool and a 演算值为bool ,所以需要继续计算 bool or b,因为bool为假,所以bool or b的演算值为b。
eg.

  1. >>> a = "first"  

  2. >>> b = "second"  

  3. >>> 1 and a or b   # 如我们预想的那样,bool运算为1时,“ bool and a or b ”表达式运行结果是a  

  4. 'first'  

  5. >>> 0 and a or b   # bool运算为0时,“ bool and a or b ”表达式运行结果是b  

  6. 'second'  


然而,由于这种Python表达式单单只是进行布尔逻辑运算,并不是语言的特定构成,这是and-or技巧和C语言>中的bool ? a : b语法非常重要的不同。如果a为假,表达式就不会按你期望的那样工作了。
eg.

[python] view plaincopy在CODE上查看代码片派生到我的代码片

  1. >>> a = ""  

  2.       >>> b = "second"  

  3. >>> 1 and a or b   # 如上面提到的这样a值为假时,即使bool运算为真,“ bool and a or b ”表达式运行结果是b  

  4. 'second'  

所以and-or技巧,也就是“ bool and a or b ”表达式,当a在布尔环境中值为假时,不会像C语言中bool ? a : b语法那样工作。所以我们需要确保a的值不会为假,最常用的方式是使a成为[a]、b成为[b],然后使用返回值列表的第一个元素,所以就是a或b中的某一个。
eg.

  1. >>> a = ""  

  2. >>> b = "second"  

  3. >>> (1 and [a] or [b])[0]  # 使用[a]和[b],他们都不是非空列表,所以它们绝不为假,即使a是0或者''等其他假值,列表[a]也是真值,此时1 and [a] or [b]的返回值就是[a],我们在最后使用[0]取该列表第一个元素---也就是a啦!  

  4. ''