python3練習100題——005


 繼續做題~答案都會經過py3測試
原題網址:http://www.runoob.com/python/python-exercise-example5.html

題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。

我的代碼:

l=[]
for i in range(3):
    x=int(input("please input a number:"))
    l.append(x)
l.sort()
print(l)

思考:利用了可以對列表進行排序的sort函數,如果不能用呢?——在題目下面的答案中看到了冒泡排序法,而且應該考慮針對多個整數排序。當年學C語言的時候也有學過,感覺有點繞又忘啦~還是應該再學習下!以下代碼來自原題下面的評論:

  1. 首先 定義一個對list中的int冒泡比對的函數:
    def Sort(list):
        n = len(list)
        for i in range(1, n):                         #i可以取的值是[1,n-1] 冒泡法比較的循環就是要少一次,最后最小那個不用比就出來了 for j in range(1, n - i + 1):             #取1為下限,保證j-1位,最開始從0位開始比 取n-i+1為上限,保證j能夠取到n-i位 if list[j - 1] > list[j]:             #從前到后的比較:最先確定最后的值
                    list[j - 1], list[j] = list[j], list[j - 1]
                print(list)
        for i in range(0, n):
            print(list[i])

    要用到兩個循環,第一個是規定比對到的位數,一次循環從最末尾確定一位最大值,第二個用來兩兩比對。 循環到上下限有點難確定。

  2. 定義一個讀入函數:
    def inputData():
        list_first = []
        while True:
            a = input("please input num:".strip())     #strip()去除輸入字符前后的空格 if len(a) == 0:                            #空白時停止讀入的循環 return list_first
            else:
                list_first.append(int(a))

     

  3. 讓函數直接被調用:
    if __name__ == '__main__':         
        lt = inputData()
        print("the list is:",lt)
        Sort(lt)

    用這個if語句,讓這個py文件直接使用的時候,函數直接被調用;也可以作為模塊中的函數被引入到別的py文件。

 

分析很規范的答案~學到了冒泡排序算法的思想,也更加了解了寫py文件的格式:比如如何定義函數,運行文件的時候直接調用

關於冒泡排序法,根據上面的改寫了一個由前向后確定由小到大數字的方式:

def sort(list):
    n=len(list)
    for i in range(0,n-1):               #上下限差值n-1
        for j in range(i,n-1)[::-1]:   #第一次循環上下限差值n-1
            if list[j+1]<list[j]:
                list[j+1],list[j] = list[j],list[j+1]
            print(list)
    for x in range(0,n):
        print(list[x])

發現循環的上下標、比較的方向都不是最重要的,重要的是掌握思想:對於n個元素,比較n-1輪(第一個循環);第一輪比較n-1次,每輪-1,直到減少到1次(第二個循環)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM