Discuss / Python / 之前学的生成器

之前学的生成器

Topic source

雲☁

#1 Created at ... [Delete] [Delete and Lock User]

import itertools

def pi(N):

    odd_gen = [2 * i + 1 for i in range(999999)]

    odd_list = []

    for n in range(N):

        if n % 2:

            odd_list.append(4/-odd_gen[n])

        else:

            odd_list.append(4/odd_gen[n])

    return sum(odd_list)

# 测试 #:

print(pi(10))

print(pi(100))

print(pi(1000))

print(pi(10000))

assert 3.04 < pi(10) < 3.05

assert 3.13 < pi(100) < 3.14

assert 3.140 < pi(1000) < 3.141

assert 3.1414 < pi(10000) < 3.1415

print('ok')

雲☁

#2 Created at ... [Delete] [Delete and Lock User]

itertools

def pi(n):

    odds = itertools.takewhile(lambda x: x < 2 * n, itertools.count(1, 2))

    fac = itertools.cycle([1, -1])

    sum = 0

    for i in odds:

        sum += 4 * next(fac) / i

    return sum


  • 1

Reply