繼續學習python中,越來越發現python的友善,也找到了一些python與C/C++的一些相同點與不同點。由于我看的書中缺乏程式設計練習題,我就在想如何能夠盡快地熟悉python。由于我一直在參加算法競賽,是以就想到了用Python去實作一些資料結構和算法。這類的程式設計通常不會用到太多的庫,但卻是鍛煉基本功的很好的方法。程式寫好後,可以花幾分鐘時間來總結一下所用到的知識點,這對初學者的效果非常好。下面是書中的一個例子程式,熟悉的八皇後問題,起個抛磚引玉的作用,這段時間我也會用python實作一些更複雜的資料結構。
- def conflict(state,nextX):
- nextY=len(state)
- for i in range(nextY): #注意range是一個半開半閉區間,左閉右開
- if abs(state[i]-nextX) in (0,nextY-i): #這裡是python中我很喜歡的一個特性,比同樣的C語言代碼簡單很多。
- return True
- return False
- def queens(num=8,state=()): #預設參數,與C++的規則一樣,從右到左必須都存在預設參數,即如果一個預設參數的右方還存在沒有預設值的參數,會出錯。
- for pos in range(num):
- if not conflict(state,pos):# if not語句
- if len(state)==num-1:
- yield (pos,) #yield生成器,生成tuple,注意(pos,)這樣的格式
- else:
- for result in queens(num,state+(pos,)): #tuple等資料結構的連接配接也是我很喜歡python的一個原因。
- yield (pos,)+result
- def pretty_print(solution):
- def line(pos,length=len(solution)):#函數定義中定義函數,這一點與C/C++都不同,需要額外注意。
- return '.'*pos+'X'+'.'*(length-pos-1)
- for pos in solution:
- print line(pos)
- #print list(queens(4))
- #print len(list(queens(8)))
- import random
- pretty_print(random.choice(list(queens(8))))
"學而不思則惘"。總結十分重要!
參考資料:《Beginning Python From Novice to Professional 2nd Edition》
如果我的文章對您有用,請"贊"一下,非常感謝!