Python:在函数中使用变量(但变量应为用户输入)

Python:在函数中使用变量(但变量应为用户输入),python,function,variables,Python,Function,Variables,我正试图编写一个小的hangman程序,我必须在其中使用这个函数(作业中明确说明了这一点)。它应该检查猜测的字母是否在单词中,如果是,则在正确的位置返回由*和猜测的字母组成的单词。然而,我不明白如果“letter”变量是用户输入的(他的猜测),我怎么能使用它,所以它实际上是在函数之外赋值的。我有点卡住了,如果有人能告诉我怎么做,我将不胜感激 def print_guessed(): global secret_word global letters_guessed wor

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

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

如果可以对函数进行更改,然后修改它的参数,即变量-
字母

def print_guessed(letter):
    #do_stuff
并提供call语句中猜测的字母

print_guessed(letter)

如果可以对函数进行更改,然后修改它的参数,即变量-
字母

def print_guessed(letter):
    #do_stuff
并提供call语句中猜测的字母

print_guessed(letter)

事实上,尽管我同意评论员的说法,这是一个非常不和谐的代码,但实际上您不需要修改函数来使其正常工作<代码>字母没有在函数中赋值,这意味着不需要在函数中声明为全局的:只要它在外部范围中定义,就可以在内部访问。

实际上,尽管我同意评论者的观点,这是非常不和谐的代码,实际上,您不需要修改函数以使其工作<代码>字母未在函数中指定,这意味着不需要在函数中声明为全局:只要它在外部范围中定义,就可以在内部访问。

编辑如果允许自由更改函数,则只需执行此操作

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

如果允许您自由更改函数,请进行编辑,然后执行以下操作

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

哎呀,这位教授是谁!?我的想法完全正确。如果你必须使用这个函数,并且不允许修改它,你就完蛋了。它至少会抛出一个
名称错误
,因为
字母
在任何地方都没有定义。@Pyrce:真的吗?没什么问题吗?我不明白你为什么要把东西全球化;在函数中使用参数。@Pyrce:这太可怕了!嘿……等等……你是教授吗?哎呀——这位教授是谁!?我的想法完全正确。如果你必须使用这个函数,并且不允许修改它,你就完蛋了。它至少会抛出一个
名称错误
,因为
字母
在任何地方都没有定义。@Pyrce:真的吗?没什么问题吗?我不明白你为什么要把东西全球化;在函数中使用参数。@Pyrce:这太可怕了!嘿…等一下…你是教授吗?是的,我正要写那个。看来这也是唯一的办法了。你也可以重复一下你猜到的
字母
global。例如:
对于猜出的字母中的字母:…
但是猜出的字母可能不是列表。如果是,那么每次程序都会检查从开始猜测的所有字母,这就是时间consuming@AswinMurugesh那是什么?复数形式表示某种集装箱,好吧,它也可能是一些猜测的字母计数。。。但话说回来,整个任务是非常模糊的是的,我正要写这个。看来这也是唯一的办法了。你也可以重复一下你猜到的
字母
global。例如:
对于猜出的字母中的字母:…
但是猜出的字母可能不是列表。如果是,那么每次程序都会检查从开始猜测的所有字母,这就是时间consuming@AswinMurugesh那是什么?复数形式表示某种集装箱,好吧,它也可能是一些猜测的字母计数。。。但话说回来,整个任务是非常模糊的