初识Python(6)__Python条件和循环

If 语句:

 If expression:

     Expr_true_suite

 

 多重条件表达式

单个 if 语句可以通过使用布尔操作符 and , or 和 not实现多重判断条件或是否定判断条件.

if not warn and (system_load >= 10):

print "WARNING: losing resources"

warn += 1

 

 

else 语句

如果 if 语句的条件表达式的结果布尔值为假, 那么程序将执行 else 语句后的代码. 它的语法你甚至可以猜到:

if expression:

    expr_true_suite

else:

    expr_false_suite

样例代码:

if passwd == user.passwd:
    ret_str = "password accepted"
    id = user.id valid = True

else:
    ret_str = "invalid password entered... try again!"
    valid = False

 

可以在 while 和 for 循环中使用 else 语句. 在循环中使用时, else子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.

# -*- coding: cp936 -*-

 def showMaxFactor(num):
    count = num / 2
    while count > 1:
       if num % count == 0:
            print 'largest factor of %d is %d' %(num, count)
            break
        count -= 1    #直到找到约数

    else:
        print num, 'is primer'

 for eachNum in range(35,40):

    showMaxFactor(eachNum)

   
>>>
largest factor of 35 is 7

largest factor of 36 is 18

37 is primer

largest factor of 38 is 19

largest factor of 39 is 13

>>> 

 

elif (即 else-if )语句

if expression1:
    expr1_true_suite

elif expression2:
    expr2_true_suite

elif expressionN:
    exprN_true_suite

else:
    none_of_the_above_suite

 

条件表达式(即"三元操作符")      #这个操作应该很牛逼···精炼,和列表解析表达式有得一拼

背景:Python 在很长的一段时间里没有条件表达式(C ? X : Y), 或称三元运算符. ( C 是条件表达式; X 是 C 为 True 时的结果, Y 是 C 为 False 时的结果)

Python 2.5 集成的语法确定为: X if C else Y

>>> x, y = 4, 3
>>> smaller = x if x < y else y
>>> smaller
3

 

while 语句

while 语句是一个条件循环语句. 与 if声明相比, 如果 if 后的条件为真, 就会执行一次相应的代码块. 而 while 中的代码块会一直循环执行, 直到循环条件不再为真.

 

#while 循环的语法如下:

while expression:
    suite_to_repeat

 #while 循环的 suite_to_repeat 子句会一直循环执行, 直到 expression 值为布尔假.
#样例:

count = 0

while (count < 9):
    print 'the index is:', count
    count += 1

 

for 语句

for语句提供了 Python 中最强大的循环结构.它可以遍历序列成员, 可以用在 列表解析 和 生成器表达式中, 它会自动地调用迭代器的 next()方法, 捕获 StopIteration 异常并结束循环(所有这一切都是在内部发生的).

#语法如下:

for iter_var in iterable:
    suite_to_repeat

 

每次循环, iter_var 迭代变量被设置为可迭代对象(序列, 迭代器, 或者是其他支持迭代的对象)的当前元素, 提供给 suite_to_repeat 语句块使用.

#样例:

>>> for eachLetter in 'Names':
... print 'current letter:', eachLetter
...

current letter: N
current letter: a
current letter: m
current letter: e
current letter: s

 #or通过序列项迭代

>>> nameList = ['Walter', "Nicole", 'Steven', 'Henry']
>>> for eachName in nameList:
... print eachName, "Lim"
...

Walter Lim
Nicole Lim
Steven Lim
Henry Lim

###使用项和索引迭代###
两全其美的办法是使用内建的 enumerate() 函数, 它是 Python 2.3 的新增内容. 代码如下:

>>> nameList = ['Donn', 'Shirley', 'Ben', 'Janice',
... 'David', 'Yen', 'Wendy']

>>> for i, eachLee in enumerate(nameList):
... print "%d %s Lee" % (i+1, eachLee)
...

1 Donn Lee
2 Shirley Lee
3 Ben Lee
4 Janice Lee
5 David Lee
6 Yen Lee
7 Wendy Lee

 

 

关于enumerate() 函数:

