0

この関数で 3 つのステートメントをテストし、適切な応答を返すようにしたいと考えています。3 つのステートメントは次のとおりであり、その意図する応答は次のとおりです。

'' - 「空白」、
「こんにちは」という応答を得る - 「一言」という応答を得る、
「世界」 - 「別の単語」という応答を得る

問題は、「世界」も「単一の単語」ではなく「単一の単語」という応答を返していることです。Pythonが以前の応答が「単一の単語」だったことを検出する方法はありますか?最初の単一の単語の後に別の単一の単語が入力された場合、「再び単一の単語」というステートメントが表示されますか?

def return_statement(statement):
    if statement == (''):
        response = "blank space"
        return response
    if ' ' not in statement
        response = "single word"
        return response
    if ' ' not in statement and response == "single word":
        response = 'single word again'
        return response
4

2 に答える 2

2

関数return_statementresponseは、 はローカル変数です。関数の実行が終了して戻った後response、もはや存在しないことを意味します-そのスコープは、それが含まれている関数であると言います。変数のスコープを離れると、変数は消えます。

あなたが取ることができるいくつかのアプローチはここにあります:

1)周りから返されるreturn_statementkeepの呼び出し元を作り、呼び出したときにもに加えて渡す。これにより、呼び出し元が責任を負います。responseresponsestatementreturn_statement

2)responseグローバル変数を作成して、そのスコープを無期限にします。

3)responseクラスのインスタンス変数を作成します。したがって、同じクラス インスタンスを使用し続ける限り、その値はresponse呼び出しごとに保持されます。

于 2013-04-15T01:32:40.083 に答える
0

前の応答の状態を保存するために、関数に属性を追加できます。ロジックをあまり変更せずに、関数に追加しているだけです。

def return_statement(statement):
    // Check if has attribute, otherwise init
    if not hasattr(return_statement, "prev"):
         return_statement.prev = ''
    if statement == (''):
        response = "blank space"
        // Store answer before returning
        return_statement.prev = response
        return response
    // Fix logic
    if ' ' not in statement:
        if "single word" in return_statement.prev:
            response = "single word again"
        else:
            response = "single word"
            // Store answer
            return_statement.prev = response
        return response
于 2013-04-15T01:39:53.517 に答える