Я почти делаю игру с 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)
Он возвращает значение ЛОЖЬ каждый раз, даже если все элементы в этом списке являются «о».
Извините за длинные куски кода. Если у кого-нибудь из вас есть какие-либо советы, это будет очень признательно.
Try 'climax1.count ('х') == Len (climax1)' –
Ваших отступов перепутались. Вам нужно это исправить. Правильный отступ жизненно важен для Python. –
Поскольку blueberryfields говорит, что 'climax' от 1 до 3 не будет делать то, что вы хотите, потому что это статические копии данных' lst'. И вы забыли другую диагональную линию: '[lst [2], lst [4], lst [6]]'. Кроме того, вы должны поместить все эти списки климакса в список списков. Затем вы сможете проверить каждый из них в цикле. На самом деле, есть более простая стратегия, потому что, если вы проверяете после каждого шага, вам не нужно проверять каждую строку, чтобы увидеть, есть ли победитель. Но я думаю, вы можете реализовать эту стратегию в своей следующей версии. :) –