2016-11-11 2 views
0

Я почти делаю игру с tic tac toe, и теперь я хочу написать функцию, которая проверяет, есть ли победитель. Мой совет является списком списков:Проверка наличия всех элементов в списке (или, вернее, одной).

lst = ['1','2','3','4','5','6','7','8','9'] 

def board(): 
print (lst[0:3]) 
print (lst[3:6]) 
print (lst[6:]) 

['1', '2', '3'] 
['4', '5', '6'] 
['7', '8', '9'] 

И это функция я использую для игры:

def move2(): 
    move2=(input('Player 2: Type a number!')) 
    for x in lst: 
    if move2 == x: 
     lst[int(move2)-1] = 'o' 
     board() 
     move() 
    elif move2.isdigit() and move2 not in lst: 
     print('Not that number!') 
     break 
     board() 
     move2() 
    elif not move2.isdigit(): 
     print('Not that number!') 
     break 
     board() 
     move2() 

Я тогда разделился первоначальный список для возможных сценариев выигрышных:

climax1 = lst[0:3] 
climax2 = lst[3:6] 
climax3 = lst[6:] 
climax4 = [lst[0],lst[3],lst[6]] 
climax5 = [lst[1],lst[4],lst[7]] 
climax6 = [lst[2],lst[5],lst[8]] 
climax7 = [lst[0],lst[4],lst[8]] 

И попробовал это, чтобы проверить, есть ли у любого из них все «х или все» o:

def conclusion(): 
    if all(item == 'x' for item in climax1) or all(item == 'x' for item in climax2) or all(item == 'x' for item in climax3) or all(item == 'x' for item in climax4) or all(item == 'x' for item in climax5) or all(item == 'x' for item in climax6) or all(item == 'x' for item in climax7): 
    print('Player 1 wins!') 
    elif all(item == 'o' for item in climax1) or all(item == 'o' for item in climax2) or all(item == 'o' for item in climax3) or all(item == 'o' for item in climax4) or all(item == 'o' for item in climax5) or all(item == 'o' for item in climax6) or all(item == 'o' for item in climax7): 
    print('Player 2 wins!') 
else: 
    move() 

Но когда я пытаюсь интегрировать это в функцию для игрового процесса, он говорит, что он не определен. И когда я пытаюсь что-то вроде:

all('o' == item for item in climax1) 

Он возвращает значение ЛОЖЬ каждый раз, даже если все элементы в этом списке являются «о».

Извините за длинные куски кода. Если у кого-нибудь из вас есть какие-либо советы, это будет очень признательно.

+1

Try 'climax1.count ('х') == Len (climax1)' –

+1

Ваших отступов перепутались. Вам нужно это исправить. Правильный отступ жизненно важен для Python. –

+1

Поскольку blueberryfields говорит, что 'climax' от 1 до 3 не будет делать то, что вы хотите, потому что это статические копии данных' lst'. И вы забыли другую диагональную линию: '[lst [2], lst [4], lst [6]]'. Кроме того, вы должны поместить все эти списки климакса в список списков. Затем вы сможете проверить каждый из них в цикле. На самом деле, есть более простая стратегия, потому что, если вы проверяете после каждого шага, вам не нужно проверять каждую строку, чтобы увидеть, есть ли победитель. Но я думаю, вы можете реализовать эту стратегию в своей следующей версии. :) –

ответ

2

ваши задания:

climax1 = lst[0:3] 
climax2 = lst[3:6] 
climax3 = lst[6:] 

копия первоначальный список; поэтому, когда вы обновляете список, вы не обновляете копии. Исправьте это, и ваш код будет работать.

(для отладки, попробуйте добавить print(climax1) в отладочном)

+0

blueberryfields, если это так с этими тремя, то как это работает с другими? – Boris

+0

Я переформатировал списки следующим образом: climax1 = [lst [0], lst [1], lst [2]] climax2 = [lst [3], lst [4], lst [5]] climax3 = [lst [6], lst [7], lst [8]] climax4 = [lst [0], lst [3], lst [6]] climax5 = [lst [1], lst [4], lst [7 ]] climax6 = [lst [2], lst [5], lst [8]] climax7 = [lst [0], lst [4], lst [8]] climax8 = [lst [2], lst [4], lst [6]] Но я все еще ошибаюсь, говоря, что функция «заключение» не определена. – Boris

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