2016-09-18 4 views
0

Просто застрял в моем коде, искал источник для других, но есть другая реализация, я должен быть слепым или ... но похоже, что функции ссылаются на одну переменную, когда в моем понимании, если я вызываю функцию, которая возвращает «change», а функция возвращается обратно к месту в коде, когда ему не следует объявлять более раннюю переменную, но эта переменная, возвращаемая функцией, и следующая вызов той же функции снова должны переключать мою переменную (X и O), просто отредактируйте фрагмент этого кода: получилось X или O (что я выбираю), правильная печать переменной, но тогда выход функции - XXX и т. Д. (Я только начал учиться, но просто застрял здесь!)Изменить поворот в tic-tac-toe не работает

def choice(): 
    choice = input("You want to have x or o?: ") 
    if choice == 'x': 
     human = 'X' 
     computer = 'O' 
    else: 
     human = 'O' 
     computer = 'X' 
    return human, computer 

human, computer = choice() 
print("human is ", human) 
print("computer is ", computer) 

def next_player(turn): 
    if turn == 'X': 
     return 'O' 
    else: 
     return 'X' 

turn = 'X' 

print("turn is ", turn) 
turn = next_player(turn) # was here: next_player(turn) and so below!! 
print("after next player function turn is ", turn) 
turn = next_player(turn) 
print("after next player function turn is ", turn) 
+1

Возможный дубликат (http://stackoverflow.com/questions [Как передать переменную по ссылке?]/986006 /, как-ду-я миновать-а-переменной по ссылке) –

ответ

1

Вы r eturning turn в next_player():

def next_player(turn): 
    if turn == 'X': 
     turn = 'O' 
    if turn == 'O': 
     turn = 'X' 
    return turn # <<< Here. 

Если вы хотите назначить новый поворот, попробуйте сделать следующее:

turn = next_player(turn) 

вместо:

next_player(turn) 
1
def next_player(turn): 
if turn == 'X': 
    turn = 'O' 
if turn == 'O': 
    turn = 'X' 
return turn 

Где эта переменная возврат спасение? Я не верю, что он обновляет вашу переменную «очередь», поэтому вы просто печатаете «X» снова и снова.

0
  1. второй «если» должен быть «elif». Посмотрите на свой код, вы всегда возвращаетесь «X» прямо сейчас.
  2. переменная «turn» не является глобальной переменной. если вы передадите next_player «turn» в качестве аргумента, вы скопируете значение переменной «turn» неявно. Переменная «поворот» внутри функции не совпадает с переменной «поворот» вне функции!

Чтобы получить правильное значение из next_player (поворот): повернуть = next_player (поворот)

 Смежные вопросы

  • Нет связанных вопросов^_^