2016-09-24 7 views
-1

мне удалось получить мой код работает так, он генерирует пи:производящая пи более чем 2315 мест

while True: 
     print("how many digits of pi would you like?") 


     def make_pi(): 
      q, r, t, k, m, x = 1, 0, 1, 1, 3, 3 
      for j in range(1000000): 
       if 4 * q + r - t < m * t: 
        yield m 
        q, r, t, k, m, x = 10 * q, 10 * (r - m * t), t, k, (10 * (3 * q + r)) // t - 10 * m, x 
       else: 
        q, r, t, k, m, x = q * k, (2 * q + r) * x, t * x, k + 1, (q * (7 * k + 2) + r * x) // (t * x), x + 2 


     digits = make_pi() 
     pi_list = [] 
     my_array = [] 

     for i in make_pi(): 
      my_array.append(str(i)) 

     number = int(input())+2 
     my_array = my_array[:1] + ['.'] + my_array[1:] 
     big_string = "".join(my_array[: number ]) 
     print("here is the string:\n %s" % big_string) 

Однако независимо от того, сколько я увеличить range код выводит только максимум 2315 знаков пи после десятичной точки

how can I fix this? 
+3

Вы удостоверяясь увеличить 'number' к более чем 2315? – TigerhawkT3

+0

Я попытался сгенерировать более 10000 цифр и увеличил диапазон без изменений –

+0

Это здорово, но вы увеличили 'номер', который фактически контролирует, сколько цифр печатается? – TigerhawkT3

ответ

0

Что можно сделать с параметрированием генератора make_pi, чтобы принять количество цифр?

Что-то вроде этого:

def make_pi(num_digits): 
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3 
    for j in range(num_digits): 
     if 4 * q + r - t < m * t: 
      yield m 
      q, r, t, k, m, x = 10 * q, 10 * \ 
       (r - m * t), t, k, (10 * (3 * q + r)) // t - 10 * m, x 
     else: 
      q, r, t, k, m, x = q * \ 
       k, (2 * q + r) * x, t * x, k + \ 
       1, (q * (7 * k + 2) + r * x) // (t * x), x + 2 


num_digits = 10000 
pi = "".join([str(d) for d in make_pi(num_digits)]) 
print("{0}.{1}".format(pi[:1], pi[1:])) 
+0

Сколько цифр вы действительно получаете при запросе 10000? –

+0

ok У меня были подозрения, и я думаю, что это подтверждает, что у pycharm есть какая-то ошибка, потому что я пробовал код, и то же самое произошло –