2016-01-13 100 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