在同时需要用到index和value值的时候可以用到enumerate,参数为可遍历的变量,如字符串,列表等,返回enumerate类。

###例:

import string

s = string.ascii_lowercase
e = enumerate(s)
print s

print list(e)

输出结果为:

 [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'),

 (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15,

 'p'), (16, 'q'), (17, 'r'), (18, 's'), (19, 't'), (20, 'u'), (21, 'v'), (22, 'w

'), (23, 'x'), (24, 'y'), (25, 'z')]

 

###用enumerate将string中的1都找出来,用enumerate实现:

def fun(line):

    return  ((ids,int(val)) for ids,val in enumerate(line) if val != '0')
print list(fun("000111000111"))

 输出结果为:
[(3, 1), (4, 1), (5, 1), (9, 1), (10, 1), (11, 1)]

 

参考于:http://www.2cto.com/kf/201212/179579.html

 

关于range() 内建函数

### range() 的完整语法###
Python 提供了两种不同的方法来调用 range() . 完整语法要求提供两个或三个整数参数:

range(start, end, step =1)

range() 会返回一个包含所有 k 的列表, 这里 start <= k < end , 从 start 到 end , k 每次递增 step . step 不可以为零,否则将发生错误.

>>> range(2, 19, 3)
[2, 5, 8, 11, 14, 17]

如果只给定两个参数,而省略 step, step 就使用默认值 1 .

>>> range(3, 7)
[3, 4, 5, 6]

我们来看看解释器环境下的例子

>>> for eachVal in range(2, 19, 3):
... print "value is:", eachVal
...

value is: 2
value is: 5
value is: 8
value is: 11
value is: 14
value is: 17

 

###range() 简略语法###
range() 还有两种简略的语法格式:

range(end)

range(start, end)

我们在第 2 章看到过最短的语法 接受一个值, start 默认为 0 , step 默认为 1 , 然后

range()返回从 0 到 end 的数列.
>>> range(5)
[0, 1, 2, 3, 4]

range() 的中型版本和完整版本几乎完全一样, 只是 step 使用默认值 1 . 现在我们在
Python 解释器中试下这条语句:

>>> for count in range(2, 5):
... print count
...

2
3
4

 

 

 

break 语句

break 语句可以结束当前循环然后跳转到下条语句

###样例:

count = num / 2

while count > 0:
    if num % count == 0:
        print count, 'is the largest factor of', num
        break
    count -= 1

 

continue 语句

当执行遇到continue 语句时, 程序会终止当前循环,并忽略剩余的语句, 然后回到循环的顶端. 在开始下一次迭代前,如果是条件循环, 我们将验证条件表达式.如果是迭代循环,我们将验证是否还有元素可以迭代. 只有在验证成功的情况下, 我们才会开始下一次迭代.

valid = False

count = 3

while count > 0:
    input = raw_input("enter password")
# check for valid passwd
    for eachPasswd in passwdList:
        if input == eachPasswd:
            valid = True
            break
        if not valid: # (or valid == 0)
            print "invalid input"
            count -= 1
        continue
        else:
             break

这里例子结合使用了 while , for , if , break 以及 continue , 用来验证用户输入. 用户有三次机会来输入正确的密码, 如果失败, 那么 valid 变量将仍为一个布尔假( 0 ), 然后我们可以采取必要的操作阻止用户猜测密码.

 

pass 语句

如果你在需要子语句块的地方不写任何语句, 解释器会提示你语法错误. 因此, Python 提供了pass 语句, 它不做任何事情。

def foo_func():
    pass

或是

if user_choice == 'do_calc':
    pass else:
        pass

这样的代码结构在开发和调试时很有用, 因为编写代码的时候你可能要先把结构定下来,但你不希望它干扰其他已经完成的代码. 在不需要它做任何事情地方, 放一个pass 将是一个很好的主意.

 

 

辅助语句在条件及循环语句中的应用范围

 

pass 在任何需要语句块(一个或多个语句)的地方都可以使用(例如 elif , else , clasa , def , try , except , finally ).

 

posted @ 2014-11-14 14:09  专注Python  阅读(263)  评论(0编辑  收藏  举报