老师面对三个群里400多学生,每天看到的经常都是:“老师,有问题!”、“老师,哪里错啦?”、“老师,结果是对的,为什么没有分?”、“老师,为什么我只对三分之二?”……
    面对众多的无效提问,老师根本不知道如何回答问题,也没有每天28个小时可以在热情的聊天中回答问题。为了提高互动效率,应该先学习一下Python学习之提问的艺术。
    237658b99b2e9cb73d2a3efa9f9b239f.png

    1. 提问是一门艺术,需要不断的学习和修炼,提问要言简意赅、开门见山、直指问题核心,学生喜欢和老师一对一的交流,但老师屏幕后面可能是数百名同学,平均一个学生十分钟的提问,可能就要消耗老师十个小时的时间了。所以,一定要开门见山,直接抛出问题、解决问题的程序源代码和出错提示。<br />明确问题,老师才知道你的程序想干什么(面对a,b,c,d,e,f,g等变量,老师其实是很难有耐心读你的程序的)。例如问:“老师,求序列2/1, 3/2, 5/3, 8/5, 13/8, …前 n 项之和题目,我的程序可以运行,为什么结果不对呢?”
    1. s=int(input())
    2. a=2
    3. b=1
    4. c=0
    5. for i in range(s):
    6. z=a/b
    7. c=z+c
    8. a=a+b
    9. b=a-b
    10. print(c)

    粘出源代码(不要截图!不要截图!不要截图!重要的事情说三遍,看不清、也无法运行和修改)老师才方便帮你运行程序、发现问题和帮你修改程序。
    temp.png
    发出你运行时出错提示和你觉得程序存在的问题,可以让老师快速的发现、判定和定位程序的问题所在。例如:

    1. NameError: name 'id1' is not defined
    1. IndexError: string index out of range
    1. 这些出错提示可以极快的帮助老师发现你程序中的问题所在,至少是一个问题所在。排除一个问题后运行程序继续查看是否还有其他问题。<br /> 记住,除非没有电脑,请务必在本地写程序,不要直接到平台上写程序和提交。本地写好程序后,用题目中给的示例和公开的测试数据测试一下程序,如果题目里明确了一些边界条件,可以自己再构造一些测试数据对程序进行测试,查看输出是否与预期相符。如果输出与预期不符,再反推可能是哪里出了问题。也可以在你怀疑有问题的变量值改变之处加print()输出那个值,查看是否与预期的改变相符。<br />![rr.png](https://cdn.nlark.com/yuque/0/2020/png/1157448/1584751765079-d316332d-e1d1-44de-bfde-c86014ee61f0.png#crop=0&crop=0&crop=1&crop=1&height=142&id=crHxB&name=rr.png&originHeight=142&originWidth=974&originalType=binary&ratio=1&rotation=0&showTitle=false&size=33776&status=done&style=none&title=&width=974)<br /> 提问时,如果程序运行出错,查看出错提示,尤其是最后一段中的“****Error:*******”那一句,还有上面还会有一行,错误所在行,可以一起复制发给老师。例如上图中错误提示非常明确的指出是“字符串索引超出范围”,并给出可能出错的语句是第28行,这行中只用了一处索引id[16],那么问题可能就是字符串id的长度小于16,可以考虑先判断长度再进行处理,这样问题可以快速的解决。Python是解释型语言,解释器给的出错位置和出错提示是非常准确的,有了这两个信息,可以极大的减少老师判定问题所在所需的时间。时间就是生命,时间就是金钱,节约老师的生命,节约你们的金钱。<br /> 下面我们再谈一下Python课程的学习方法。Python程序设计的学习分理论和实验两门课程,本质上对应理论和实践两种学习方式。对于我们非计算机专业学生来说,程序设计主要是技术,需要大量的记忆--实践--思考的迭代,实践处于核心地位。记忆主要是阅读教材和听课,老师在课外会给出应用过程中可能会遇到的各种问题,尽可能记住,这些问题都是在应用中经常遇到的。<br /> 实践主要是大量的编程,只有大量的实践训练,才能让大家熟练的掌握相关知识、方法的灵活运用。在实践中会让你不断的遇到各种错误,排除错误的过程就是最好的思考和学习过程。我们在Python123.io平台上提供了大量的训练题目,平台具有自动评测的功能,可以即时对你的程序进行评测和反馈。<br />![QQ20200319-0.png](https://cdn.nlark.com/yuque/0/2020/png/1157448/1584751780268-92ff0ddd-dd11-461a-9dfd-b9a7021ca879.png#crop=0&crop=0&crop=1&crop=1&height=356&id=iQgkR&name=QQ20200319-0.png&originHeight=639&originWidth=911&originalType=binary&ratio=1&rotation=0&showTitle=false&size=45172&status=done&style=none&title=&width=507)<br /> 思考很重要,程序设计是聪明人的游戏,不思考、死记硬背是万万行不通的。面对一个实际问题,要先思考如何将其中要解决的问题变成一个数学问题,继而再转为一个计算机可求解的问题,用自己了解的知识和方法对其进行编程求解。<br />Python123.io是一个非常好的训练平台,上面有我们精心设计的数百道 题目,按授课进度提供给同学们进行训练和学习。每个题目覆盖的知识点基本上与授课进度保持一致,可以让同学们在课后及时强化记忆和灵活应用。在平台上完成训练的时候有以下注意事项:<br />1. 尽可能优先用刚学过的方法<br />作业的题目都是我们老师设计的,挑选时候也考虑到让你们强化哪些知识点的应用。所以看到题目首先想一下能不能用刚讲完的知识完成,用哪些知识点?然后翻PPT查找对应的方法和函数 ,查看每个方法或函数接受什么样的参数,返回值是什么,再想怎么用于解决作业中的问题。现在不需要你们背下来,每次作业可以查,用过几次后一般都可以记住了。<br />2.认真读题<br /> 在几年的教学中发现,很多时候并不是不会写程序,而是没的读题或是没有仔细读题,忽略了题目中的一些要求导致处理方法不对或结果不对等问题。题目中的描述基本上会覆盖测试数据的测试点。有电脑的同学请务必在本地编程和运行程序,可以正确运行后,用题目中给的测试数据测试看是否可以得到正确答案,并检查格式是否正确,再提交系统看是否可以通过所有测试数据的测试。如果提交后所有测试点都没过,可以程序有语法问题无法正确执行或是格式错误。本地运行看是否有语法问题,是否可以正确执行。用题目给的测试数据测试一下看输出是否与题目要求相符。如果看起来答案相同,可能是格式错误,检查空格、大小写、符号是全角还是半角。如果多数测试点可以过,那么可能是异常数据或边界数据没过,回看题目描述可能会有什么样的异常数据或边界数据。<br /> 3. 本地测试<br /> 多用print()输出各变量的值代码较多时,可以在多处加 print(),在每次处理和运算后把程序里的变量值输出一下,检查数值和格式是否与预期一致,从前到后依次修正。根据题目的要求,自行构造正常数据、异常数据、边界数据,用于测试代码,根据输出反推代码是否完全正确。我们的代码都很简单,基本上用这个方法就可以检测出所有问题。