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 ).