【发布时间】:2020-10-31 21:39:02
【问题描述】:
我目前正在处理 MIT 问题集 2,我遇到了一个已修复的错误,但不明白为什么会发生。此代码的相关部分是变量字母表。我在is_word_guessed 和get_guessed_word 两个函数中都引用了它。但是,当我运行代码时,我收到了在 get_guessed_word 函数中分配错误之前引用的局部变量。但是,我在这两个函数之外分配了变量。最重要的是,函数is_word_guessed 不会产生任何错误。
我可以通过在函数本身中分配字母来修复错误,但我想了解错误的原因以便学习。
- 两个函数都引用了变量Alphabet(在函数外部分配),但唯一的
get_guessed_word尝试修改值。 - 我可以假设错误源于变量的修改。但是,当我在同一代码中修改 secret_word 时,为什么不会出现此错误? (是不是因为 secret_word 是一个赋值参数?)
secret_word = 'apple'
letters_guessed = ['a','p','q']#['e', 'i', 'k', 'p', 'r', 's']
alphabet='abcdefghijklmnopqrstuvwxyz'
def is_word_guessed(secret_word, letters_guessed):
'''
secret_word: string, the word the user is guessing; assumes all letters are
lowercase
letters_guessed: list (of letters), which letters have been guessed so far;
assumes that all letters are lowercase
returns: boolean, True if all the letters of secret_word are in letters_guessed;
False otherwise
'''
secret_letters=set()
for l in secret_word:
if l in alphabet:
secret_letters.add(l)
print('Secret letters are ',secret_letters)
else:
pass
for l in letters_guessed:
if l in secret_letters:
secret_letters.remove(l)
print('Secret letters minus guessed letters are', secret_letters)
else:
pass
if len(secret_letters)==0:
return True
else:
return False
print(is_word_guessed(secret_word, letters_guessed))
def get_guessed_word(secret_word, letters_guessed):
'''
secret_word: string, the word the user is guessing
letters_guessed: list (of letters), which letters have been guessed so far
returns: string, comprised of letters, underscores (_), and spaces that represents
which letters in secret_word have been guessed so far.
'''
###alphabet='abcdefghijklmnopqrstuvwxyz'
for l in letters_guessed:
if l in alphabet:
alphabet=alphabet.replace(l,'')
print(alphabet)
for l in alphabet:
if l in secret_word:
secret_word=secret_word.replace(l,'_ ')
print(secret_word)
return secret_word
print(get_guessed_word(secret_word, letters_guessed))
提前感谢您的帮助。我知道这是一个常见错误,但我阅读的文章都没有解决我的具体问题。
【问题讨论】:
-
它“被”定义了,但是你注释掉了它,所以......它不是。错误是正确的。您可能应该使用不同的名称,以免您认为它是全球字母表。