利用循环的步幅来计算派
利用正常的办法,
pi= 4 *(1-(1/3)+(1/5)-(1/7)+(1/9)-(1/11)+(1/13)-(1/15))
print(pi)
利用这段代码得出结果
我们如何利用循环来进行呢
一、思路
首先我们来利用excel表格来计算一下结果
我做了一个设想,让相加的部分先进行相加,然后再进行减法呢??
结果却不对
继续利用excel表格对这个结果进行列出
经过错误的结果,我明白了应该按公式里的顺序进行
先减法再加法
那么我一直加呢
我之前的理解是
1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13…
我将1/3+1/5先计算,然后变成
1 - (1/3 + 1/5) - (1/7 + 1/9)…
可是这样的结果却出现了偏差
10 - 3 + 5
那么我理解成3+5再减10呢
看来是不对的.
合理的解释应该是
(1-1/3) + (1/5 - 1/7)
思路用了很久才慢慢的清楚了
二、代码演变
基础代码
pi= 4 *(1-(1/3)+(1/5)-(1/7)+(1/9)-(1/11)+(1/13)-(1/15))
print(pi)
按循环的概念做记录
2025.1.13
过了一年,10月份停下一切。
12月半拿半放。
看看今天怎么样
如果将add 或者sub变量初始设置为字符串,则累计过程中会出现
TypeError: can only concatenate str (not "float") to str
的提示。
所以dem、add、sub都应该用0来为初始值
规律
所有被减数都是间隔都为2
问题
我现在得到了1除于每个间隔为2的数结果
我现在希望将两个相加的结果进行相减
将两个间隔为2的数相加的结果单独提出来。
如果进行嵌套式的循环呢
我之前的逻辑是1、3、5放外面进行循环
在他们里面增加 加 或 减。
但这次我想换一下
把加和减放到第一层循环里来用
是把减法放到第一层,
第二层作加法
但我感觉这个难度有点大
其实我们这么想,不论是什么是加减乘除法,都是数字填写在里面对吧。
1、嵌套里怎么写
2、第一层循环怎么写
嵌套并没有成功
但我想了这个注意,不知道如何,
add = (1 / (i + 2)) + (1 / (i + 4))
但是他得到了我用excel计算出来的部分结果。可以让他如何跳着进行,而不是逐一进行呢??
这样呢,我们来把3到15之间进行一个统计
以1为底数,然后步幅为2进行相加
1+2 = 3
1 +4 =5
1+6 =7
1+8= 9
1+10 =11
1 +12 =13
2、4、6、8、10中间差2
2、6、10 中间差4
4是不是可以认定为这个加减中的一个间隔呢
for i in range(1, 15, 2):
if i % 4 == 0 or i < 4:
add = (1 / (i + 2)) + (1 / (i + 4))
print(add)
得出了3+5 和5+7
*****************************250113 1646
2025.1.14
我们这么想
1 + 2 = 3
1 + 4 = 5
3 + 5 是不是1组呢
1 + 6 = 7
1 + 8 = 9
1 + 10 = 11
1+ 12 =13
1+ 14 =15
*****
for i in range(1, 15, 2):
add = (1 / (i + 2)) + (1 / (i + 4))
print((i + 2), (i + 4), add)
*****
2025.2.1
新年继续我自己的工作和生活
*************保留公式******************
备注:
此公式的sub代表这1 利用他为公式的头一个数
然后我设计的是将相加的部分让他们先自行相加,然后得出的数再进行相减
可是结果不对.
我利用excel得出的结果如果先自行相加,在进行减法得出的数值翻到不对.
这让我很迷惑
01.07.02
dem = 0
add = 0
sub = 1
for i in range(1, 15, 2):
add = (1 / (i + 2)) + (1 / (i + 4))
sub -= add
print((i + 2), (i + 4), add, sub)
*************保留公式******************
2025.2.3
先减法在加法
那么我一直加呢
我之前的理解是
1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13....
我将1/3+1/5先计算,然后变成
1 - (1/3 + 1/5) - (1/7 + 1/9).....
可是这样的结果却出现了偏差
10 - 3 + 5
那么我理解成3+5再减10呢
看来是不对的.
合理的解释应该是
(1-1/3) + (1/5 - 1/7)
01.07.03版本的头两次循环接近了我想要的结果
dem = 0
add = 0
sub = 1
for i in range(1, 15, 2):
add += (1 / i) - (1 / (i + 2))
print(i, (i + 2), add)
**************************
dem = 0
add = 0
sub = 1
for i in range(1, 15, 2):
add += (1 / i) - (1 / (i + 2))
print("{:.10f} {:.10f} {:.10f}".format((1 / i), (1 / (i + 2)), add))
经过这些代码的不断的设计,
今天终于做出来了.接近目标的代码
add = 0
sub = 1
for i in range(1, 15, 4):
add += (1 / i) - (1 / (i + 2))
print("经过不断的计算努力结果 {:.10f}".format( add))
成功了,
2025年继续努力
2024年10月到2025年1月天天的工作和多余的事情阻碍了太多多了
祝大家新年吉祥