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

実際には、これはひどく非 Pythonic コードであるというコメンターには同意しますが、機能させるために実際に関数を変更する必要はありません。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 に答える