python提问(x_x;)

求s=4*(1-1/3+1/5-1/7+...+1/n当s前三位数字首次为3.14时的n值,想知道哪里有问题。

img

可能是最后要输出2n-1这个值,因为上面的代码中2n-1才是题目中所指的n,修改如下:



s1=0
n=1
while True:
    if n%2!=0:
        i=2*n-1
        l=1/i
    else:
        i=-(2*n-1)
        l=1/i
    s1=s1+l
    s=4*s1
    s2=str(s)
    #print("n=",n,"i=",i,'l=',l,'s1=',s1,'s=',s)
    if s2[:4]=='3.14':
        print("此时的n值为:",2*n-1) # 2*n-1即题目所求的n的值
        print(s)
        break
    n=n+1


img

  • 以下回答由chatgpt基于相关博客总结生成:

    问题标题: Python计算s的值,需要求s前三位数字首次为3.14时的n值。

    问题内容: 我在计算s=4*(1-1/3+1/5-1/7+...+1/n的过程中,遇到了问题。我想求出n的值,使得s的前三位数字首次为3.14。目前我已经尝试了多次,但结果不太对。请问我在计算过程中哪里出了问题,如何获得正确的n值?

    解决方案:

    1. 通过以下代码计算s,观察s的值:
    s = 0
    i = 1
    while True:
        s += 4*(1/i - 1/(i+2)) 
        if str(s)[:4] == '3.14':   # 当s前三位为3.14时,输出i值并退出循环
            print("i为:",i)
            break
        i += 4
    
    1. 程序输出的结果为i值,此时需要求出对应的n值。根据s的计算公式可得: s = 4 * (1-1/3+1/5-1/7+...+1/n) 通过观察公式,得出n与i的转换关系如下: 当i=n-1时,s为正数 当i=n时,s为负数 当i=n+1时,s为正数 因此可以通过二分查找的方式来寻找i相应的n值。具体方法如下:

      ```python

      二分查找n

      def find_n(i: int): left = 1 right = 1000000 while left <= right: mid = (left + right) // 2 s = 4 * (1 - 1/3 + 1/5 - 1/7 + ... + 1/mid) # 判断i与n的转换关系 if mid - 1 == i: if s > 0: right = mid - 1 elif s < 0: left = mid + 1 else: return mid elif mid == i: if s > 0: right = mid - 1 else: left = mid + 1 elif mid + 1 == i: if s > 0: left = mid + 1 elif s < 0: right = mid - 1 else: return mid else: if s > 0: right = mid - 1 else: left = mid + 1 return None ```

      通过以上二分查找的代码可以找到i值对应的n值。