#python #python-3.x
#python #python-3.x
Вопрос:
я новичок в Python, и мне нужна помощь с частью кода, который я написал. На текущий момент моя программа полностью функциональна, однако я не могу заставить функцию сложности работать должным образом. У меня есть несколько документов .txt с разной сложностью слов внутри них. Я хотел бы, чтобы пользователь мог выбирать, на какой сложности он будет играть. В настоящее время, когда я пытаюсь запустить программу, я получаю сообщение об ошибке «word не определен». Любая помощь приветствуется
import random
print ("WELCOME, YOU ARE PLAYING HANGMAN!")
input("Press Enter to continue...")
def printhangmen(guesses):
if (guesses == 0):
print("""
_________
|/
|
|
|
|
|
|___
""")
if (guesses == 1):
print("""
_________
|/ |
|
|
|
|
|
|___
""")
elif (guesses == 2):
print("""
_________
|/ |
| (_)
|
|
|
|
|___
""")
elif (guesses == 3):
print("""
________
|/ |
| (_)
| |
| |
|
|
|___
""")
elif (guesses == 4):
print("""
_________
|/ |
| (_)
| /|
| |
|
|
|___
""")
elif (guesses == 5):
print("""
_________
|/ |
| (_)
| /|
| |
|
|
|___
""")
elif (guesses == 6):
print("""
________
|/ |
| (_)
| /|
| |
| /
|
|___
""")
elif (guesses == 7):
print("""
________
|/ |
| (_)
| /|
| |
| /
|
|___
"""" You guessed wrong. The correct word was: " str(word))
guesses = 8
difficulty = input("""choose your difficulty,
1 = EASY
2 = INTERMEDIATE
3 = HARD
4 = VERY HARD
5 = INSANE""")
print("you have chosen", difficulty)
print("Please begin guessing")
if difficulty == 1:
(random.choice(open("Level1.txt").read().split()))
elif difficulty == 2:
(random.choice(open("Level2.txt").read().split()))
elif difficulty == 3:
(random.choice(open("Level3.txt").read().split()))
elif difficulty == 4:
(random.choice(open("Level4.txt").read().split()))
elif difficulty == 5:
(random.choice(open("Level5.txt").read().split()))
word = (random.choice(open("Level"(difficulty).txt).read().split()))
guess_word = ['_' for x in word]
def checkLetter(letter, word, guess_word):
for c in word:
if c == letter:
guess_word[word.index(c)] = c
while '_' in guess_word and guesses > 0:
print(guess_word)
guess = input('Letter: ')
if guess in word:
print("correct letter")
else:
print("incorrect")
guesses -= 1
print (guesses," guesses left")
printhangmen(8-guesses)
checkLetter(guess, word, guess_word)
else:
print("congrats, you won. If you would like to proceed to the next level, please press enter")
input()
Комментарии:
1.
input()
возвращает строку, поэтому следующиеif difficulty == 1:
инструкции типа следует изменить наif difficulty == "1":
.2. Вам нужно отформатировать свой код. Существует оператор else, для которого я не могу найти оператор if. Тогда у вас есть функция if == 0, затем if == 1, затем elif, почему не elif == 1?
3. Спасибо, чувак. Мы высоко ценим вашу помощь
4. @martineau хороший улов
Ответ №1:
Одна из возможных проблем заключается в том, что вы пытаетесь прочитать целевой файл дважды, и вы никогда не закрываете его с первого раза. Подумайте о том, чтобы просто прочитать входной файл один раз:
while True:
difficulty = int(input("""choose your difficulty,
1 = EASY
2 = INTERMEDIATE
3 = HARD
4 = VERY HARD
5 = INSANE"""))
if difficulty >= 1 and difficult <= 5:
break
else:
print("Please enter a difficulty level of 1 to 5")
word = random.choice(open("Level"(difficulty).txt).read().split())
Кроме того, input()
возвращает строку, поэтому, если вы хотите обработать difficulty
как целое число, затем приведите результат из input()
.
Ответ №2:
Вы пытаетесь прочитать слово дважды. Замените строку в операторе if на: word=(random.choice(open("Level1.txt").read().split()))
Не забудьте объявить ‘word’ перед блоком if-elif. И удалите строку в конце инструкций if. word = (random.choice(open("Level"(difficulty).txt).read().split()))
Кроме того, обрабатывайте входные данные как строку, как предложено в других ответах. По моему мнению, это должно сработать
Ответ №3:
Здесь вы пытаетесь добавить сложность к строке «Уровень».
word = (random.choice(open("Level"(difficulty).txt).read().split()))
вы могли бы попробовать что-то вроде этого
word = (random.choice(open("Level{0}.txt".format(difficulty)).read().split()))
чтобы на самом деле получить ожидаемое имя файла.
С помощью этого вы также можете удалить
if difficulty == X:
части, но вам нужно позаботиться о том, чтобы проверить, действительно ли существует файл, который вы пытаетесь открыть с помощью пользовательского ввода.
И вам также нужно взглянуть на свой метод контрольного списка, потому что строка
guess_word[word.index(c)] = c
изменит только первое вхождение правильной буквы в строке guess_word (возможно, несколько раз, если буква встречается более одного раза). Вам нужно получить позиции каждого вхождения правильной буквы.
Комментарии:
1. Привет, спасибо за помощь, однако программа неправильно использует «word», и если я введу число, которое я ввел в начале, это направит меня к моей инструкции index, о которой вы говорили, и отобразит ошибку «Подстрока не найдена». Вы знаете, как это исправить?
2. Как выглядит ваш код прямо сейчас? Возможно, отредактируйте свой вопрос, чтобы отразить вашу новую проблему