📅  最后修改于: 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
:整型,表示门的高度。frame_width = 10
frame_height = 6
door_width = 7
door_height = 4
------------------
| |
| |
| |
| |
| _______|
| | |
| | |
| | |
| | |
|_________| |
------------------
frame_width = 5
frame_height = 5
door_width = 3
door_height = 3
-------
| | |
| |_|
| |
| |
-------
本题需要运行在 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