0

我正在尝试编写一个小刽子手程序,我必须在其中使用此功能(在作业中明确说明)。它应该检查猜测的字母是否在单词中,如果是,则返回由 * 和正确位置的猜测字母组成的单词。但是我不明白如果“字母”变量是用户输入的变量(他的猜测),我怎么能使用它,所以它实际上是在函数之外分配的。我有点卡住了,如果有人能告诉我该怎么做,我将不胜感激。

def print_guessed():
    global secret_word
    global letters_guessed
    word = []
    for i in range (0, len(secret_word)):
        if letter == secret_word[i]: word.append(letter)
        else: word.append('-')
    word_str = ''.join(word)
    return word_str
4

3 回答 3

2

如果您可以对函数进行更改,请修改它的参数,即变量 - letter

def print_guessed(letter):
    #do_stuff

并提供在调用语句中猜到的字母

print_guessed(letter)
于 2013-04-05T20:20:15.207 回答
1

实际上,尽管我同意评论者的观点,即这是非常不符合 Python 的代码,但您实际上并不需要修改该函数以使其工作。letter没有分配给函数内部,这意味着不需要在那里将其声明为全局:只要它在外部范围内定义,它就可以在内部访问。

于 2013-04-05T20:23:20.390 回答
0

编辑如果你被允许自由改变功能,那么就做

def print_guessed(letter):
    global letters_guessed
    letters_guessed.append(letter)
    return ''.join(c if c in letters_guessed else '-'
                   for c in secret_word)

否则:这是一个相当棘手的问题,因为它甚至没有接近做正确的事情,但我想我已经想通了!

secret_word = "answer"
letters_guessed = []
letter = ''

def fix_print_guessed(func):
    def wrapper(guess):
        global letters_guessed
        global letter
        letter = guess
        letters_guessed.append(letter)
        return func()
    return wrapper


@fix_print_guessed
def print_guessed():
    global secret_word
    global letters_guessed
    word = []
    for i in range (0, len(secret_word)):
        if letter == secret_word[i]: word.append(letter)
        else: word.append('-')
    word_str = ''.join(word)
    return word_str

found = len(secret_word) * '-'
while '-' in found:
    guess = raw_input('enter a letter: ')
    res = print_guessed(guess)
    found = ''.join(c1 if c1 != '-' else c2 
                    for c1, c2 in zip(found, res))
    print found
于 2013-04-05T20:37:52.377 回答