Цикл For в игре "Hangman"
https://i.stack.imgur.com/LzkVm.jpg
Основная цель:
У игрока 8 попыток отгадать загаданное слово. За каждую введению букву -1 попытка.
У меня есть рабочая часть выбора слова.
Мне посоветовали примерно такой алгоритм дальнейших действий:
- Отображение замаскированного слова;
- Проверить, все ли буквы угаданы, и выйти из цикла;
- Получить новую букву и поместить ее вспиаок введенных букв;
- Проверить, есть ли буква в загаданное слове;
- Отнять по одной попытке при угадывании букв;
- Выйти, если попыток не осталось;
- Оповестить игрока приведенными в задании фразами.
Когда я запускаю код, то он распечатывает кучу знаков "-", а должно быть как в примере в ссылке. Видимо, проблема в строке
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
вы можете упростить свой код, примерно так:
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")