📌  相关文章
📜  门| Sudo GATE 2020 Mock II(2019 年 1 月 10 日)|第 46 题(1)

📅  最后修改于: 2023-12-03 14:58:33.819000             🧑  作者: Mango

门| Sudo GATE 2020 Mock II(2019 年 1 月 10 日)|第 46 题

题目描述

有一个门需要有两个人同时按下才能打开,一个人去按门把手,另一个人去按门的锁,已经有一个人按了把手,现在需要你来实现一个函数,使得另外一个人可以按锁。

函数原型为:

def door_click(k: int) -> Callable:
    pass

输入:

  • k: 一个整数,表示锁的编号。

输出:

  • 返回一个可调用对象,该可调用对象可以用于让第二个人按下锁。

注意:

  • 锁的编号是正整数,编号范围为 $[1, 10^9]$。
  • 可调用对象仅返回一个空字符串即可。
示例
click = door_click(123)
click()  # ""
解题思路

题目要求实现一个函数,使得第二个人可以按门的锁。不难发现,这个函数需要返回一个可调用对象,可调用对象可以让第一个人按下门的把手,从而开启门的一半。然后,再使用返回的可调用对象让第二个人按下门的锁,从而开启整个门。

因此,我们可以将两个任务分别编写成两个函数。第一个函数为 door_handle(),第二个函数为 door_lock(k)。其中,door_lock() 函数需要接收一个锁的编号 k,同时返回一个可调用对象。

接下来,让我们来看一下具体实现。

代码实现
from typing import Callable

def door_handle() -> str:
    """
    第一个人按门把手,打开门的一半
    """
    return ""

def door_lock(k: int) -> Callable:
    def click() -> str:
        """
        第二个人按门锁,打开整个门
        """
        return ""
    return click
总结

本题要求实现一个函数,返回一个可调用对象,这个可调用对象可以使得第二个人按下门的锁。我们可以将这个函数拆成两个任务,并分别编写两个函数。其中,第一个函数为 door_handle(),第二个函数为 door_lock(k),它需要接收一个锁的编号 k,同时返回一个可调用对象。代码实现中,我们使用了 Python 中的函数嵌套,以及闭包的特性,这样就能够记录每个锁的编号,使得每个可调用对象可以唯一对应到每个锁上。