《PYTHON语言程序设计》(2018版)1.7近似π。利用步幅来进行修改
利用循环的步幅来计算派
利用正常的办法,
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 = 31 +4 =5 1+6 =71+8= 91+10 =111 +12 =132、4、6、8、10中间差22、6、10 中间差44是不是可以认定为这个加减中的一个间隔呢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 = 31 + 4 = 53 + 5 是不是1组呢1 + 6 = 71 + 8 = 91 + 10 = 111+ 12 =131+ 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.02dem = 0
add = 0
sub = 1
for i in range(1, 15, 2):add = (1 / (i + 2)) + (1 / (i + 4))sub -= addprint((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月天天的工作和多余的事情阻碍了太多多了
祝大家新年吉祥