天天看點

Python學習總結(二)----python的練習方法

     繼續學習python中,越來越發現python的友善,也找到了一些python與C/C++的一些相同點與不同點。由于我看的書中缺乏程式設計練習題,我就在想如何能夠盡快地熟悉python。由于我一直在參加算法競賽,是以就想到了用Python去實作一些資料結構和算法。這類的程式設計通常不會用到太多的庫,但卻是鍛煉基本功的很好的方法。程式寫好後,可以花幾分鐘時間來總結一下所用到的知識點,這對初學者的效果非常好。下面是書中的一個例子程式,熟悉的八皇後問題,起個抛磚引玉的作用,這段時間我也會用python實作一些更複雜的資料結構。

  1. def conflict(state,nextX): 
  2.      nextY=len(state) 
  3.      for i in range(nextY):  #注意range是一個半開半閉區間,左閉右開 
  4.          if abs(state[i]-nextX) in (0,nextY-i):  #這裡是python中我很喜歡的一個特性,比同樣的C語言代碼簡單很多。 
  5.              return True 
  6.      return False 
  7.  def queens(num=8,state=()):  #預設參數,與C++的規則一樣,從右到左必須都存在預設參數,即如果一個預設參數的右方還存在沒有預設值的參數,會出錯。 
  8.      for pos in range(num): 
  9.          if not conflict(state,pos):# if not語句 
  10.              if len(state)==num-1: 
  11.                  yield (pos,)      #yield生成器,生成tuple,注意(pos,)這樣的格式 
  12.              else: 
  13.                  for result in queens(num,state+(pos,)):  #tuple等資料結構的連接配接也是我很喜歡python的一個原因。 
  14.                      yield (pos,)+result 
  15.  def pretty_print(solution): 
  16.      def line(pos,length=len(solution)):#函數定義中定義函數,這一點與C/C++都不同,需要額外注意。 
  17.          return '.'*pos+'X'+'.'*(length-pos-1) 
  18.      for pos in solution: 
  19.          print line(pos) 
  20.  #print list(queens(4)) 
  21.  #print len(list(queens(8))) 
  22.  import random 
  23.  pretty_print(random.choice(list(queens(8)))) 
  "學而不思則惘"。總結十分重要!   參考資料:《Beginning Python From Novice to Professional 2nd Edition》   如果我的文章對您有用,請"贊"一下,非常感謝!