2016-01-13 102 views
0

我正在製作簡單的Tic Tac Toe遊戲(並不像我想象的那麼容易)。 我想創建一個函數,詢問玩家哪個符號想玩(x或o)。我有一個返回值的問題。它不會返回任何東西......就像沒有任何改變。函數不會返回新值Python 2.7

player_choice = '' 
computer_choice = '' 

def player_sign(player, computer): 
    choice = raw_input("Do you want to be X or O?: ").lower() 
    while choice != 'x' and choice != 'o': 
     print "Error!\n Wrong input!" 
     choice = raw_input("Do you want to be X or Y?: ").lower() 
    if choice == 'x': 
     print "X is yours!" 
     player = 'X' 
     computer = 'O' 
     return player, computer 
    elif choice == 'o': 
     print "You've chosen O!" 
     player = 'O' 
     computer = 'X' 
     return player, computer 
    else: 
     print "Error!\n Wrong input!" 
     return 0 
player_sign(player_choice, computer_choice) 

試着用樣品給player_choice和computer_choice賦值並打印初始字符串。我究竟做錯了什麼?

+0

你是怎麼調用這個函數的?看起來你的問題可能是對什麼參數和返回值實際上是誤解。例如,'player'和'computer'在這裏是沒有意義的。參數用於調用者告訴函數的事情,而不是函數告訴調用者。 – user2357112

+0

也許這是一個減價問題,但縮進似乎是錯誤的。確保def和while後縮進4個空格。 – falstaff

+0

您是否應該使用'player_choice'和'computer_choice'做某件事,並且對該函數的調用會很好 – gerosalesc

回答

0

你想變異函數內部不可變的類型(字符串)來調用代碼player_sign(player_choice,computer_choice)。這是不可能的。有關詳細說明,請參閱問題:How do I pass a variable by reference?

你應該做的只是將函數的返回值分配給函數被調用的作用域中的名稱。

def player_sign(): 
    choice = raw_input("Do you want to be X or O?: ").lower() 
    while choice != 'x' and choice != 'o': 
     print "Error!\n Wrong input!" 
     choice = raw_input("Do you want to be X or Y?: ").lower() 
    if choice == 'x': 
     print "X is yours!" 
     player = 'X' 
     computer = 'O' 
     return player, computer 
    elif choice == 'o': 
     print "You've chosen O!" 
     player = 'O' 
     computer = 'X' 
     return player, computer 
    else: 
     print "Error!\n Wrong input!" 
     return None, None 

player_choice, computer_choice = player_sign() 
0

您需要在年底

+0

忘記添加最後一行代碼(它在src代碼中)。仍然有某種錯誤 – Burdzi0

+0

如上所述,它不會工作 – Burdzi0