Python概念应该以什么顺序向绝对的初学者解释?

Tom*_*ski 17 python

我正在向本科数学专业教授Python.我对学生应该介绍各种Python概念的最佳顺序感兴趣.在我看来,在每个阶段,学生应该只使用当时可用的工具来解决一个非平凡的编程问题.每个新工具都应该能够为熟悉的问题提供更简单的解决方案.为了让学生专注,必须选择Python中的众多概念.他们也应该激励并且应该欣赏每个新掌握的工具,而不需要太多的记忆.以下是一些具体问题:

  • 例如,我的前任在字符串之前引入了列表.我认为相反的是更好的解决方案.
  • 是应该在开始时还是在掌握了基本的结构化编程思想之后引入函数定义,例如决策(if)和循环(while)?
  • 应该在词典之前引入集合吗?
  • 在课程早期引入阅读和写作文件是否更好?或者在课程的大部分时间使用输入和打印?

任何有解释的建议都是最受欢迎的.

编辑:在高中时,学生们被介绍到计算机上.其中一些人学会了如何编程.在此之前,他们有一个课程,涵盖word,excel,powerpoint,html,latex,品味Mathematica,但没有编程.5年前我在本课程中使用了Mathematica,后续课程使用了C和后来的Java.现在我教Python的介绍,在后续课程中,我的同事在Python中教授面向对象的编程.之后,学生可以参加有关数据结构,算法,优化的特殊课程,以及他们在自己的Mathematica,Matlab和R上学习的一些选修课程.

e-s*_*tis 20

经过一些尝试/除了作为老师,我选择坚持:

(从无到有,调整到他们的水平)

  1. 简而言之,什么是Python以及你可以用它做什么.略过技术内容并专注于他们想做的事情:音乐,GUI,网站,重命名文件等.
  2. 安装Python,运行解释器.如果可以,请使用iPython.
  3. 变量,基本字符串和print().
  4. Int和类型(包括类型错误和转换).
  5. 基础微积分.展示它们1 / 0,10 / 3 但不要打扰它们的细节.
  6. 将微积分产生变量.
  7. 在微积分中使用变量.
  8. 字符串格式化%.只显示"%s",它足够并且始终有效.始终使用元组(具有结束昏迷),即使它只包含一个项目.
  9. 列表,索引,切片和常见错误.然后将元组显示为冻结列表(和转换).显示然后可以包含彼此.让他们继续努力,直到他们完美地掌握它:这非常非常重要.
  10. 字典,常见错误.嵌套元组和列表.坚持最后一点.
  11. For 循环字符串,然后列表,然后是元组,然后是字典.
  12. For循环嵌套类型.讨厌.慢慢来.知道这部分很好地改变了一切.
  13. 字典items(),values()keys().
  14. 使用for包括读取文件IOErrors.
  15. 写文件.
  16. 使用方法.使用一个字符串作为表示例如strip(),lower(),split()不解释OOP,只是如何使用的方法.从现在开始,使用世界"方法".
  17. 创建模块文件并使用它.仅限一个模块.其中的一切.
  18. 功能(仅适用于returnprint().禁止print()在功能).
  19. 功能参数.
  20. 命名参数.
  21. 默认值参数.
  22. Try/ Except和例外.
  23. Import并创建自己的目录模块.显示所有特殊情况(它需要比你想象的更多时间来解释它).
  24. 演示一些标准模块(但不要花太多时间在它上面,只是为了展示):datetime,string,os和sys.避免像itertools那样抽象的东西,它们是编码器的梦想,但却是学生的噩梦.

之后你可以把OOP放在桌子上,但它有点复杂.使用字符串,列表和文件来介绍对象的概念.当他们得到它时,从课程开始.那么力量可能与你同在:-)

print在函数中使用它来展示它的工作方式很诱人,而且使用起来更具吸引力raw_input.你应该不惜一切代价避免它.第一个使得很难带来"返回值"的概念,第二个隐藏了程序的真实流程,学生很难理解你需要链接功能,而不是要求用户提供每个值需要.

一般来说,选择一种适用于某些东西并坚持下去的方法.不要显示其他方式.例如:

仅显示字符串格式化%,并忽略+,.您可以随时在讲座材料中为想要了解更多内容的人添加一些"更进一步"的内容.仅显示for而不是while.你可以编写几乎90%的Python程序while.避免+=.不要表明你可以将字符串/列表/字典与整数相乘.这没有错,但会导致他们误解.你需要他们专注于主要概念.

不要显示集.集很有用但很少使用.鼓励他们在家里编码并询问他们是否无法解决问题.在那种情况下,show会设置它们是否是解决方案.知道集合花费时间和学生的大脑资源可用于更常用的东西.如果没有你,他们将有足够的时间学习新工具:专注于单独学习困难或耗时的工作.

同样如此enumerate.具有C或Java背景的学生将使用索引循环而不是for给予它们enumerate.出于类似的原因,保持len,fd.read,fd.realinesrange最后一门课程赋予"先进蟒蛇"如果您有任何时间上的方便.

甚至不要考虑发电机,元类和装饰器.即使经过数月的练习,这些也可以被极少数学生逮捕.with如果你觉得你的学生是聪明的驴,那么列表理解和三元操作可以带入一些最后的课程.

最终,任意执行良好做法.PEP8格式化,良好的体系结构,名称约定,没有不可变的默认参数等.他们现在无法了解它.不要打扰,你是老师,你有权不时地说"这就是它是怎样的".

哦,如果他们不是从字节码,递归,汇编,复杂性,冒泡排序,堆栈,实现细节等方面开始学习,那么他们将是更好的程序员.你浪费时间教给那些无法编码的人Python程序,他只是看不出这是什么.实践是你理论的最佳工具.如果你正确地准备它们,他们将在以后学习其他所有东西 - 所以优先考虑并且不要害怕跳过概念,甚至是简单/重要概念.