Write and control Perlin noise for 1D
To begin with, you cannot use random.uniform() in your current design. The tutorial specifically emphasize that the  noise function shall be seeded, that is, for the same argument it shall always return the same result.

Second, the tutorial suggests that each octave must have its own noise generator. I believe it is essential (again, the noise it seeded, so you'd get literally the same noise for each octave).

You can get away with random.uniform() by calculating noise tables (one per octave), and use them as noise functions. In fact, I'd recommend this approach.