前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python语言程序设计之一--for循环

Python语言程序设计之一--for循环

作者头像
py3study
发布2020-01-20 14:11:40
5460
发布2020-01-20 14:11:40
举报
文章被收录于专栏:python3python3python3

最近学到了Pyhton中循环这一章。之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜。这次我开通了博客,就是要把这些珍贵的学习思考总结记录下来。从现在开始。

关于这一章始终有几个难点不懂。第一个就是每次循环过后,其中的累加变量是否要清零?这个问题困扰了我许久。很多次写完代码运行时发现,计算结果和我想要的结果根本不同。比如在《Python语言程序设计》这本书里,第5章习题第27题:

计算π的值:π =4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 + … + (-1)i+1 / (2*i -1)),显示当i=10000, 20000, ,,100000时π的值

题目不难,按公式写就行了。由于希望显示i在1万、2万,,时,π的值,所以用了两层for循环。最开始的代码如下:

# 累加变量
sum = 0

for i in range(10000, 100001, 10000):
    print('i =', i, '时,π的值为:', end = '')
    
    for j in range(1, i+1):
        sum += ((-1) ** (j + 1)) / (2 * j - 1)
    
    pi = 4 * sum

    print(pi)

运行结果如下:

i = 10000 时,π的值为:3.1414926535900345
i = 20000 时,π的值为:6.283035307179826
i = 30000 时,π的值为:9.42459462743631
i = 40000 时,π的值为:12.566162281026036
i = 50000 时,π的值为:15.707734934615797
i = 60000 时,π的值为:18.849310921538994
i = 70000 时,π的值为:21.990889289414817
i = 80000 时,π的值为:25.13246944300482
i = 90000 时,π的值为:28.27405098548388
i = 100000 时,π的值为:31.415633639074002

很明显,这个结果是错的。只有第一个结果是计算正确的。开始我百思不得其解,我的循环变量感觉没问题啊,循环步长也没错,计算公式也没错啊。怎么会这样?我想了想,第一个结果正确,但是从第二个结果就开始错,那问题就出在循环上面。当第一次计算结束时,此时sum 已经不再是0,而是有了一个值,由于sum定义在循环外部,所以下一次循环时,sum将带着第一次循环后的值进入下一次计算,相当于每循环一次,sum的值都在增加。相应的,π的值也在增加,这也就解释了为什么π的值越算越大。所以我将代码修改如下,就是进行了一步微调:将sum的定义移到第一层for循环的内部,i每循环一次,sum都要清零!!!

修改后的代码如下:

for i in range(10000, 100001, 10000):
    print('i =', i, '时,π的值为:', end = '')

    # 下面这句非常重要,每次计算完后累加变量要清零!
    sum = 0

    for j in range(i + 1, 0, -1):
        sum += ((-1) ** (j + 1)) / (2 * j - 1)
    
    pi = 4 * sum
    print(pi)

运行结果如下:

i = 10000 时,π的值为:3.1414926535900345
i = 20000 时,π的值为:3.1415426535898248
i = 30000 时,π的值为:3.141559320256462
i = 40000 时,π的值为:3.1415676535897985
i = 50000 时,π的值为:3.1415726535897814
i = 60000 时,π的值为:3.141575986923102
i = 70000 时,π的值为:3.141578367875482
i = 80000 时,π的值为:3.1415801535897496
i = 90000 时,π的值为:3.1415815424786238
i = 100000 时,π的值为:3.1415826535897198

这样才对嘛!随着 i 的增大,计算结果只能是在小范围内波动。

总结:循环变量是否要清零要看情况而定,但如果希望每次循环时,累加变量能以一个全新的值进入下一次循环那就要清零了。像这样喜欢在代码前面定义变量并赋初值的习惯,是写C留下的。但遇到循环时要小心,变量的作用域会在不知不觉间让你犯错。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档