📌  相关文章
📜  门| Sudo GATE 2020 Mock I(2019 年 12 月 27 日)|第 62 题(1)

📅  最后修改于: 2023-12-03 15:12:45.486000             🧑  作者: Mango

题目介绍:门

本题是 Sudo GATE 2020 模拟考试中的第 62 道题目,主要考察了程序员的编程能力和逻辑思维能力。

题目描述

有一扇门,其四周被矩形的木框框起来,门的宽度小于等于木框的宽度,门的高度小于等于木框的高度。试设计一方法,实现以下功能:

函数接口
def draw_door(frame_width: int, frame_height: int, door_width: int, door_height: int) -> str:
    pass
输入参数说明
  • frame_width:整型,表示门框的宽度。
  • frame_height:整型,表示门框的高度。
  • door_width:整型,表示门的宽度。
  • door_height:整型,表示门的高度。
输出参数说明
  • 返回值类型为字符串,表示画好的门和门框。
示例输入输出
输入样例 1
frame_width = 10
frame_height = 6
door_width = 7
door_height = 4
输出样例 1
------------------
|                 |
|                 |
|                 |
|                 |
|          _______|
|         |       |
|         |       |
|         |       |
|         |       |
|_________|       |
------------------
输入样例 2
frame_width = 5
frame_height = 5
door_width = 3
door_height = 3
输出样例 2
-------
|   | |
|   |_|
|     |
|     |
-------
运行环境

本题需要运行在 Python 3.x 环境中。

代码实现

以下是本题的参考代码实现,整体思路是先画门框,再在门框内部画门,需要注意一些细节问题。

def draw_door(frame_width: int, frame_height: int, door_width: int, door_height: int) -> str:
    assert door_width <= frame_width and door_height <= frame_height, 'door is too big to frame'
    ret = ''
    for row in range(frame_height):
        row_str = '|'
        if row < door_height:
            if row == door_height - 1:
                row_str += '_' * door_width
            else:
                row_str += ' ' * door_width
            row_str += '|'
        else:
            row_str += ' ' * frame_width
        ret += row_str + '\n'
    ret = '-' * (frame_width + 2) + '\n' + ret + '-' * (frame_width + 2)
    return ret