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