[英]Why does python think I haven't defined my variables?
我寫了一個 Hang-man 游戲,用來玩電腦。 它從另一個名為 'words' 的 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)
您需要修復第 24 行的縮進並修復變量名稱應該具有不等於導入名稱的唯一名稱
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)
除了其他人所說的關於縮進的內容之外,我沒有看到對hangman
函數的調用。 這意味着從一開始就不會啟動這些值。 我會在你的程序結束時打電話來開始整個過程。 就像是:
hangman()
user_input = input('Type something:')
print(user_input)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.