python编程从入门到实践pdf_Python编程入门研读笔记(二)
《Python的四则运算》是本单元的第二课,本课依然存在许多“坑”。请各位老师放心,这些坑我已经帮你踩过了。如果您对我的教材研读笔记有任何意见或建议,请在文章底部留言O(∩_∩)O~
关注我,后续更新更精彩!
PS:因无教参,本文包含大量主观臆测、吐槽、恶搞及自作主张的教材内容修订。正能量不足者请谨慎阅读!
内容目录
课题名内容框架结构教材解读&吐槽&建议说一说学一学Python——“运算高手”一般数学计算整除与取余神奇的变量做一做第1题第(1)小题第(2)小题第2题试一试
课题名
《第9课 Python的四则运算》
内容框架结构
教材解读&吐槽&建议
教学建议
《Python编程入门》这一单元每课的知识容量都挺大,建议每课按照学情酌情划分课时。本课“做一做”的题目建议放在相应知识点探究、交流、讲解答疑完成后作为拓展习题处理,也可作为知识点间的过渡问题使用。
Python能帮我们做些什么?
萌芽的问题其实也是大多数学生心中的疑问。在上一课中,学生完成了所有编程语言的入门第一课“Hello,world!”,学会了使用print()
函数打印各种图形。自然会产生“Python还能做些什么?”的疑问。作为回应,本课教学内容安排了Python语言基础应用之——“数学计算”。
说一说
从“说一说”部分的内容看,教材的编写意图可能是想通过“人算”与“Python机算”的对比来凸显Python在数学计算方面的优势,营造问题情境,激发学生学习兴趣。毕竟学生无论心算还是笔算肯定都没有机器快嘛。正所谓:没有对比,就没有伤害!
注意,坑来啦!!!
第一,我们的学生是学过Scratch和WPS表格的,这两款软件也是可以快速、准确的完成计算任务的。
教学建议
既然以往所学知识也可以用来快速解决此类问题且无法突显python的优势,何不放弃使用人机竞赛的问题情境营造方式,转而从回顾上节课所学内容入手。在教师带领学生回顾完Python的启动、“Hello,world!"程序、
print("1234+5678")
与print(1234+5678)
的差异后,再抛出本课“说一说”的计算问题。经过回顾温习的前期铺垫,如果学生不是故意捣乱肯定会回答使用Python来计算,并能够在自主探究中综合运用上一课“做一做”中运行程序print(1234+5678)
得到的经验以及在WPS表格中学到的运算符知识来解决问题。
第二,小数(浮点数)运算结果的准确性问题。“说一说”中四个数学算式使用Python计算结果如下图所示。第二个算式,148.08除12.34的结果应该是12。而用print(148.08/12.34)
得到的结果却是12.000000000000002。
也就是说使用教材教授的方法计算整数乘整数、整数加整数、整数减整数是没有问题的,但计算小数(浮点数)除小数(浮点数)时会翻车!
如果真用这段程序和学生比赛或做范例演示,场面一定会极度尴尬。而且学生自主探究时遇到这样的计算结果也会因为与已有数学经验出现认知冲突而感到困惑。想到这里,我脑补出这样的场景……
教学建议
是时候表演真正的技术啦!下面展示Python 3.7.4中小数(浮点)运算的正确姿势。
这段代码学生不理解不要紧,只要计算结果正确,能让学生对Python重拾信心就可以。还可以由此拓展并简单介绍一下Python语言的特性——模块。
使用decimal模块用于浮点数可以确保数据精度,小学阶段了解即可不必深究!
学一学
“学一学”是本课的重头戏,它共2块内容:
Python——“运算高手”
神奇的变量
Python——“运算高手”
本小节可以分为“一般数学计算”和“整除与取余”两大板块处理。
一般数学计算
"Hello,world!")
回顾已经敲过的python程序,师生不仅共同经历了计算翻车和重拾信心,还使用Python处理了多种类型的数据。
整数:1234、5678、4321、875839、9587467、6354261、95768
小数(浮点数):148.08、12.34
字符串:"Hello,world!"、"1234+5678"、"148.08"、"12.34"、
教学建议
通过回顾写过的程序代码,并从中划出Python能够处理的数据类型,这样做比直接罗列效果好的多。毕竟,这些整数、小数(浮点数)、字符串学生都用过。
37页至38页列举的数据类型中整数和小数里的例子,所有数据均未曾在前面的代码中出现过。就这样半路冒出来,着实有些突兀!
关于字符串,38页列举的字符串的例子全部使用中文双引号包裹。亲,在python中字符串两端用中文双引号是会报错的!这一点在上一课的“试一试”里已经上机验证过。此处的排版失误如果得不到及时更正,将会成为处理字符串时的“隐患”!当然,你也可以让学生自己动手从教材里挑错O(∩_∩)O~
字符串的意思就是“一串字符”,比如“Hello,Charlie”是一个字符串,“How are you?”也是一个字符串。Python要求字符串必须使用引号括起来,使用单引号也行,使用双引号也行——只要两边的引号能配对即可。
——《疯狂Python讲义》第21页“2.4 字符串入门”
另外,阿尔法还在这里补了一句“一定不要忘记给字符串添加双引号哦!”。阿尔法的话虽然没有错误,但还是有些问题。字符串使用双引号是c/c++等编程语言的传统做法,而Python是个特立独行的语言。Python不但取缔了大括号,还打破了字符串只能用英文双引号的限制。在Python中,字符串用一对英文单引号包裹也行,用一对英文双引号也可以。亲,在Python3.7.4里字符串'Hello,world!'
也是合法的吆!
程序代码2.1的前四行,除了在进行“小数与小数的乘法运算”时继续翻车外,还有一个问题会使学生出现认知冲突。代码print(8/2)
和print(8.0/2)
的运算结果均为4.0。因为,按照学生已有的数学知识,前者的结果应该是4。
那么问题来了!教材中小数(浮点)运算为何会频频翻车?print(8/2)
和print(8.0/2)
为什么都会得到结果4.0?是太阳风暴影响了地球磁场继而干扰了程序运行,还是计算机之父冯·诺依曼显灵恶搞,还是电脑抽风了?
其实,我们使用的编程语言大多都有小数(浮点)运算不准确的问题。追根寻源,这与计算机内部浮点数的表示方法有关。不论是依然坚挺的老牌编程语言C++(下图),还是神坛新贵Python都有这种问题。
然而每种编程语言都会有自己的解决方案,比如前面我们使用的Python中的decimal模块。
from decimal
解决了Python小数(浮点)运算翻车,我们再来说一下除法问题。
在Python 2.x中“/”除法运算符和C/C++中的除法运算是一样的。如果“/”两侧都是整数,那就是整除运算。但只要“/”两边有一侧是小数(浮点),那就是一般除法。
在Python 3.x中无论“/”除法运算符两侧是整数还是小数(浮点数)都会进行一般除法。也就是说,即使是整数除整数也会进行一般除法运算,并且运算结果是小数(浮点数)形式。所以,print(8/2)
和print(8.0/2)
的计算结果都是4.0。虽然会发生认知冲突,但Python 3.x做除法运算时就是这么处理的!编者选择这两个算式放在这里,也许就是想说明此问题。
程序代码2.1的后两行,学生第一次在程序中涉及对字符串运算。程序的实际输出结果可能超出学生的心理预期,但这有助于学生加深对Python中字符串操作的认识。
教学建议
Python对整数、小数(浮点数)、字符串等数据类型的处理规则是在设计这门编程语言时就定好的。学生在探究过程中发现的所有与数据处理有关的经验都是“公理”,并不需要让学生通过大量的训练集去归纳、总结规律。加之Python的数学运算操作符又与在WPS表格中学到的经验相吻合,此处可以放手让学生去尝试,并总结Python处理数据的“规律”。
关于“先算括号,再算括号外”、“先算乘除,后算加减”的顺序问题,课本没有提供相关例程。此处,可以让学生自己设计程序去上机验证,也可以使用“做一做”第一题的第一小题验证。毕竟,实践是检验真理的唯一标准,源代码是最好的文档!
整除与取余
教学建议
可以使用“7个苹果平均分给3个人,每人分多少个?还剩多少个?”或类似的问题来过渡。因为像这种必须用整除和取余来解决的问题,学生用前面学习的一般数学计算是无法解决的。由此,可以顺理成章的引出“整除与取余”。
学生已经在二年级下学期学习过《有余数的除法》,知道什么是商,什么是余数。那么我们就可以引导学生使用已有数学知识解决分苹果问题。
这样做的好处是可以避免学生误认为,整除是对商的小数部分四舍五入以保留整数部分。
教学建议
“做一做”第一题第二小题可在此处用作随堂练习。
神奇的变量
教材在引入“变量”这一概念时,编者试图通过“制造与预期不符的输出结果”来营造问题情境。怎奈这段程序不给力啊!咋看都不像能输出a
!
你品,你细品,你细细地品!
即使删掉a=3.1415926
这行,程序也不会输出a
!别问为什么,上一课我们已经在“试一试”里试过了。要想让程序输出a
可以这样修改程序:
"a")
或者用变量
"a"
有没有更优雅的例子可以用来引入“变量”呢?
教学建议
“神奇的变量”中,教材举例并不十分合适。改用下面的例子效果更佳!
问题:老师想用下面这行程序输出Hello
,能成功吗?
print(Hello)
第8课的经验已经告诉我们,这段程序直接运行是会报错的。
>>> print(Hello)Traceback (most recent call last): File "", line 1, in NameError: name 'Hello' is not defined
此时,学生的第一反应应该是:运用第8课所学,在小括号内添加双引号“"”。这样即可完美输出Hello
。
"Hello")
这时候老师可以继续追问,还有没有其他方法?待学生无招可用之时,祭出下面的骚操作。然后在学生疑惑的目光中趁热打铁引入“变量”的概念。
"Hello"
此时的Hello
已经不是一个字符串,而是一个变量,是一个用于存放数据的“容器”。Hello="Hello"
将字符串"Hello"存入变量Hello
中。print(Hello)
则将变量Hello
中存放的数据(字符串"Hello")打印了出来。如果此时学生感觉不好理解,可以让学生动手把字符串"Hello"改为"Hello,World!"或其他内容试一试。
"Hello,World!"
教学建议
注意,本课只是简单一提“变量名常用a、b、c等字母表示”,后续并未详细介绍变量的命名规则。此处埋下的“雷”,会在学生写程序定义变量时成为“安全隐患”。那怎么拓展延伸到变量的命名规则呢?请接着往下看。
在学生理解了“变量是什么?”、“变量怎么用?”后,不妨回到第8课“试一试”的第一题。程序print("Hello,World!")
去掉双引号后,如何改造才能得到预期的运行结果?
如果学生照猫画虎写出下面的程序。
"Hello,World!"
那运行时一定是会报错滴!为很么呢?因为他没有遵循Python的变量名命名规则!为啥会犯错?教材没讲呗!
"Hello,World!"
由此即可拓展介绍Python中的变量名命名规则。
Python需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就是合法的名字)。Python语言的标识符必须以字母、下划线()开头,后面可以跟任意数目的字母、数字和下划线()。此处的字母并不局限于26个英文字母,可以包含中文字符、日文字符等。
由于Python3支持UTF-8字符集,因此Python3的标识符可以使用UTF-8所能表示的多种语言的字符。Python语言是区分大小写的,因此abc和Abc是两个不同的标识符。
——《疯狂Python讲义》第16页2.2.3“变量的命名规则”
在上面的程序中Hello,World!
并不是合法的变量名,因为它包含了不应该使用的逗号和感叹号!所以,程序无情的报错了!至于是否介绍见名知意、驼峰命名法之类的编程规范,大家还是视学情灵活处理吧!
为了形象的是说明变量的作用,编者很用心的配上了图解。
对变量a、b的操作很好理解。分别为变量a、b赋值5、6.5,然后使用print()
函数输出。对变量c的操作就让人很难理解,天晓得编者想往里放的是变量apple
的值,还是字符串"apple"
啊!如果是字符串,那加上英文双引号啊!我认为这是排版失误,你觉得呢?
做一做
第1题
第(1)小题
简单,就是把算式12+32×2-(25+7)÷4使用Python的数学运算操作符改写为12+32*2-(25+7)/4
然后放到print()
函数里。
12+
需要注意的是:前面学生没有遇到过小括号套小括号的情况,可能会有点蒙【晕】
第(2)小题
题面在输出描述上不够明确,也可能是我理解能力太弱。反正我看了半天没弄明白题目的要求,是每个人能分到的钱数和最后剩余的钱数放在一行用空格分隔输出,还是用两行分别输出?
如果是用两行分别输出。
方案一:
200//
方案二:
200//
如果是放在一行,用一个空格分隔输出。
这需要用到后面“试一试”出现的print(算式1,算式2)
输出方式。我想这应该不是编者的本意。毕竟在此处我们默认学生只会用print(算式)
这种输出型形式。
方案一:
200//
方案二:
200//
第2题
"我"
虽然学生在作这道题时是第一次接触变量的四则运算(有点突兀哈),但从教学效果看问题不大!基本上都能正确预判程序结果。如果有学生理解不了print(a+b+c)
这样的程序,可以让学生把变量里存放的字符串替换进去,把print(a+b+c)
变成print("我"+"爱看"+"电视")
。这样就好理解了。
试一试
这道题问题很大!虽然新印次(2019年6月第31次印刷)已经修改了题面,但仍然有问题。
我们先看2018年8月第28次印刷的第一版新教材,题面是这样的:
已知:甲、乙、丙3人的年龄各不相同。甲的年龄是12岁,乙的年龄比丙的年龄大9岁,甲的年龄是乙年龄的2倍。补全程序,分别用a、b、c表示甲、乙、丙3人的年龄,求出乙、丙的年龄b、c。
12
“甲的年龄是12岁”,这个不用说,第1行已经替我们搞定了。“乙的年龄比丙的年龄大9岁”,学生可能看到这就直接在第2行填上了b=c+9
。
12
这样可以吗?对错暂且不论,接着往下看。“甲的年龄是乙年龄的2倍”,已知甲的年龄是12岁,这是要求乙年龄的节奏啊!显然,我们用“乙的年龄比丙的年龄大9岁”这条信息来补全第2行程序是错误的,应该用它来计算丙的年龄。应该把第2行程序改为b=a/2
,第三行改为c=b-9
。
12
我们执行一下这段程序
12
结果有些出乎意料!首先,为啥年龄输出是小数呢?其次,年龄-3.0是什么鬼?
Python除法结果是小数的问题,前面已经解释过了。甲的年龄是乙年龄的2倍,那么甲的年龄一定是偶数!so,我们还是用整除吧!丙的年龄输出小数是因为b是小数。Python中小数减整数,结果还是小数!
12
执行修改后的程序
12
第一个问题解决了,可人的年龄怎么可能是负数呢?难道丙是鬼啊!既然建国以后的动物不能成精,那鬼也是不存在的!为了解决这个BUG,2019年6月第31次印刷的教材修改了题面:
已知:甲、乙、丙3人的年龄各不相同。甲的年龄是12岁,乙的年龄比丙的年龄大9岁,甲的年龄是丙年龄的2倍。补全程序,分别用a、b、c表示甲、乙、丙3人的年龄,求出乙、丙的年龄b、c。
12
我们来分析一下:
“乙的年龄比丙的年龄大9岁”,那么把丙的年龄加9就可以得到乙的年龄啦!马上动手补全第2行程序:
12
“甲的年龄是丙年龄的2倍”,那么甲的年龄除以2(二话不说,上整除“//”)就可以得到丙的年龄(6岁)。
12
大功告成O(∩_∩)O~
可是逻辑没错,python报错啊!
>
python的变量不用定义,但也要先赋值再使用。第2行b=c+9
,c还没赋值你就用,肯定报错啊!
教学建议
如果你用的是新印次,建议把程序的第2、3行位置调换一下,变成:
12
完整程序如下
12
执行结果
12
如果是你用的是老印次(毕竟我们也是循环教材),那就把“甲的年龄是乙年龄的2倍”改成“乙的年龄是甲年龄的2倍”。即:
已知:甲、乙、丙3人的年龄各不相同。甲的年龄是12岁,乙的年龄比丙的年龄大9岁,乙的年龄是甲年龄的2倍。补全程序,分别用a、b、c表示甲、乙、丙3人的年龄,求出乙、丙的年龄b、c。
补全后的程序:
12
执行结果
12
关注随心,取关随缘。
请相信,一切满怀信任的等待都是值得的!
python编程从入门到实践pdf_Python编程入门研读笔记(二)相关推荐
- Python编程:从入门到实践第六章读书笔记6.3遍历字典
Python编程:从入门到实践第六章读书笔记6.3遍历字典 #coding:gbk#6.3.1遍历所有的键-值对 user_0 = {'username': 'efermi','first': 'en ...
- python从入门到实践_Python编程从入门到实践日记Day32
Python编程从入门到实践日记Day32 第7章 函数(八) 1.传递任意数量的实参 - 使用任意数量的关键字实参 有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息.在这种情 ...
- python 从入门到实践_Python编程从入门到实践日记Day15
Python编程从入门到实践日记Day15 第5章 字典(三) 1.使用字典(三) -由类似对象组成的字典 在前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,但你也可以使用字典来存 ...
- python 从入门到实践 pdf_python入门基础实践课,带你有效的学习python
你还在枯燥的一个人学python吗?你尝试过python入门基础实践课吗? python入门实践课,带你快速了解python,它与你平时学python,有什么不一样的地方呢: 1.完全免费 第一次学p ...
- python从入门到实践和从入门到精通-Python从入门到实践之列表|第1天
User:你好我是森林 Date:2018-02-14 Mark:<Python从入门到实践> 列表 本章主要从列表的概念入手,逐步深入到对列表的操作. 列表 概念 列表由一系列按特定顺序 ...
- 手把手带你入门和实践特征工程的万字笔记(附代码下载)
? 说起特征工程,都说是机器学习建模中最为重要而且费时的一项工作,而且它涉及的知识点会非常地多,经验老道的老司机自然是轻车熟路了,但对于刚刚入门的新手司机,学习到的知识点都是东一点西一点的,不够系统化 ...
- python编程从入门到实践读书笔记-《Python编程:从入门到实践》项目部分读书笔记(二)...
鸽了一个暑假没有更新,现在趁着还没开学更一下.咕咕咕 上期作业: 请创建一个Django项目,命名为Blog,建不建立虚拟环境随便你,最后本地跑成了就行. 步骤: ①在需要创建工程的文件夹下打开cmd ...
- python编程入门与实践_Python编程入门到实践(二)
1.用户输入和while循环 python2.7使用raw_input()来提示用户输入与python3中的input()一样,也将解读为字符串. name=input("please en ...
- 《Python编程:从入门到实践》基础知识部分笔记和作业
2.3.1 修改字符串大小写 变量名.title() #单词首字母大写 变量名.upper() #全部大写 变量名.lower() #全部小写 2.3.2 在字符串中使用变量(format ...
最新文章
- 假设检验怎么做?这次把方法+Python代码一并教给你
- ISE 14.7安装教程最新版(Win10安装)——解决Win10安装完后打不开快捷方式的方法
- xp系统怎么弄清微软服务器名称,xp系统电脑怎么远程云服务器
- oracle---函数(trunc,nvl,nvl2)
- ASP.NET Core在 .NET 5 Preview 7的更新
- linux故障转移集群,部署AlwaysOn第一步:搭建Windows服务器故障转移集群
- Spring Boot 系列(七)Swagger2-生成RESTful接口文档
- 盘点大数据分析AI工具的常用算法
- 模仿360加速球制作一个动态ProgressBar
- 工作 3 年和读研 3 年哪个更值?
- matlab工作区显示的是什么,matlab工作区介绍
- 计算机考研如何选?中国人民大学学长两年考研经验+权威预测
- gdb 查看是否 栈溢出_GDB调试之二栈溢出
- Hello MySQL(八)——自定义函数
- krpano默认皮肤详解
- 常用第三方APP 的url scheme
- LOJ 6198. 谢特(后缀数组+可持久化Trie)
- 30、OAK摄像头使用官方的yolox进行初训练和测试
- 网站会员与动网论坛会员同步整合非官方方法
- CreateRemoteThreadWriteProcessMemory技术 简要的
热门文章
- 【C语言】数据结构C语言版 实验6 树
- 【Pyhton爬虫】中国大学排名爬虫
- 【C语言】(数组方式)输出一组成绩中的最高分与最低分
- C#开发笔记,点点细微,处处真情,记录开发中的难言之隐
- 了解常见的网络架构图
- 探索 Python + HyperLPR 进行车牌识别
- IDEA创建包含多个module的Maven工程
- SCI论文全攻略:选刊\投稿\修回与退稿
- 计算机文档我的文档丢失,恢复我的电脑窗口中共享文档与我的文档不见了的方法...
- alphac测试和bata测试区别_【软件测试】和【游戏测试】有区别么?