import random

##def square(x):
##    return add_noise(x ** 2)

##def add_noise(f):
##    def noisy_f(x):
##        return f(x) + 0.001 * (random.random() - 0.5)
##
##    return noisy_f

def add_noise(width):
    def noise_decorator(f):
        def noisy_f(x):
            return f(x) + width * (random.random() - 0.5)
        return noisy_f
    return noise_decorator

@add_noise(0.001)
def square(x):
    return x ** 2

#square = add_noise(0.1)(square)
#square = add_noise(square)

#def add_noise(value):
#    return value + 0.001 * (random.random() - 0.5)

#noisy_square = add_noise(square)

##print(add_noise(square(3)))
##print(add_noise(square(3)))
##print(add_noise(square(3)))

print(square(3))
print(square(3))
print(square(3))
#print(add_noise(0.5)(square)(5))
##print(noisy_square(3))
##print(noisy_square(3))
##print(noisy_square(3))
