@Serbi

Требуется помощь для полного понимания игры "Висельница"на Python? Я её написал практически полностью прокомментировал?

'''Создаем функцию 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("кот")
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
@bbkmzzzz
исходя из основной ветки комментариев...

1)board[cind] = char
2)print("\n".join(stages[0: e]))
3)print((" ".join (board)))'''?????Почему много скобок, можно ли убрать 2 скобки по краям????


1)board[cind] = char - доступ к списку по индексу с присваиванием
cind, полагаю, расшифровывается как char index

2)print("\n".join(stages[0: e]))
"\n".join([]) - собрать строку из списка строк, разделив символом "\n"
'#'.join(["1","2","3","4","5"])
>>> '1#2#3#4#5'

stages[0: e] - срез списка stages

3) см п.2. Да, скобки "по краям" можно убрать

Обязательно читать это
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Al6xand6r
board[cind] = char тут один из "___" в отображении загаданного слова заменяется на отгаданную букву.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы