Como desenhar um retangulo vazio em Python - (Iniciante)

Pessoal, sou iniciante na área de programação e estou com dúvidas nas questões abaixo. Vou postar a questão e a minha tentativa. Se alguém puder me ajudar desde já agradeço.

1 - Escreva a função Retângulo, imprimindo os retângulos sem preenchimento, de forma que os caracteres que não estiverem na borda do retângulo sejam espaços.

largura = int(input("Digite a largura: "))
altura = int(input("Digite a altura: "))
caractere = "#"


def retângulo(largura, altura, caractere):

    linha = caractere * largura

    for i in range(altura):
        print(linha)

retângulo(caractere, altura, largura)

Se ainda servir, veja se resolve, testei aqui e funcionou de prima

def retangulo(largura, altura, caractere):
    print(caractere * largura) # cabeçalho

    for i in range(altura):
        espacos = (largura - 2) * ' '
        print("%s%s%s" % (caractere, espacos, caractere)) # meio

    print(caractere * largura) # rodapé

largura = int(input("Digite a largura: "))
altura = int(input("Digite a altura: "))
caractere = "#"

retangulo(largura, altura, caractere)

Outra dica: apesar do python aceitar acentos como em retângulo em nomes de funções e variáveis, evite, não é uma boa prática de programação…

Testando o seu código, reparei os seguintes pontos:

A altura mesmo que inserida por numero acima de 2, aparecia com duas unidades de altura no resultado.

portanto, fiz a seguinte correção:

Adicionei -2 na altura (linha 3)

veja abaixo:

def retangulo(largura, altura, caractere):
print(caractere * largura) # cabeçalho

for i in range(altura - 2):
    espacos  =  (largura - 2) * '  '
    print("%s%s%s" % (caractere, espacos, caractere))  #  meio

print( caractere  *  largura )  #  rodapé

largura = int(input("Digite a largura: "))
altura = int(input("Digite a altura: "))
caractere = “#”

retangulo(largura, altura, caractere)