首先,我應該首先解釋我想要做的事情。Python - 2問題:在函數中編輯變量並在運行時內部/更改if else語句的順序
我正在創建一個類似地牢爬蟲的遊戲,並且我正嘗試在地圖中編寫計算機角色/怪物的移動。該地圖基本上是笛卡爾座標網格。 字符的位置由x和y值(x,y)的元組表示。 遊戲輪流工作,輪到一個角色只能移動上,下,左或右1個空間。我正在創建一個非常簡單的移動系統,角色將簡單地做出決定,依次轉向。本質上是一個「健忘」運動系統。
什麼,我打算做的簡易流程圖:
- 找不到方向朝着目的地
- 做運動的優先級列表使用方向如來完成(「R」,」。 u','d','l')意味着它會嘗試先移動,然後向上,然後向下移動,然後離開。
- 按照優先順序嘗試每種可能性。如果第一次移動失敗(被障礙等阻擋),那麼它將連續嘗試移動,直到第一次移動成功爲止,然後停止移動。
在步驟3,我試圖做到這一點的方法是這樣的:
def move(direction,location):
try:
-snip- # Tries to move, raises the exception Movementerror if cannot move in the direction
return 1 # Indicates movement successful
except Movementerror:
return 0 # Indicates movement unsuccessful (thus character has not moved yet)
prioritylist = ('r','u','d','l')
if move('r',location): pass
elif move('u',location): pass
elif move('d',location): pass
elif move('l',location): pass
else: pass
在if/else塊,程序會嘗試優先級列表上的優先級的第一運動。在移動功能中,角色會嘗試移動。如果角色沒有被阻擋並且移動,它會返回1,導致該角色停止。如果該字符被阻止,則返回0,然後它嘗試下一個移動。
然而,這會導致兩個問題:
1.How編輯我傳遞給函數自身內部的函數變量,而如果返回的編輯是成功的?
我被告知,你不能在一個函數內編輯一個變量,因爲它不會真的改變變量的值,它只是使得函數內的變量引用其他東西,而原始變量保持不變。所以,解決方案是返回值,然後將該變量分配給返回的值。但是,我希望它返回另一個值,指示此編輯是否成功,所以我想在函數本身內編輯此變量。我該怎麼做?
2.如何更改if/else語句的順序以遵循優先級列表的順序?它需要能夠在運行期間進行更改,因爲優先級列表可以更改,從而導致嘗試的不同移動順序。