Среднее квадратичное отклонение и равномерное распределение

В общем попал в ловушку задачи, или я просто туго соображаю. Суть такая, задачи было две, одну я решил, там нужно было посчитать число пи с помощью библиотеки decimal с определенным количеством знаков после запятой, а потом построить гистограмму с помощью matplotlib.pyplot, которая показывала бы, сколько цифр 1 2 3 4 и так далее до 10 после запятой числа пи. для этого я использовал функцию split_numbers, в моем коде она есть, она делила число пи на простые числа, а я потом строил гистограмму по массиву из этих чисел. Но вот второе задание, здесь нужно найти среднее квадратичное отклонение цифр числа пи от равномерно распределённого (типа доказать что при уменьшении n(что за n, я сам не понял, препод сказал просто какое-то n) среднее отклонение уменьшается), и так выходит, что при уменьшении числа знаков после запятой, например с 10000 до 1000 оно по сути должно уменьшаться, но наоборот, увеличивается. И я так понял, что что-то у меня в коде возможно не так. Коротко, нужно, чтобы это отклонение (оно у меня кстати считается и выводится в консоль) уменьшалось при уменьшении количества знаков после запятой

PythonВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

"""
Задание №1: построить гистограмму распределения чисел (знаков, после запятой) у числа ПИ - выполнено
Задание №2: найти среднее квадратичное отклонение цифр числа пи от равномерно распределённого (доказать, что при уменьшении n отклонение уменьшается) - в процессе 
"""
import decimal
import matplotlib.pyplot as plt
import numpy
import seaborn as sb
 
def pi():
    decimal.getcontext().prec += 2
    three=decimal.Decimal(3)
    lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
    while s != lasts:
        lasts = s
        n, na = n+ na, na + 8
        d, da = d + da, da + 32
        t = (tn)/d
        s += t
    decimal.getcontext().prec -= 2
    return +s
 
def split_number(number):
    number_as_string = str(number)
    for character in number_as_string:
        if not character.isdigit():
            continue
        yield int(character)
        
decimal.getcontext().prec = 1000 #регулируем количество знаков после запятой
pi=pi()
print(list(split_number(pi)))
numpy.std(list(split_number(pi)))
print(numpy.std(list(split_number(pi))), "- среднее квадратичное отклонение цифр числа ПИ")
sb.set_style('whitegrid')
plt.hist(list(split_number(pi)), facecolor='blue', alpha=0.5)
plt.xlabel('сами цифры, содержащиеся в числе ПИ')
plt.ylabel("количество каждой из этих цифр")
plt.show()