Создание функции сложности в игре Hangman

#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. Как выглядит ваш код прямо сейчас? Возможно, отредактируйте свой вопрос, чтобы отразить вашу новую проблему