1.2.3 Python中的for迴圈和while迴圈
阿新 • • 發佈:2019-02-07
For迴圈的基本結構是:for 迴圈規則:操作語句1,簡單迴圈從基本結構看,其有著同if條件語句類似的地方:都有冒號;語句塊都要縮排。這些是不可或缺的。>>> a="hello">>> for i in a: print ihello也可以通過使用索引(偏移量)得到序列物件的某個元素,所以,還可以通過下面的迴圈方式實現同樣的效果:>>> a="hello">>> for i in range(len(a)): print a[i]hello以上的迴圈舉例中,顯示了對字串的字元依次獲取,同時涉及了列表,再看下面對列表的迴圈:>>> b=["hello","I love python","zhangsan"] >>> b['hello', 'I love python', 'zhangsan']>>> for w in b: print whelloI love pythonzhangsan>>> for w in range(len(b)): print b[w]helloI love pythonzhangsan2,range(start,stop[,step])range()是個內建函式,一般形式是range(start,stop[,step])。start:開始數值,預設為0,即如果不寫這項,就是認為start=0。stop:結束的數值,必須要寫。step:變化的步長,預設是1,即若不寫則認為步長為1,堅決不能為0。關於range()函式注意以下幾點:這個函式可以建立一個數字元素組成的列表。這個函式最常用於for迴圈。函式的引數必須是整數,預設從0開始。返回值是類似[start,start+step,start+2*step,...]的列表。step預設值是1。如果不寫,就是按照此值。如果step是正數,返回list的最後的值不包含stop值,即start+istep這個值小於stop;如果step是負數,start+istep的值大於stop。step不能等於零,如果等於零,就報錯。>>> range(5) #stop=5,別的都沒有寫,含義就是range(0,5, 1) [0, 1, 2, 3, 4] #從0開始,步長為1,直到小於5的那個數>>> range(0,5)[0, 1, 2, 3, 4]>>> range(0,5,1)[0, 1, 2, 3, 4]>>> range(1,5) #start=1[1, 2, 3, 4]>>> range(0,5,2) #step=2,每個元素等於start+i*step[0, 2, 4]下面注意負數:>>> range(-5)[]>>> range(0,-5)[]>>> range(0)[]>>> range(0,-5,-1) [0, -1, -2, -3, -4]>>> range(0,-5,-2)[0, -2, -4]找出100以內偶數:>>> range(0,100,2)[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]找出100以內的能夠被3整除的正整數:>>> a=[]>>> for i in range(1,100): if i % 3 == 0: a.append(i)>>> a[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]也可以這樣:>>> range(3,100,3)[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]3,for物件:所有的序列型別物件都能夠用for來迴圈。for迴圈獲取字典要特別注意:>>> a{'age': '18', 'name': 'zhangsan'}>>> for i in a: print i , a[i]age 18name zhangsan這是一種獲得字典鍵/值對的方法,通常情況下較常用,效率也能滿足一般需要。>>> a{'age': '18', 'name': 'zhangsan'}>>> for k,v in a.items(): print k,vage 18name zhangsan這兩種方法也能夠實現同樣的效果,特別是第二個iteritems()效率挺高。注意下面的方法:>>> for k in a.keys(): print k,a[k]age 18name zhangsan這種方法所達到的效果跟前面一樣,但不太提倡,因為效率比較低。>>> for v in a.values(): print v18zhangsan>>> for v in a.itervalues(): print v18zhangsan單獨取values,推薦第二種方法。4,zip()zip()是什麼東西?在互動模式下用help(zip)檢視一下>>> a = "hello">>> b = "world">>> zip(a,b)[('h', 'w'), ('e', 'o'), ('l', 'r'), ('l', 'l'), ('o', 'd')]>>> c =[1,2,3]>>> d = [4,5,6,7]>>> zip(c,d)[(1, 4), (2, 5), (3, 6)]如果序列長度不同,那麼就以“the length of the shortest argument sequence”為準。當操作字典時:>>> s = {"name":"zhangsan"}>>> t = {"age":"18"}>>> zip(s,t)[('name', 'age')]當只有一個序列時:>>> zip(a)[('h',), ('e',), ('l',), ('l',), ('o',)]>>> b'world'>>> b=[1,2,3]>>> zip(b)[(1,), (2,), (3,)]兩個列表組合:>>> a=[1,2,3]>>> b=["python","www.python.com","zhangsan"]>>> c=[]>>> for x,y in zip(a,b): c.append(str(x) + ":" + y)>>> c['1:python', '2:www.python.com', '3:zhangsan']5,列表解析:>>> a = [" hello"," world","zhangsan "] #有的前面有空格,有的後面有空格>>> [i.strip() for i in a] #去掉元素前後的空格['hello', 'world', 'zhangsan']6,while迴圈:while 條件:結果7,break和continuebreak的含義就是要在這個地方中斷迴圈,跳出迴圈體。#!/usr/bin/env python#coding:utf-8a = 8while a:if a % 2 == 0:breakelse:print "%d is odd number"%aa = 0print "%d is even number"%a而continue則是要從當前位置(即continue所在的位置)跳到迴圈體的最後一行的後面(不執行最後一行)#!/usr/bin/env python#coding:utf-8a = 9while a:if a % 2 == 0:a -= 1continue #如果是偶數,就返回迴圈的開始else:print "%d is odd number"%a #如果是奇數,就打印出來a -= 18,while...elsewhile...else有點類似於if...else,只需要一個例子就理解了,當然,一遇到else,就意味著已經不在while迴圈內了。#!/usr/bin/env pythoncount = 0while count < 5:print count, " is less than 5"count = count + 1else:print count, " is not less than 5"9,for...else除了有while...else外,還可以有for...else,這個迴圈也通常用於跳出迴圈之後要做的事情。#!/usr/bin/env python# coding=utf-8from math import sqrtfor n in range(99, 1, -1):root = sqrt(n)if root == int(root):print nbreakelse:print "Nothing."