python 學習記錄(7)-迴圈/結構化程式(氣泡排序)
1.1 while 迴圈
#!/usr/bin/python
# -*- coding: UTF-8 -*-
i = 1
while i <10:
i = i + 1
print i
# while迴圈
numbers = raw_input("輸入幾個數字,用逗號分隔:").split(",") #去除逗號
print numbers #輸出列表
x = 0
while x < len(numbers): #輸出列表元素
print numbers[x]
x += 1
# 帶else子句的while迴圈
x = input("輸入x的值:")
i = 0
while(x <> 0):
if(x > 0):
x -= 1
else:
x += 1
i = i + 1
print "第%d次迴圈:" %i, x
else:
print "x等於0:", x
輸出:
>>>
2
3
4
5
6
7
8
9
10
輸入幾個數字,用逗號分隔:10,12,15
['10', '12', '15']
10
12
15
輸入x的值:7
第1次迴圈: 6
第2次迴圈: 5
第3次迴圈: 4
第4次迴圈: 3
第5次迴圈: 2
第6次迴圈: 1
第7次迴圈: 0
x等於0: 0
1.2 for 迴圈
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# for in語句
for x in range(-1, 2):
if x > 0:
print "正數:",x
elif x == 0 :
print "零:",x
else:
print "負數:",x
else:
print "迴圈結束"
# 傳統for迴圈的實現
x = 0
while x < 5:
print x
x = x + 2
for x in range(0, 5, 2):
print x
輸出:
>>>
負數: -1
零: 0
正數: 1
迴圈結束
0
2
4
0
2
4
對list實現迴圈賦值
>>> l = [[None]*3 for x in range (6)]
>>> l
[[None, None, None], [None, None, None], [None, None, None], [None, None, None], [None, None, None], [None, None, None]]
>>> l = [[1]*3 for x in range (6)]
>>> l
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
>>> l = [[x]*3 for x in range (6)]
>>> l
[[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5]]
>>> l = [[x]*2 for x in range (6)]
>>> l
[[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5]]
>>> l = [x*1 for x in range (6)]
>>> l
[0, 1, 2, 3, 4, 5]
>>> l = [x*2 for x in range (6)]
>>> l
[0, 2, 4, 6, 8, 10]
>>> l = [x*2+3 for x in range (6)]
>>> l
[3, 5, 7, 9, 11, 13]
>>>
1.3 break 和continue 語句
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# break語句
x = input("輸入x的值:")
y = 0
for y in range(0, 100):
if x == y:
print "找到數字:", x
break
else:
print "沒有找到"
輸出:
>>>
輸入x的值:78
找到數字: 78
>>>
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# continue語句
x = input("輸入x的值:")
y = 0
for y in range(0, 100):
if x <> y:
print "y=:", y
continue
else:
print "x-", x
break
輸出:
>>>
輸入x的值:5
y=: 0
y=: 1
y=: 2
y=: 3
y=: 4
x- 5
>>>
1.4 氣泡排序
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# xrange() #xrange用法
xrange([start],stop[,step]) range將返回一個普通列表,但是xrange將返回一個特殊目的物件,將顯示為其自身的特殊方式
x = xrange(0,8)
print x
print x[0]
print x[7]
# 氣泡排序
def bubbleSort(numbers): # 冒泡演算法的實現
for j in xrange(len(numbers) - 1, -1, -1):
for i in xrange(j):
if numbers[i] > numbers[i+1]: # 把數值小的數字放到頂端
numbers[i], numbers[i+1] = numbers[i+1], numbers[i]
print numbers
def main(): # 主函式
numbers = [23, 12, 9, 15, 6]
bubbleSort(numbers)
if __name__ == '__main__':
main()
關於步長為負數時 range的解釋,
>>> for j in xrange(5, 1, -1):
print j
輸出:
5
4
3
2
也就是第一個引數減1,
為了使迴圈看起來更容易,對輸出時加了些說明,情況如下:
# 氣泡排序
def bubbleSort(numbers): # 冒泡演算法的實現
for j in xrange(len(numbers) - 1, -1, -1):
print '\n'
print "第j=%d時外迴圈情況"%j
for i in xrange(j):
print "第i=%d次比較 "%i
if numbers[i] > numbers[i+1]: # 把數值小的數字放到頂端
numbers[i], numbers[i+1] = numbers[i+1], numbers[i]
#該寫法等同於C中的b = numbers[i], numbers[i] = numbers[i+1], numbers[i+1] = b,分行書寫證實可用
print numbers
def main(): # 主函式
numbers = [23, 12, 9, 15, 6, 27]
bubbleSort(numbers)
if __name__ == '__main__':
main()
輸出:整個排序中相鄰比較的過程
>>>
第j=5時外迴圈情況
第i=0次比較
[12, 23, 9, 15, 6, 27]
第i=1次比較
[12, 9, 23, 15, 6, 27]
第i=2次比較
[12, 9, 15, 23, 6, 27]
第i=3次比較
[12, 9, 15, 6, 23, 27]
第i=4次比較
[12, 9, 15, 6, 23, 27]
第j=4時外迴圈情況
第i=0次比較
[9, 12, 15, 6, 23, 27]
第i=1次比較
[9, 12, 15, 6, 23, 27]
第i=2次比較
[9, 12, 6, 15, 23, 27]
第i=3次比較
[9, 12, 6, 15, 23, 27]
第j=3時外迴圈情況
第i=0次比較
[9, 12, 6, 15, 23, 27]
第i=1次比較
[9, 6, 12, 15, 23, 27]
第i=2次比較
[9, 6, 12, 15, 23, 27]
第j=2時外迴圈情況
第i=0次比較
[6, 9, 12, 15, 23, 27]
第i=1次比較
[6, 9, 12, 15, 23, 27]
第j=1時外迴圈情況
第i=0次比較
[6, 9, 12, 15, 23, 27]
第j=0時外迴圈情況
>>>