A. 使用左手法則/右手法則摸牆法(左手或右手在迷宮中始終不離開牆)寫一個python程序解迷宮
下面的代碼假定你的迷宮數據一定是合法的 (單一的入口和出口,不會打環,不會無解),如果數據不合法,可能導致死循環,數據合法性的檢查你自己實現。
另外,我用 東南西北四個方向來代替所謂的上下左右,因為左右概念是相對的。 用python 2。
puzzle_walk 函數返回一個list, 每個元素是每次移動的路徑坐標, 其第一個參數為迷宮的list數據, 第二個參數默認為 True 表示左手抹牆, False 則是右手抹牆。
簡單說一下演算法:首先找到入口格,設定初始面向 East ( 如果是右手抹牆則是 West),然後重復執行以下操作:
1. 如果當前格為最後一排且向南可以移動,則說明當前格為終點,結束。
2. 根據當前格的數據,找到下一步需要面向的方向, 方法是,如果當前方向上有牆,則順時針(右手抹牆則逆時針)轉身,重復這一步驟直到面向的方向上可以行走. 這里可以參考 turn 函數
3. 沿當前方向走一步, 參考 move 函數
4. 逆時針(右手抹牆則順時針)轉身一次,使當前面對方向為第3步之後的左手(或右手)方向, 然後回到步驟1
最後, 我的代碼假定迷宮入口一定是從第1行的North 方向進入,出口一定是從最後一行的 South 方向出去,如果要支持從第一行的其他方向進(比如從 (0, 0) 的West進) ,最後一行的其他方向出,你需修改查找入口的代碼和判斷出口的代碼,這個很簡單, 自己去搞定吧。
N=0
E=1
S=2
W=3
classWalker(object):
def__init__(self,x,y,direction):
#coordinates
self.x=x
self.y=y
self.direction=direction
defturn(self,clockwise=True):
ifclockwise:
self.direction=(self.direction+1)%4
else:
self.direction=(self.direction+4-1)%4
defmove(self):
ifself.direction==N:
self.x-=1
elifself.direction==E:
self.y+=1
elifself.direction==S:
self.x+=1
elifself.direction==W:
self.y-=1
defget_coords(self):
return(self.x,self.y)
defget_direction(self):
returnself.direction
defpuzzle_walk(puzzle,left_touching=True):
route=[]
rows=len(puzzle)
columns=len(puzzle[0])
#locatetheentrance
coords=(-1,-1)
foryinrange(columns):
cell=puzzle[0][y]
ifcell[N]:
coords=(0,y)
break
assertcoords[0]>=0andcoords[1]>=0
walker=Walker(coords[0],coords[1],Eifleft_touchingelseW)
whileTrue:
x,y=walker.get_coords()
cell=puzzle[x][y]
route.append(tuple([x,y]))
ifx==rows-1andcell[S]:
#foundtheexit
break
#
whilenotcell[walker.get_direction()]:
walker.turn(left_touching)
#move
walker.move()
#facetothedirectionofthehand
walker.turn(notleft_touching)
returnroute
#運行結果
>>>p=[[(False,True,True,False),(True,True,False,True),(False,False,True,True)],[(True,False,True,False),(False,True,False,False),(True,False,False,True)]]
#左手抹牆
>>>puzzle_walk(p)
[(0,1),(0,2),(1,2),(1,1),(1,2),(0,2),(0,1),(0,0),(1,0)]
#右手抹牆
>>>puzzle_walk(p,False)
[(0,1),(0,0),(1,0)]
B. python入門可以做的小游戲
1、Python入門拼圖小游戲
簡單介紹:
將圖像分為m×n個矩形塊,並將圖像右下角的矩形塊替換為空白塊後,將這些矩形塊隨機擺放成原圖像的形狀。
2、Python入門推箱子小游戲
簡單介紹:
這是來自日本的一個經典游戲,在狹小的倉庫中,要求把木箱放到指定的位置,如果不小心就可能出現箱子無法移動或者通道被堵的情況,所以,如何巧妙利用有限的空間和通道,合理安排移動順序,就成了這個游戲能否通關的關鍵。
3、Python入門小游戲之外星人入侵
簡單介紹:
玩家可以通過滑鼠控制飛船的移動和射擊,如果能在敵人達到游戲界面低端之前消滅所有敵人,則游戲勝利,否則游戲失敗。
4、Python入門小游戲之吃豆子
簡單介紹:
通過鍵盤方向鍵,控制游戲的人物吃豆人,吃掉藏在迷宮內的所有豆子,並且不能被敵人抓到。
5、Python入門小游戲之寶石消消樂
簡單介紹:
玩家通過滑鼠交換相鄰的拼圖,若交換後,在水平/豎直方向存在連續三個相同的拼圖,則這些拼圖消失,玩家得分。
6、Python入門小游戲之乒乓球對戰
簡單介紹:
中間是球網,玩家通過上下鍵移動球拍,並且這個游戲是可以兩個人玩的哦。
7、還有其他四個游戲
它們是:炸彈人小游戲、逃出迷宮、飛揚的小鳥、五子棋
C. python的ast庫
Python的ast模塊是一個用於處理Python代碼抽象語法樹(AST)的庫。它提供了一些工具,可以方便開發者檢查、修改和生成Python代碼的AST。
抽象語法樹是Python源代碼的一種樹形表示形式,用於表示Python代碼的語法結構。Python的ast模塊可以將Python代碼解析為AST,並提供了許多方法和屬性,以便開發者可以訪問和修改AST節點。
以下是ast模塊中常用的一些類和方法:使用ast模塊可以讓開發者方便地訪問和修改Python代碼的語法結構,例如可以用它來分析Python代碼的復雜度、檢查代碼的安全性、提取代碼中的關鍵字等等。
示例代碼如下:用Python的ast庫提取Python代碼文件中的所有函數。在Python中,可以使用ast庫解析Python代碼,並通過遍歷AST樹找到函數定義。以下是一個簡單的示例,演示如何使用ast庫提取Python代碼文件中的所有函數。
實例及介紹,Python傻瓜式入門,人間清醒,量化交易策略介紹,AI人工智慧,Python端到端測試生態系統庫pyATS,Python讀取和編寫配置文件庫ConfigObj和ConfigParser_configobj,Python生成和解決迷宮的庫maze_python,python用於創建和管理IoT設備的工作流程庫aiobotocore_iotthingsgraph,Python的exceptional庫。
綜上,ast模塊為Python開發者提供了一個強大的工具集,用於處理和理解Python代碼的語法結構,從而在代碼分析、安全檢查、關鍵字提取等場景中發揮重要作用。