Funções dentro de funções

Python é uma linguagem muito flexível e permite a criação de funções praticamente em qualquer lugar do código. Pode-se definir uma nova função dentro de um bloco if, de um loop for, ou dentro de outra função:
def process(name1, name2, name3):
    def greet(name):
        if len(name) < 5:
            print(f'Hi, {name}')
        else:
            print('The name is too long')
    greet(name1)
    greet(name2)
    greet(name3)

process('Anna', 'Bob', 'Daniel')
# Hi, Anna
# Hi, Bob
# The name is too long
Aqui, definimos uma nova função greet() que atua como uma utilidade para não repetir as instruções if e else para cada um dos 3 nomes na função process().
Note que as funções internas têm acesso a todas as variáveis definidas acima delas. Assim, no nosso exemplo, a função greet() tem acesso a name1, name2 e name3.

Desafio

Modifique a função para que ela retorne uma lista com todos os divisores dos números passados para ela. Adicione uma função interna que retorne uma lista de divisores para um único número.
def divisors(*numbers):
    ...

print(divisors(4, 5))         # [1, 2, 4, 1, 5]
print(divisors(3))            # [1, 3]
print(divisors(6, 8))         # [1, 2, 3, 6, 1, 2, 4, 8]
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue