'''Создаем функцию hangman где будет храниться игра она принимает в качестве
параметра переменную (word),word - это слово которое должен угадать я.'''
def hangman (word):'''def это ключевое слово ,с помощью него своя функция .(word) это
переменная в параметре функции '''
'''wrong это переменная которая отслеживает сколько неправильных предположений
сделал я'''
wrong = 0 #0 это значение переменной wrong
'''Переменная stages преставляет собой список со строками ,они рисуют
висельника'''
stages = ["",
"________ ",
"| ",
"| | ",
"| 0 ",
"| /|\ ",
"| / \ ",
"| "
]
'''Переменная rletters является списком,содержащим каждый символ
в переменной word,и она отслеживает какие буквы осталось отгадать'''
rletters = list(word) # list(word)это список[word] "rletters=[кот]'''
'''Переменная board является списком строк,она используется для отслеживания
подсказок,которые отображаются для меня. Например к__т.
инструкция ["__"] * len(word) нужна,чтобы заполнить список board
(одно нижнее подчеркивание для каждого символа в переменной word )'''
board = ["__"] * len(word)'''len возвращает количество символов ,а переменная word это
слово "кот" len(word) - это цифра 3!кот - 3 символа!["__"]размер
нижнего подчёркивания ,и получается количество нижних
подчёркиваний (например слово кот это 3 нижних
подчёркивания("__" "__" "__")'''
'''Переменная win ,вначале принимает значение False для отслеживания
победил ли я.'''
win = False
#Затем вывод сроки
print("Добро пожаловать на казнь!")
'''Cледующей частью программы является цикл,обеспечивающий работу игры
цикл while продолжается до тех пор ,пока значение переменной wrong
меньше чем len(stages) - 1
Переменная wrong отслеживает количество неправильных букв,указанных
мной,так что когда я предпримлю больше неудачных догадок,чем есть
строк для изображения фигуры висельника(кол-во строк в stages)
игра окончится.Нужно вычесть 1 из длинны списка stages чтобы
уравновесить то ,что счет в списке stages начинался с 0,а в списке
wrong - c 1'''
#цикл 0 #рисунок висельника(stages)
#меньше #чем кол-во элементов определяет len(8штук) вычесть 1
while wrong < len (stages) - 1:
'''Внутри цикла выведите пустую область,чтобы украсить игру при выводе в оболочке'''
print("\n")#это пустой отступ соз-
#даёт то что видно в этом комментарии.
'''Затем примите догадку второго игрока(меня),с помощью
встроенной функции input и сохранить значение в переменной char'''
msg = "Введите букву: "#переменная msg принимает значение = "Введите букву:"
char = input(msg)'''C помощью функции input("Введите букву:")выводится текст в скобках
и просит меня ввести букву,
я ввожу букву.Всё это в переменной char'''
'''Если значение переменной char содержится в rletters(списке ,который отслеживает
буквы, которые второй игрок ещё не отгадал),значит догадка игрока была правильной .В
таком случае нужно обновить список board,который я позже буду использовать для
отображения оставшихся букв.'''
#если бы я отгадал "к",то я бы изменил список board на ["к","__","__"].
if char in rletters: #char в rletters
'''Используйте метод index в списке rletters, чтобы получить первый индекс
буквы,которую отгадал я,и используйте его ,чтобы в списке board заменить нижнее
подчеркивание, имеющее индекс правильно угаданной буквы'''
cind = rletters.index(char)'''Метод .index при правильной отгадке в (char) это("Введите
букву: ") моя буква сохраняется в переменной cind'''
board[cind] = char'''?????????Что тут происходит???????Не видел нигде чтоб шла
переменная и после неё [список] [cind]-это список же????'''
'''Здесь есть одна проблема.поскольку index возвращает только первый индекс
искомого символа, мой код не будет работать ,если переменная word содержит
повторяющиеся символы.Чтобы обойти это ,измените список rletters , заменив
правильно угаданный символ на знак доллара.Таким образом при следующем
прохождении цикла ,функция index найдет следующее вхождение буквы (если оно
есть),а не остановится на первом вхождении'''
rletters[cind] = '$'
else:
'''Если же игрок делает не правильную догадку,то я увеличиваю значение переменой
wrong на 1'''
wrong +=1
'''Далее вы выводите строчку с результатом угадывания и висельницу при помощи
списков board и stages.Код для первого следующий:" ".join(board) '''
print((" ".join (board)))'''?????Почему много скобок, можно ли убрать 2 скобки по краям????'''
#В переменной "e" сохраняем wrong (0) + 1
e= wrong + 1
'''Вывод висельника немного сложнее . когда каждая из строк в списке stages выводиться
на новой строке ,отображается весь рисунок висельника .Вы можете создавать весь
рисунок с помощью кода "\n".join (stages),что добавит строкам в списке stages новую
строку,чтобы каждая строка выводилась по отдельности'''
print("\n".join(stages[0: e]))#????????(stages[0: e])????? что происходит в списке?????
if "__"not in board:
print("Вы выиграли!Было загадано слово: ")
print(" ".join(board))
win = True
break
if not win:
'''Чтобы выводить висельника на каждом этапе игры ,выполните срез списка stages.
Начните с нуля и закончите на индексе,соответствующем значению переменной wrong
плюс один. Нужно прибавить один,поскольку при выполнении среза его конец не
включается в результат.Этот срез дает мне лишь те строки,которые нужны для
отображения текущей версии висельника.'''
print("\n".join (stages[0: wrong]))
print("Вы проиграли! Было загадано слово: {}.".format(word))
hangman("кот")