0

我希望这个函数去测试 3 个语句并返回适当的响应。这三个陈述是,他们的预期反应是

'' - 得到响应“空格”,
'hello' - 得到响应“single word”,
'world' - 得到响应“another word”

问题是“世界”也给出了“单个词”而不是“再次单个词”的响应。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_statement中,response是一个局部变量。这意味着在函数执行结束并返回后,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 回答