当前课程知识点:Python 交互式程序设计导论 >  第2周 >  B 课程视频(输入框、全局变量) >  编程技巧

返回《Python 交互式程序设计导论》慕课在线视频课程列表

编程技巧在线视频

编程技巧

下一节:“猫咪藏在哪个房间”游戏

返回《Python 交互式程序设计导论》慕课在线视频列表

编程技巧课程教案、知识点、字幕

今天,我们的主要内容有两个部分

第一部分是介绍一下,全局变量和局部变量的使用方法

以及在使用过程中因该注意的问题

第二个部分是想给大家介绍几个调试程序的技巧

我们现在开始第一部分的学习

我先运行下,看这个例子,能不能正常的运行

我们运行之后呢,发现它有一个错误

通过前面的学习我们容易,就知道

点击链接呢就可以定义到错误出现的那一行

看,首先是在第四行,它告诉我们说

局部变量times被引用了,但是是在赋值之前引用了的

就是说,给它,还没有给它分配值呢,它就拿去用去了

嗯... 但是在我们这个里面,很明显我们的times

因该是一个全局变量,全局变量

那它什么会提示我这个地方是局部变量呢?这个给大家解释一下

首先这个times它是一个局部变量,当我们写在这个函数里面的时候

它就会自动定义一个局部变量times,和上面的这个times是不一样的

那它认为,这个局部变量在这才给它赋值呢,然后你就先用了,这是不对的

所以它把这个错误给提示出来了,说局部变量还没有分配值就用了

那这个错误是这样的,想让函数知道它使用的是一个全局变量

不用再去定义一个局部变量的时候我们要准确的告诉它全局变量是什么?

那在表明(在说明)一个全局变量的时候,我们用到的关键字是global

全局的意思,那times是全局变量。

好,我已经指定了它的全局变量就是times

那我在运行的时候

然后大家看一下剩余次数

我调用了一次的时候times应该是9

然后我再调用一次的时候times是8

现在大家比较清楚了全局变量应该怎么用

在函数或者你需要它的地方如果你要使用它的值

你一定要指明告诉这个函数它所用到的函数它所用到的变量是全局变量

现在我们看第二例子同样是有关全局变量的一个例子我们再看

我们先看一下,我们运行一下代码没有出错

然后呢我要打印下times了啦

大家分析一下我第一次调用这个这个函数的的时候输入的参数是4说明这个times被设置成4

然后在第二次调用的时候这个times赋值

t赋值是6,它就会被赋值为6,这个times就是6

这个时候打印times的值应该是6,我们打印一下看是几呢?

还是0这是为什么呢 你看这个我定义的全局变量是0,这个它打印的时候还是0

那说明我两次的调用set_remain_time(t)

设置剩余时间的时候这个函数时候这个函数没起作用

那我在函数里面打印下看它到底有没有去修改我这个times的值,

每次调用时是不是确实调用了这个函数而且times的值被修改了

一看是 诶 对的 第一次调用的时候是4

第二次调用times的值是6,打印结果也可以看出来是4和6

但是最终的times值仍然是0

这个地方的问题主要是这样的,我们在调用一次这个函数的时候

程序就会生成一个局部变量times

这个times和这个times不一样,这是全局变量times,这个是局部变量times

它会把它的输入参数,函数的输入参数,赋值给它的局部变量times

这是一个临时值,没有被保留,然后在第二次调用这个函数的时候,

同样传入的值是6,它会把6这个值呢,给另外一个临时变量也叫times

同样这个times呢,也没有被保留,那就是我们在最后打印这个times的时候

它仍然打印的是我们这个0值,那怎么改变这种情况

只要你觉得它应该是一个在你的程序里是一个全局变量

那你就在这个里面同样类似于同样的方法global,关键字global,times 写上你全局变量的名字

运行 对了吧

第二次赋值的时候是6,然后呢它就会打印出6这个值

这个时候我先把这地方删掉

打印临时变量的那个值print我先删掉,然后我在运行下,是6吧

那我们对比下这两个例子有什么不同呢,在第一个例子里面,

他是在定义全局变量前就使用了这个值它提示我没有赋值就用了这个局部变量

它在第一个例子里面,它没有用,它是修改了这个变量的值

修改变量值的时候呢其实我们是想让它修改全局变量

但是它在修改的时候,它自己会创建一个局部变和你那个名字是一样的

它会创建一个局部变量,临时保存这个值,临时保存呢啊

所以呢它也没修改全局变量的值

