python自動化運維學習第四天--迴圈
阿新 • • 發佈:2018-12-04
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、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
- 打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等於該數本身。例如: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
- 兩個乒乓球隊進行比賽,各出三人。甲隊為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
- 將一個正整數分解質因數。例如:輸入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
- 猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
程式分析:採取逆向思維的方法,從後往前推斷。
#!/usr/bin/python
# -*- coding:utf-8 -*-
n = 1
for i in range(9):
n = ( n + 1 ) * 2
print "第%s天的桃子數:%s" % ((9 - i), n)