#python
Вопрос:
Я написал игру «Палач», чтобы играть с компьютером. Он выбирает слово из другого файла python под названием «слова», и вы угадываете буквы. Но не имеет значения, где я определяю свои имена, всегда говорится, что они не определены.
> line 20, in <module> > while len(word_letters) > 0: > NameError: name 'word_letters' is not defined > line 27, in <module> > while len(word) > 0: > NameError: name 'word' is not defined > line 31, in <module> > while len(alphabet) > 0: > NameError: name 'alphabet' is not defined
Я определил свои переменные в def hangman, так почему же он не взаимодействует. Нужно ли мне где-то устанавливать его в качестве глобальной переменной?
import random from words import words import string def get_valid_word(words): word = random.choice(words) # randomly chooses something from the list while '-' in words or ' ' in word: word = random.choice(words) return word def hangman(): word = get_valid_word(words) word_letters = set(word) alphabet = set(string.ascii_uppercase) used_letters = set() # what the user has guessed already #getting user input word_letters = set(word) while len(word_letters) > 0: word = random.choice(words) word_letters = set(word) alphabet = set(string.ascii_uppercase) used_letters = set() # what the user has guessed already # letters they already used # ' '.join (['a', 'b', 'cd']) --> 'a b c d' print('You have used these already: ', ' '.join(used_letters)) # what current word is (ie W - R D) word_list = [letter if letter in used_letters else '-' for letter in word] print('Current word: ', ' '.join(word_list)) user_letter =input('Guess a letter').upper() if user_letter in alphabet - used_letters: used_letters.add(user_letter) if user_letter in word_letters: word_letters.remove(user_letter) elif user_letter in used_letters: print('You have already used that character. Please try again.') else: print('You didn't type in a valid character. Please try again.') # gets here when len(word_letters) == 0 user_input = input('Type something:') print(user_input)
Комментарии:
1.
word_letters
определяется только в области действияhangman
метода, поэтому объекты за пределами этой области не могут получить к нему доступ.2. Ваш цикл не является частью функции, в которой определены переменные. Вам нужно сделать отступ.
Ответ №1:
Вам нужно исправить отступ в строке 24 while и исправить, чтобы имена переменных имели уникальные имена, которые не совпадают с именами импорта
import random import string from words import words def get_valid_word(words_var): word = random.choice(words_var) # randomly chooses something from the list while '-' in words_var or ' ' in word: word = random.choice(words_var) return word def hangman(): word = get_valid_word(words) word_letters = set(word) alphabet = set(string.ascii_uppercase) used_letters = set() # what the user has guessed already # getting user input word_letters = set(word) while len(word_letters) > 0: word = random.choice(words) word_letters = set(word) alphabet = set(string.ascii_uppercase) used_letters = set() # what the user has guessed already # letters they already used # ' '.join (['a', 'b', 'cd']) --> 'a b c d' print('You have used these already: ', ' '.join(used_letters)) # what current word is (ie W - R D) word_list = [letter if letter in used_letters else '-' for letter in word] print('Current word: ', ' '.join(word_list)) user_letter = input('Guess a letter').upper() if user_letter in alphabet - used_letters: used_letters.add(user_letter) if user_letter in word_letters: word_letters.remove(user_letter) elif user_letter in used_letters: print('You have already used that character. Please try again.') else: print('You didn't type in a valid character. Please try again.') # gets here when len(word_letters) == 0 user_input = input('Type something:') print(user_input)
Ответ №2:
В дополнение к тому, что другие сказали относительно отступа, я не вижу вызовов hangman
функции. Это означает, что эти ценности никогда не инициируются с самого начала. Я бы позвонил в конце вашей программы, чтобы начать весь процесс. Что-то вроде:
hangman() user_input = input('Type something:') print(user_input)