簡體   English   中英

python:遞歸函數內返回的問題

[英]python: issue with return within a recursive function

出於教育目的,我正在用Python實現井字游戲。

設置播放器X或O的函數是遞歸的:

def set_marker(player,board):
   print "\nplayer",player

   x = y = 3
   while(x not in range(0,3)):
       x = input("x: ")
   while(y not in range(0,3)):    
       y = input("y: ")

   if board[x][y] == 0:
       board[x][y]=player
       return board
   else:
       set_marker(player,board)
       # return board

參數:

board = 2dimensional list ( [[0, 0, 0], [0, 0, 0], [0, 0, 0]] )
player = int (value = '1' or '2')

如果將“ X”設置為已使用的字段,則將再次調用該函數。 當這種情況發生並且我在主循環中再次使用“ board”時,腳本將引發以下錯誤:

Python: TypeError: 'NoneType' object has no attribute '__getitem__'

在這種情況下,板的類型為: none 我通過在else:部分中也簡單地返回了board來解決了這個問題。

這是我的問題:

為什么在我調用函數直到返回正確的電路板時也必須在其他地方也返回電路板?

set_marker(player,board)

應該:

return set_marker(player,board)

否則,您只是遞歸調用而不會傳遞結果。 說在第一個迭代中,它進入else,它將調用set_marker ,然后可能返回board ,此時外部調用將完成而不會返回任何內容,因此返回TypeError

盡管最好不使用遞歸:

def set_marker(player,board):
    print "\nplayer",player

    x = y = 3
    while(x == 3 or board[x][y] != 0):
        while(x not in range(0,3)):
            x = input("x: ")
        while(y not in range(0,3)):    
            y = input("y: ")

        if board[x][y] == 0:
            board[x][y]=player
            return board

我希望使用以下語法:

   else:
       return set_marker(player,board)

當您進行導致if語句第一部分的調用時,它將返回'board',但該返回值需要通過調用鏈傳播回去。 如果不從else塊返回,則在遞歸調用中找到該值,則不會返回任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM