Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2016, 00:03   #1
P0lin0m
Новичок
Джуниор
 
Регистрация: 08.10.2016
Сообщений: 1
По умолчанию Помогите разобрать одну строку

Начал учить пайтон 3.х по книге Майкла Доусена "программируем на пайтон".
В главе 6 есть пример написания игры "крестики-нолики" и в коде есть вот такая функция под названием winner():

Код:
EMPTY = " "
TIE = "ничья"
NUMSQUARES = 9
# собственно крестик и нолик
X = "X"
O = "O"
 
print("""
Числа однозначно соответствуют
полям доски - так, как показано ниже:
 0 | 1 | 2 
-----------
 3 | 4 | 5 
-----------
 6 | 7 | 8 
""")
 
board = []
    for square in range(NUMSQUARES):
        board.append(EMPTY) 
 
def winner(board):
    """Определяет победителя в игре"""
    WAYS_TO_WIN = ((0, 1, 2),
                   (3, 4, 5),
                   (6, 7, 8),
                   (0, 3, 6),
                   (1, 4, 7),
                   (3, 5, 8),
                   (0, 4, 8),
                   (2, 4, 6))
    for row in WAYS_TO_WIN:     
        if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
            winner = board[row[0]]
            return winner
        if EMPTY not in board:
            return TIE
    return None
Ну в общем, кое-что добавил здесь, чтобы было понятнее откуда вообще что берется.
Собственно вопрос: как работает эта строка, и что она делает?

Код:
if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
Я понимаю, если бы записать ее в виде:

Код:
if board[row][0] == board[row][1] == board[row][2] != EMPTY:
Но если ее так записать, то получается ошибка:

TypeError: list indices must be integers or slices, not tuple

В общем, помогите понять, лучше с примером.

Последний раз редактировалось P0lin0m; 26.10.2016 в 00:05.
P0lin0m вне форума Ответить с цитированием
Старый 26.10.2016, 11:54   #2
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Т.е. вы пишите такое, и говорите что это вам понятно:
Код:
if board[(0, 1, 2)][0] == board[(0, 1, 2)][1] == board[(0, 1, 2)][2] != EMPTY:
И что же должен код вернуть на board[(0, 1, 2)] по вашему мнению?
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 04.11.2016, 08:40   #3
Lektorfuja
Форумчанин
 
Аватар для Lektorfuja
 
Регистрация: 04.11.2016
Сообщений: 355
По умолчанию

Цитата:
Сообщение от P0lin0m Посмотреть сообщение
В главе 6 есть пример написания игры "крестики-нолики" .
Вы выбрали сложный пример.
мой блог :patreon.com/hopkins1988 . facebook группы:"программирование на Андроид","
"Программирование чистый код"
Lektorfuja вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Юмор в одну строку. Smitt&Wesson Свободное общение 1209 13.02.2024 13:34
Как правильно разобрать командную строку? taras-proger Win Api 1 29.11.2015 14:40
Разобрать файл. Дерево записанное в одну линию. Человек_Борща Общие вопросы Delphi 3 08.11.2013 15:47
DbLookUpCombobox в одну строку biohazardo БД в Delphi 2 13.01.2011 09:35
все в одну строку Yokka Общие вопросы C/C++ 4 15.05.2010 00:27