Цикл For в игре "Hangman"

https://i.stack.imgur.com/LzkVm.jpg

Основная цель:

У игрока 8 попыток отгадать загаданное слово. За каждую введению букву -1 попытка.

У меня есть рабочая часть выбора слова.

Мне посоветовали примерно такой алгоритм дальнейших действий:

  1. Отображение замаскированного слова;
  2. Проверить, все ли буквы угаданы, и выйти из цикла;
  3. Получить новую букву и поместить ее вспиаок введенных букв;
  4. Проверить, есть ли буква в загаданное слове;
  5. Отнять по одной попытке при угадывании букв;
  6. Выйти, если попыток не осталось;
  7. Оповестить игрока приведенными в задании фразами.

Когда я запускаю код, то он распечатывает кучу знаков "-", а должно быть как в примере в ссылке. Видимо, проблема в строке for i in hint:

Собственно, сам код:

import random
list_for_game = ['python', 'java', 'kotlin', 'javascript']
computer_choice = random.choice(list_for_game)
hint = len(computer_choice) * "-"

print("H A N G M A N")
print(hint)

attempt = 8
while attempt > 0:
    letter = input("Input a letter:")
    output = len(computer_choice)*"-"
    for i in hint:
        output += len(computer_choice)*"-"
    variable = 0
    for i in computer_choice:
        if i == letter:
            output[variable] = letter
        variable += 1
        print(output)
    if i not in computer_choice:
        attempt -= 1
        print("That letter doesn't appear in the word")
print("Thanks for playing!") 
print("We'll see how well you did in the next stage")

Ответы (4 шт):

Автор решения: Сергей Махнёв

Я немного попинал ваш код и вот что из него вышло:

import random
list_for_game = ['python', 'java', 'kotlin', 'javascript']
computer_choice = random.choice(list_for_game)
output=[]
print("H A N G M A N")
print(len(computer_choice) * "-")
for hint in range(0,len(computer_choice)):
    output.append('-')
attempt = 8
while attempt > 0:
    count = 0
    letter = input("Input a letter:")
    for j,i in enumerate(computer_choice):
        if i == letter:
            output[j] = letter
            count += 1
    mass = ''.join(output)
    print(mass)
    if count == 0:
        attempt -= 1
        print("That letter doesn't appear in the word")
    elif mass == computer_choice:
        print("Thanks for playing!") 
        print("We'll see how well you did in the next stage")
        break

Наверняка найдутся эксперты в сообществе, которые нашли в вашем коде ошибки и наверняка они укажут, куда смотреть. Но если нужна рабочая программа, то вот.

→ Ссылка
Автор решения: Сергей Махнёв

Хочу немного обновить свой ответ. В этом куске кода проблем я не нашел:

import random
list_for_game = ['python', 'java', 'kotlin', 'javascript']
computer_choice = random.choice(list_for_game)
hint = len(computer_choice) * "-"

Далее, здесь не понятно, зачем печать hint один раз и в дальнейшем использовать его как нулевую заготовку, в которой всегда будут значения '----' разной длины.

print("H A N G M A N")
print(hint)

Здесь также вопросов нет, до того момента, как вы в переменную output не начали на каждый ход пихать значения '-----'

attempt = 8
while attempt > 0:
    letter = input("Input a letter:")
    output = len(computer_choice)*"-"
for i in hint:
    output += len(computer_choice)*"-"

Как показано дальше, вы сравниваете букву с загаданным словом и присваиваете в массив который не был объявлен как массив, букву и сразу же печатаете output вне условия и внутри цикла, т.е. столько раз, сколько делается цикл.

variable = 0
for i in computer_choice:
    if i == letter:
        output[variable] = letter
    variable += 1
    print(output)

Ну и финальная часть, где нет никакой проверки на то, угадал ли пользователь слово или нет. Например я за четыре хода написал java и программа будет предлагать ввести букву, пока не закончатся попытки.

if i not in computer_choice:
        attempt -= 1
        print("That letter doesn't appear in the word")
print("Thanks for playing!") 
print("We'll see how well you did in the next stage")

Как итог, ваш код с правками

import random
list_for_game = ['python', 'java', 'kotlin', 'javascript']
computer_choice = random.choice(list_for_game)
hint = len(computer_choice) * "-"
print("H A N G M A N")

attempt = 8
while attempt > 0:
    print(hint, 'you have ',attempt, 'try') #печатаем hint внутри цикла и выведем сколько осталось попыток
    letter = input("Input a letter:")
    output = ['_']*len(computer_choice) #объявляет output как массив заполненый '-'
    for k,i in enumerate(hint): #добавляем счетчик, чтобы обращаться к конкретному элементу
        output[k] = i
    for j,i in enumerate(computer_choice): #также добавляем счетчик.
        if i == letter:
            output[j] = letter
    if letter not in computer_choice:
        attempt -= 1
        print("That letter doesn't appear in the word")
    hint = ''.join(output) #обновляем hint. И при желании ставим условие на полное отгадывание загаданого слова
    if hint == computer_choice: #то маленькое условие
        print("Thanks for playing!") 
        print("We'll see how well you did in the next stage")
        break
→ Ссылка
Автор решения: SergFSM

вы можете упростить свой код, примерно так:

wrd = 'java'  # загаданное слово
out = '-' * len(wrd)  # открытые буквы
att = 8  # количество попыток
while att:  # повторяем пока есть попытки
    print(out)  # печатаем открытые буквы
    l = input()  # ввод буквы
    if l not in wrd:  # проверяем есть ли введенная буква в загаданном слове
        print("That letter doesn't appear in the word")
        att -= 1
    out = ''.join(l if wrd[i]==l else j for i,j in enumerate(out))  # обновляем открытые буквы
    if out==wrd:  # проверяем угадано ли слово
        print(out, "\nThanks for playing!\nWe'll see how well you did in the next stage")
        break

ввод, вывод:

----
j
j---
a
ja-a
q
That letter doesn't appear in the word
ja-a
v
java 
Thanks for playing!
We'll see how well you did in the next stage
→ Ссылка
Автор решения: Вика Мельникова

Через неделю мучений все-таки выстрадала код:

import random
print("H A N G M A N\n")
list_for_game = ['python', 'java', 'kotlin', 'javascript']
attempt = 8
computer_choice = random.choice(list_for_game)
hint = list((len(computer_choice) * "-"))

while attempt > 0:
   print("".join(hint))
   print("Input a letter:")
   output = input()
   attempt -= 1
   if output in computer_choice:
       for i in range(len(computer_choice)):
           if output == computer_choice[i]:
               hint[i] = output
   else:
       print("That letter doesn't appear in the word\n")
print("\nThanks for playing!") 
print("We'll see how well you did in the next stage")
→ Ссылка