From 361ac5f49ba590b3d33697a28d23eb2e9be1b74e Mon Sep 17 00:00:00 2001 From: Vadim Nifadev <36514612+nifadyev@users.noreply.github.com> Date: Fri, 19 Apr 2024 14:41:30 +0300 Subject: [PATCH] Translate A tic-tac-toe where X wins in the first attempt! example --- translations/README-ru.md | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0f4387d..6e39080 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -874,3 +874,51 @@ False - В примере `(not None)` оценивается в `True`, поскольку значение `None` является `False` в булевом контексте, поэтому выражение становится `'something' is True`. --- + + +### ▶ Крестики-нолики, где X побеждает с первой попытки! + + +```py +# Инициализируем переменную row +row = [""] * 3 #row i['', '', ''] +# Инициализируем игровую сетку +board = [row] * 3 +``` + +**Результат:** + +```py +>>> board +[['', '', ''], ['', '', ''], ['', '', '']] +>>> board[0] +['', '', ''] +>>> board[0][0] +'' +>>> board[0][0] = "X" +>>> board +[['X', '', ''], ['X', '', ''], ['X', '', '']] +``` + +Мы же не назначили три `"Х"`? + +#### 💡 Объяснение: + +Когда мы инициализируем переменную `row`, эта визуализация объясняет, что происходит в памяти + +![image](/images/tic-tac-toe/after_row_initialized.png) + +А когда переменная `board` инициализируется путем умножения `row`, вот что происходит в памяти (каждый из элементов `board[0]`, `board[1]` и `board[2]` является ссылкой на тот же список, на который ссылается `row`) + +![image](/images/tic-tac-toe/after_board_initialized.png) + +Мы можем избежать этого сценария, не используя переменную `row` для генерации `board`. (Подробнее в [issue](https://github.com/satwikkansal/wtfpython/issues/68)). + +```py +>>> board = [['']*3 for _ in range(3)] +>>> board[0][0] = "X" +>>> board +[['X', '', ''], ['', '', ''], ['', '', '']] +``` + +---