Python语言程序设计之一--for循环中累加变量是否要清零
最近学到了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留下的。但遇到循环时要小心,变量的作用域会在不知不觉间让你犯错。
Python语言程序设计之一--for循环中累加变量是否要清零的更多相关文章
- Python语言程序设计之三--列表List常见操作和错误总结
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...
- Python语言程序设计之二--用turtle库画围棋棋盘和正、余弦函数图形
这篇笔记依然是在做<Python语言程序设计>第5章循环的习题.其中有两类问题需要记录下来. 第一是如何画围棋棋盘.围棋棋盘共有19纵19横.其中,位于(0,0)的星位叫天元,其余8个星位 ...
- 【任务】Python语言程序设计.MOOC学习
[博客导航] [Python导航] 任务 18年11月29日开始,通过9周时间跨度,投入约50小时时间,在19年1月25日之前,完成中国大学MOOC平台上的<Python语言程序设计>课程 ...
- 全国计算机等级考试二级Python语言程序设计考试大纲
全国计算机等级考试二级Python语言程序设计考试大纲(2018年版) 基本要求 掌握Python语言的基本语法规则. 掌握不少于2个基本的Python标准库. 掌握不少于2个Python第三方库,掌 ...
- Python语言程序设计(1)--实例1和基本知识点
记录慕课大学课程<Python语言程序设计>的学习历程. 实例1:温度转换 #温度转换TempStr = input("请输入带有符号的温度值:") #TempStr是 ...
- 【SQL】小心在循环中声明变量——浅析SQL变量作用域
本文适用:T-SQL(SQL Server) 先看这个语句: --跑3圈 BEGIN --每圈都定义一个表变量,并插入一行 DECLARE @t TABLE(Col INT PRIMARY KEY) ...
- js for 循环中的 变量问题。
今日处理项目中的一个循环,本来就是一个小小的for循环,后来发现该段程序出现了问题,仔细检查代码没有发现其中的错误.无奈只好叫来了老大帮忙.通过在模版中断点调试(该方式只能自己写debugger断点) ...
- 《python语言程序设计》_第5章_循环
#5.1_引言 程序1: 结果: 程序2: 结果: sum is 45 ##注意整个循环语句都要内缩进循环内部 ##ctrl+c中止一个无限循环运行 程序清单5-1: 结果: #5.2.1_实例研究: ...
- 【学习笔记】PYTHON语言程序设计(北理工 嵩天)
1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则 摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...
随机推荐
- 位运算>>和>>>区别
int a=-1; Integer b=0; Integer c=0; System.out.println(Integer.toBinaryString(a)); b=a>>1; c=a ...
- 爬虫(Xpath)——爬tieba.baidu.com
工具:python3 核心知识点: 1)lxml包不能用pip下载,因为里面有其他语言编写的文件 2)urlopen返回的请求是html文件,要使用 content = etree.HTML(html ...
- code review的意义
https://blog.csdn.net/brodycai/article/details/19636621
- 在ubuntu 12.04上安装tomcat 7.40
因为源上的版本问题,所以没有使用源上的自动安装包,老规矩,Tomcat 7.0.40 Core下载地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/ ...
- CentOS7.5安装JDK1.8
1.准备JDK安装包 [1]查看环境 cat /etc/redhat-release [2]下载JDK1.8 网址: https://www.oracle.com/technetwork/java/j ...
- SQL Server事务的四种隔离级别
在SQL标准中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些是在事务内和事务间可见的,哪些是不可见的.较低级别的隔离通常可以执行更高的并发,系统的开销也更低. 1.未提交读(Read ...
- c#基础3-方法的重载静态和非静态,字段属性,方法
方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方 ...
- jar包生成exe可执行程序
1.生成工具EXE4J下载链接:https://www.ej-technologies.com/download/exe4j/files 2.安装.使用:https://blog.csdn.net/h ...
- pt-table-checksum和pt-table-sync
环境:系统bsd,标准安装,ports安装的mysql. 主172.16.21.126 从172.16.21.128vi /etc/rc.conf 添加 mysql_enable="YES& ...
- Yii2.0数据库缓存依赖发布的使用理解
对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候Yii2.0的缓存依赖发布就起到至关重要的作用了!现将主要的使用流程介绍 ...