Я запускаю следующий код для значения числа пи, чтобы вычислить первое значение, которое дает 3,14. Я использовал ручные значения для диапазона, который работает, но я хочу, чтобы значения были инкрементными, чтобы дать мне первое значение. В моем коде есть цикл, и я знаю, что это незначительное исправление.

sum = 0
denominator = 1
counter = 1

while '3.14' not in str(sum):
    for i in range(counter):
        print(counter)
        if i % 2 == 0:
            sum += 4/denominator
        else:
            sum -= 4/denominator
        denominator += 2
        if '3.14' in str(sum):
            print(f'The iteration is {i+1} and the values is {sum}')
            break
    counter += 1
0
Nithin 4 Фев 2022 в 09:17

3 ответа

Итак, похоже, что вы пытаетесь найти значение π, используя уравнение Лейбница, π/4 = 1 - 1/3 + 1/5 - 1/7

О, и не называйте переменные sum. Это важная встроенная функция.

import itertools

total = 0
# denominator will take the values 1, 3, 5, 7, 9, ...
for denominator in itertools.count(1, 2):
    if denominator % 4 == 1:
        total += 4 / denominator
    else:
        total -= 4 / denominator
    if 3.14 <= total < 3.15:
        return denominator
0
Frank Yellin 4 Фев 2022 в 09:35
Спасибо за ответ. Не могли бы вы изменить мой существующий код, чтобы я знал, где именно находится цикл? Мой код работает для ручных значений, например, если бы я ввел диапазон вручную, скажем, 200, он останавливает итерацию на 119. Я хочу использовать логику счетчика пошагово.
 – 
Nithin
4 Фев 2022 в 09:52

@Фрэнк Йеллин

Спасибо за ответ. Не могли бы вы изменить мой существующий код, чтобы я знал, где именно находится цикл? Мой код работает для ручных значений, например, если бы я ввел диапазон вручную, скажем, 200, он останавливает итерацию на 119. Я хочу использовать логику счетчика пошагово.

0
Nithin 4 Фев 2022 в 09:47

На самом деле было две ошибки.

  1. Вы должны вычитать в четных местах и ​​прибавлять в нечетных. Так что пришлось перевернуть.

  2. Не было необходимости во втором цикле for. Первое время достаточно. Его можно решить целочисленным методом, но поскольку вы использовали строковый метод, уточненный код должен быть:

    sum = 0
    denominator = 1
    counter = 1
    #this is the main loop
    while '3.14' not in str(sum):
        #print(counter)
        if counter % 2 != 0:
            sum += 4/denominator
            print('sum=', sum)
        else:
            sum -= 4/denominator
        denominator += 2
        if '3.14' in str(sum):
            print(f'The iteration is {counter+1} and the values is {sum}')
            break
        counter += 1
    
0
Anshumaan Mishra 4 Фев 2022 в 09:54
Спасибо за ответ. Не могли бы вы изменить мой существующий код, чтобы я знал, где именно находится цикл? Мой код работает для ручных значений, например, если бы я ввел диапазон вручную, скажем, 200, он останавливает итерацию на 119. Я хочу использовать логику счетчика пошагово.
 – 
Nithin
4 Фев 2022 в 09:52