![](/img/trans.png)
[英]TypeError: 'function' object is not subscriptable. While the Error line is working?
[英]TypeError: 'function' object is not subscriptable. Working on text-based adventure game
我正在創建一個基於文本的冒險游戲作為一個愛好項目,當在游戲世界中實現一種可能的交互時遇到了這個問題
使用move [0]的其他函數如下所示,但在這里似乎並不想工作。
def gamehelp():
if move[0] == 'help':
showInstructions()
這就是錯誤所指的
def move():
move = ''
while move == '':
move = input('>')
move = move.lower().split()
if move[0] == 'go':
global currentRoom
if move[1] in rooms[currentRoom]:
if currentRoom == 'Corridor' and move[1] == 'west' and not 'key' in str(inventory):
print('This Door is Locked!')
else:
currentRoom = rooms[currentRoom][move[1]]
else:
print('You can\'t go that way!')
這是我定義了move變量的地方
while True:
showStatus()
move()
gamehelp()
itemPickup()
look()
在這里,我呼吁使用不同的功能,其中剛剛實現了gamehelp()和look()。
我期望的輸出是當我在游戲中輸入“ help”時顯示showInstructions()函數,但此錯誤返回
Traceback (most recent call last):
File "main.py", line 139, in <module>
gamehelp()
File "main.py", line 72, in gamehelp
if move[0] == 'help':
TypeError: 'function' object is not subscriptable
在你gamehelp功能,您有沒有參數,但它希望move
進行檢查。 您需要接受,然后將move作為參數傳遞給gamehelp(move)
將功能更改為
def gamehelp(param):
if param[0] == 'help':
showInstructions()
這應該可以解決該錯誤。 現在,我將提出一些不需要的代碼建議。 如果您願意,可以隨意忽略這些,但是我認為,如果您至少不注意它們,將會遇到很多問題。
首先,如果那是整個方法,那么gamehelp()
方法就毫無意義。 如果要調用gamehelp
,則最好改為調用showInstructions()
。 您應該在運行方法並將其擴展到所有方法之前檢查是否正在調用gamehelp
。 如果您願意,我很樂意幫助您解決問題,但是您當前的方法將無法擴展,並且幾乎肯定會帶來bug,因為while
循環中出現問題時,您必須檢查每個方法。
您的move
函數也可以重構很多。 我也不建議您使用與方法名稱相同的變量,因為使用一流函數時,它可能會造成混淆。
我僅重構了move變量作為示例。 解釋如下:
您實際上並沒有添加到move變量,僅是用戶輸入了最后的內容。 如果確實要添加到move變量,請使用+ =運算符或字符串join()方法。 我猜這是您不知道的錯誤,否則看起來會有所不同。 無論如何,這只會做完全相同的事情,只是它只接受用戶輸入的第一件事。 您之前的操作方式還意味着用戶必須自己輸入空白行。 我認為,要使其實際執行任何操作,您還應該在大於號后留一個空格,以便用戶輸入時看起來更干凈。 現在您應該可以>go west
而不是>go >west >
def move():
move = input('> ').lower().split()
...
我可以預見,還有很多其他問題最終也會在您的代碼中實現。 例如,如果要命名走廊怎么辦? 然后這將失敗,因為它只是檢查currentRoom
,它是一個字符串。 您最好使用一個具有房間類型的類,甚至為每個房間使用不同類型的類(這可能是不必要的)。 然后,您可以執行currentRoom.type
並且對房間的類型擁有零競爭。 這可能會延續玩家可以移動的方式,例如使用一種方法來檢查西邊是否為選項和/或他們是否具有鑰匙,和/或西邊是否為門...等等。
讓我們以球員清單為例。 如果您只是檢查它們是否有鑰匙,您將如何處理多個不同的鑰匙? 如果清單中出現鍵(因為它是字符串),或者與鍵絕對無關怎么辦? 答案是使用對象和數組。 使用他們的清單/狀態/等等進行玩家分類。 然后,您可以使它們的庫存變為數組/字典/使您的船浮起的任何東西,最后檢查它們是否具有特定的項目,而不僅僅是“鑰匙”。 通過從數組/ dict /任何內容中刪除密鑰,這也將允許您實際用完密鑰(您沒有這樣做,但是可能是故意的)。
除非您使用類似於類的內容,否則您將有很多重復的代碼或錯誤。 即使在這個簡短的摘要中,我也已經看到了問題或將來的問題。
TL; DR:使用OOP。 班是你的朋友。
PS:如果您願意,我非常樂意為您提供幫助。 我希望這會有所幫助:>
PPS除非您的目標是制作一個文本冒險引擎,否則您可能希望使用已經制作的引擎。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.