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. Você pode definir uma nova função dentro de um bloco if, um laço 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, nós definimos uma nova função greet() que atua como uma utilidade para não repetir as instruções if e else para todos os 3 nomes na função process().
Note que as funções internas têm acesso a todas as variáveis definidas acima delas. Então, em nosso exemplo, a função greet() tem acesso a name1, name2 e name3.

Desafio

Modifique a função para que ela retorne uma lista de 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