1. 程式人生 > >python 學習記錄(7)-迴圈/結構化程式(氣泡排序)

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時外迴圈情況
>>>