Funciones dentro de funciones

Python es un lenguaje muy flexible y permite la creación de funciones prácticamente en cualquier parte del código. Se puede definir una nueva función dentro de un bloque if, un bucle for o dentro de otra función:
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
Aquí hemos definido una nueva función greet() que actúa como una utilidad para no repetir las sentencias if y else para los 3 nombres en la función process().
Nota que las funciones internas tienen acceso a todas las variables definidas antes que ellas. Así que, en nuestro ejemplo, la función greet() tiene acceso a name1, name2 y name3.

Desafío

Modifica la función para que devuelva una lista de todos los divisores de los números que se le pasan. Añade una función interna que devuelva una lista de divisores para un solo 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