这是使用全局变量和局部变量的时候,两个应该注意的问题

就是说你要改变全局变量的值,那么你一定

要指明一定要告诉这个函数你用的现在你用的是全局变量,而不是一个局部变量

那么我们来看第三个例子

第三个例子同样是一个全局变量和一个局部变量,

我们运行一下看有什么结果,我们运行一下,它仍然是获取呢剩余时间

那我剩余时间刚开始的时候是10 是吧

然后在这个函数每调用一次我的times就会减1

然后我看我调用了一次,返回值,赋值给tmp

变量,临时变量啊,然后我打印下临时变量,看下结果,那第二个呢是9

说times是9,说明我在调用的时候,在执行这句话的时候,它确实调用了这个函数

然后呢这个全局变量times也确实减掉了1,自减了1,啊,变成了9

那它会打印出none值呢 none是什么呢

在我们python语言里面呢我们每一个函数都会默认有个返回值

当不显示返回它的值的时候,它返回的就是一个none值

什么叫显示的返回呢,显示的返回意思就是说你写上一个return语句,这个就显示的返回

如果你不写的话,这就隐式的返回,此时呢函数会默认给你返回一个none值

none意思是什么都没有,当你的函数需要返回时

就是说你要用这个函数返回值参与一些运算的话

那就让它返回显示,显示的返回写上return语句

如果你不需要这个函数返回的值,你只是让它计算而已,不需要返回值的时候

那你就不要写return语句,函数会默认给你返回一个none值,这是函数的返回

第三个问题,接下来我们看下一个例子

我们先运行下这个代码,看它是用来做什么的

我也没有去看代码,是吧

也没有看这个程序,我也不知道这个程序是干什么的,然后把它放在这个地方

看它有一个按钮,一个输入框。标签提示你输入数字。好吧我输入一个4

恩 1 是吧 然后他不是说增加吗?然后我点一下增加,

然后同样输入这个4,这么大的一个数65536

那我现在就不明白这个到底是用来做什么的

这个就是给大家介绍一些技巧,增加打印信息

来帮助你阅读程序,好,我怎么增加打印信息呢

看一下,print打印一个,打印,我在这个f函数的时候

f函数入口,就是函数刚开始吧,n和x的值我打印一下,n和x的值为

打印一下啊,大家写print语句的时候不要打错了啊

然后n,x是吧n,x,然后呢我在执行完以后,运算之后

我再打印一下,在f函数结束的时候,n和x的值为

同样我打印一下啊,x,n和x,n和x

那我在打印下result的值吧,结果

result的值我也打印一下,这是我的f(n)这个函数

然后我在看一下,这个,他不是还有一个按钮的事件吗?对吧

按钮的事件因为是一个全局变量X了,我。打印一下

在X增加之前是多少?我就button_handler吧

我说在,这个中X增加之前为几?x,是吧

然后呢,我把它复制一下,然后在X变化之后来打印一个

注意缩进,注意缩进啊,说X增加之后为多少?

这是一个输入框的事件,它打印的就是我们

输入的数,经过f运算之后的值,看到了没有

那我运行下,刚才呢我们已经知道这个结果呢非常的让人不清楚

比较模糊,我在运行一下,看大家能不能,从结果里面

会发现这个函数是用来干嘛的,我把它放在这个地方

同样输入一个数字2,看,它说在f函数的入口

n的值是2,是吧,X的值是0,结束的时候2和0

没有变然后呢,结果是1.0,对吧

然后增加,增加,增加

现在呢,X增加变成5了,对不对,然后我在输入

诶,它说f函数结束的时候n是2,X是5,结果是32

那我们一看好像是2的5次方,2的5次方

那我再增加一个,现在变成

如果现在确实计算的是,调一下

如果现在确实计算的是我2的n次方话,那个这个是时候的值因该是64

看到没有,2的6次方64,那我再换个3,3 吧,3的6次方729

大家可以去算一下,通过加一些打印信息呢就很容易就看清楚

这个函数一个复杂的计算,它到底是用来做什么的?

这也是我们在调试程序的时候一个技巧

就是说你看到一个复杂的函数,或者比较复杂的程序

然后呢,你运行,想不明白这个程序到底是用来做什么的

你可以加些打印信息,在每一个函数的开始和结尾的地方加些打印信息

那这个程序的结果,它用来做什么,你就会比较清楚了

这也是我们代码调试的一种技巧

那这是我们的第二次的课就上在这,谢谢大家

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

编程技巧笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。