1. 程式人生 > >python自動化運維學習第四天--迴圈

python自動化運維學習第四天--迴圈

for迴圈

for迴圈用在序列裡,迴圈遍歷序列中的元素
語句格式:

for iterating_var in sequence:
    statement

for迴圈不僅可以遍歷列表還能遍歷字典

for k in dict1:print k   ##遍歷字典中的key
for k in dict1:print k,dict1[k]  ##遍歷字典中的key和value
for k in dict1.items():print k   ##遍歷字典中key、value組成的元組
for k,v in dict1.items(): print k,v   ##遍歷字典中的key和value,items方法返回的是列表
for k,v in dict1.iteritems(): print k,v ##同上條,iteritems方法返回的是個物件

for else語句

for ...:
    if ...:
        ..../pass
        break/continue/sys.exit()
else:
...

只有for迴圈正常結束才會執行else語句
break退出迴圈
continue退出本次迴圈
pass什麼也不執行,佔位
sys.exit()退出程式

range()函式

range()函式可建立一個整數列表

range([start,] stop[, step])

start: 計數從 start 開始。預設是從 0 開始。例如range(5)等價於range(0, 5);
stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
step:步長,預設為1。例如:range(0, 5) 等價於 range(0, 5, 1)
start和step不是必須的,stop必須有

xrange()函式

xrange() 函式用法與 range 完全相同,所不同的是生成的不是一個列表,而是一個生成器。
數字序列很大時,xrange()相對range()效能更好,不會佔用很大記憶體空間,迴圈中使用xrange效能更好

while迴圈

for迴圈用在有次數的迴圈上
while迴圈用在有條件控制的迴圈上

while expression:
    statement

while迴圈直到表示式為假時才退出,表示式是個邏輯判斷,必須返回一個True或False
while語句

while ...:
    if ...:
        ..../pass
        break/continue/sys.exit()
else:
...

跟for迴圈一樣,else語句也要等while正常退出時才會執行

練習1

  1. 有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?
    程式分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。
#!/usr/bin/python
a = [1,2,3,4]
for i in a:
    b = i * 100
    for j in a:
        if j != i:
            s = j * 10
            for k in a:
                if k != i and k != j:
                    t = b + s + k
                    print t
  1. 打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。
    程式分析:利用for迴圈控制100-999個數,每個數分解出個位,十位,百位。
#!/usr/bin/python
for i in xrange(100,1000):
    bai,shi,ge = i/100,i%100/10,i%10
    if i == bai**3 + shi**3 + ge**3:
        print i
  1. 兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請程式設計序找出三隊賽手的名單。
#!/usr/bin/python
# -*- coding:utf-8 -*-
l1 = ['x','y','z']
for a in l1:
    for b in l1:
        for c in l1:
            if a != b !=c != a and a != 'x' and c != 'x' and c != 'z':
                print "a --> %s, b --> %s, c --> %s" % (a, b, c)

練習2

  1. 將一個正整數分解質因數。例如:輸入90,打印出90=2 * 3 * 3 * 5。
    程式分析:對n進行分解質因數,應先找到一個最小的質數i,然後按下述步驟完成:
    (1)如果分解後商為1,則說明分解質因數的過程已經結束,打印出即可。
    (2)如果商不為1,則應打印出i的值,並用n除以i的商,作為新的正整數進行分解,
     重複執行第一步。
    (3)如果n不能被i整除,則i的值加1,重複執行第一步。
#!/usr/bin/python
# -*- coding: utf-8 -*-
n = raw_input("please input a number:")
if n.isdigit():
    n = int(n)
    i = 2
    if n == i:
        print n
    else:
        while n >= i:
            k = n % i
            if k == 0:
                print i
                n = n / i
            else:
                i += 1
else:
    print "%s is not a number!" % n
  1. 猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
    程式分析:採取逆向思維的方法,從後往前推斷。
#!/usr/bin/python
# -*- coding:utf-8 -*-
n = 1
for i in range(9):
    n = ( n + 1 ) * 2
    print "第%s天的桃子數:%s" % ((9 - i), n)