Discuss / Python / 不用本页知识的解答

不用本页知识的解答

Topic source

Cao Yi

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

这里贴一个不用本页知识的解答:

def pi(N):
    pi = 0
    for i in range(N):
        if (i % 2 == 0):
            pi += 4/(2 * i + 1)
        else:
            pi -= 4/(2 * i + 1)
    return pi

实际上如果用 while 循环,range() 函数都不需要了,这样看起来和 C 语言写的差不多。

#2 Created at ... [Delete] [Delete and Lock User]
import itertoolsdef pi(N):    jishu=itertools.count(1)#先创造一个自然数列    ns=itertools.takewhile(lambda x : x<=2*N-1,jishu)#用itertools.takewhile来限定数列的范围    num=[]#用一个空list来存储奇数数列    for i in ns:#利用for循环来筛选出奇数并存到num中        if i %2==1:            num.append(i)    l=[]#创建一个空list来存储添加正负号后的数列    for j in num:       if num.index(j)%2==0:           l1=4/j           l.append(l1)       else:            l2=-4/j            l.append(l2)    total=sum(l)#最后计算PI的值    return totalprint(pi(10))print(pi(100))print(pi(1000))print(pi(10000))assert 3.04<pi(10)<3.05assert 3.13<pi(100)<3.14assert 3.140<pi(1000)<3.141assert 3.1414<pi(10000)<3.1415print('ok')

  • 1

Reply