Py学习  »  Python

对于绝对初学者来说,应该按照什么顺序解释Python概念?[关闭]

Tomaž Pisanski • 5 年前 • 822 次点击  

我在给数学专业的本科生教授蟒蛇。我对向学生介绍各种Python概念的最佳顺序感兴趣。在我看来,在每个阶段,学生都应该能够使用当时可用的工具来解决一个非常重要的编程问题。每种新工具都应该能够对熟悉的问题提供更简单的解决方案。为了保持学生的注意力集中,在python中选择许多可用的概念是必不可少的。他们也应该有动机,应该欣赏每一个新掌握的工具,而不是太多的记忆。以下是一些具体问题:

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

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

编辑: 在高中,学生们被介绍到计算机。他们中的一些人学会了编程。在此之前,他们有一个课程,包括Word,Excel,PowerPoint,HTML,LaTex,一个数学的味道,但没有编程。5年前,我在这门课中使用了Mathematica,后续课程使用C和后来的Java。现在我教你如何介绍Python,在接下来的课程中,我的同事教你如何使用Python进行面向对象的编程。之后,学生可以选修数据结构、算法、优化等专业课程,在一些选修课程中,他们可以自学mathematica、matlab和r。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30334
 
822 次点击  
文章 [ 5 ]  |  最新文章 5 年前
Max Shawabkeh
Reply   •   1 楼
Max Shawabkeh    14 年前

我最近教了一个短Python速成课程给1~3年的计算机科学学生,他们中的大多数只知道C和C++,甚至还不太好。我的方法和你的建议大不相同。

免责声明: 我的课程的目的是向已经熟悉编程基本思想的人介绍该语言,因此,如果你在教那些根本没有接触过编程的人,这可能不合适。

  • 首先,我简要介绍了该语言的优点和缺点,并展示了一些简单的python程序,即使是不了解python的人也可以轻松获得这些程序。
  • 然后,我对数据结构进行了彻底的运行,并广泛地使用repl提示符作为示例。当然,在这一点上,他们不能写一个程序,但是在没有使用数据结构的情况下写任何程序(即使只是一个玩具例子)并不是关于python的;我甚至会说,这种尝试给学生们带来了不健康的习惯。我按这个顺序去:
    • 数字( int -> float )
    • 序列(序列) list & tuple -> string -> bytearray )
    • 辞典
    • 喷杆,包括自动铸造喷杆。
  • 接下来是基本语法,顺序如下:
    • 语句(换行符等)
    • 印刷
    • 变量,重点介绍动态绑定的特点以及变量C概念与其对应的python概念之间的主要区别。
    • 条件句
    • 循环
    • 列表理解
    • 函数/方法调用,包括函数链接、关键字参数和参数列表。
    • 模块,包括导入和处理命名空间。
  • 福思对功能进行了深入研究。关于python函数有很多令人惊讶的内容,包括定义参数的各种方法(关键字、列表)、多次返回、docstring、作用域(本身就是一个很大的主题区域)以及使用函数作为对象、传递函数、使用lambda等一个重要但经常遗漏的部分。
  • 第五个是对文件的更实际的概述,包括I/O和编码问题以及异常(概念->捕获->引发)。
  • 最后概述了Python中的OO特性,包括实例变量、方法类型(实例/类/静态)、继承、方法命名(private、mangled、special)等。

对于您的特定问题:

例如,我的前任在字符串之前引入了列表。我认为相反的是一个更好的解决方案。

我不同意。从概念上讲,字符串只是一个得到很多特殊处理的列表,因此建立在更简单的列表概念上是有意义的。如果像我一样从数据结构开始,您也不必处理不能在I/O示例中使用字符串的问题。

函数定义应该在开始时引入还是在掌握基本的结构化编程思想之后引入,例如决策(if)和循环(while)?

当然是在之后。调用函数应该和基本的结构化编程思想同时教授,但是定义自己的函数应该推迟。

词典前应该引入集合吗?

当然,字典在实践中使用得更多,但是如果你已经介绍了序列,解释集合(尤其是数学学生)不需要太长时间,从简单到复杂的结构是有意义的。

在课程的早期引入读写文件更好还是应该在大部分课程中使用输入和打印?

python的IO功能真的很简单,所以没什么关系,但是我想说这些对于基本的练习来说是不必要的,所以你最好把它们留到课程的后半部分。

在我看来,在每个阶段,学生都应该能够使用当时可用的工具来解决一个非常重要的编程问题。每种新工具都应该能够对熟悉的问题提供更简单的解决方案。

增量方法明显不同于我的更学术的方法,但它确实有它的优点,尤其是它使人们更感兴趣。然而,我一直不喜欢这样一个事实,即当你用这种方式学习完一门学科后,你会感到,即使是最简单的问题,也可能会比你迄今为止所学的更容易找到解决办法,因为在课程的整个过程中总是有这样的问题。

Aea
Reply   •   2 楼
Aea    14 年前

这真的取决于他们知道多少编程,但是我已经看到R成功地介绍给那些完全不了解编程的人。我想他们对编程没有太多的了解。

这听起来可能很明显,但只教他们解决问题所需的语言,不要太深入地使用“合适的”和高效的编码风格,一旦你的学生有了一些理解,例如对风格的评论,但不要太严格,你就可以慢慢地开始这项工作。

要解决一个问题,你必须至少理解语言的一些基本部分。我假设您所做的一切都可能包含在一行中,而名称间距、模块、性能等并不是首要任务。

首先让他们在开发环境中进行设置,然后创建一个简单的程序让他们运行。确保他们有一个拥有他们所需要的一切的环境(如果他们需要numpy,引导他们完成安装),引导他们从命令行启动程序,当然还有一个易于使用的编辑器(例如eclipse+pydev,可能太复杂)。最让人沮丧的是当你找不到工作环境的时候。祈祷你不需要支持Windows或者没有很多库来应对。

一旦你掌握了这些,就把他们介绍给通用语言。封面类型和可能遇到的微妙问题,例如:

>>> 1/2
0
>>> 1./2
0.5

我甚至会养成让一切漂浮的习惯。引入输出字符串,以及如果希望输出在同一行上,如何转换该输出。包括运算和逻辑,然后介绍“函数”,确保在数学等价物之间建立区别。我认为命令流结构应该相当简单,包括简单的结构(if,else,elif,可能while)。

此时,他们应该能够创建一个简单的程序来解决一个简单的问题。在此基础上开始构建,引入更复杂的命令流、更复杂的数据类型(列表、集合、dict)、可能的迭代器和生成器(注意这些,它们可能很麻烦,您可能不需要它们)。

编辑:

我忘了触摸输入和输出。我将提供一个简单的框架,如果你愿意的话,你的学生可以使用它。命令行应该足够了,除非您想跟踪正在发生的事情,在这种情况下,文件输出更加合理。或者,管道输出到文件也可以。

我认为集合在数学上更相关(也更有用!)然后是听写,并将首先介绍它们。

dan04
Reply   •   3 楼
dan04    14 年前

e-satis的列表很好,但由于这是一个数学课,我将添加以下建议:

首先,要么使用python 3.x,要么告诉他们总是使用

from __future__ import division

否则,他们 用整数除法求位。在交互提示下输入1/2很容易记住,但在一些细微的地方会出现错误,如:

def mean(seq):
    """Return the arithmetic mean of a list."""
    return sum(seq) / len(seq)

当你教授函数时,向他们展示数学模块和内置的和函数。还显示了将函数传递给另一个函数的能力,这对于编写一般导数/积分近似值很有用:

def derivative(f, x, delta_x=1e-8):
    """Approximate f'(x)."""
    return (f(x + delta_x) - f(x - delta_x)) / (2 * delta_x)

print(derivative(math.sin, 0))
S.Lott
Reply   •   4 楼
S.Lott    14 年前

你可以在这里看到我的大纲: http://homepage.mac.com/s_lott/books/nonprog/html/index.html

这个演示文稿是基于经验教学C,艾达,C++,PL/SQL(甚至一个COBOL课程一次)。

有一本伟大的书,它有一个合理的教育学的概念排序。

R.C.Holt,G.S.Graham,E.D.Lazowska,M.A.Scott。操作系统应用程序的结构化并行编程。1978。艾迪生·韦斯利。0201029375

http://openlibrary.org/b/OL4570626M/Structured_concurrent_programming_with_operating_systems_applications

e-satis
Reply   •   5 楼
e-satis    14 年前

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

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

  1. 很快,python是什么,您可以用它做什么。跳过关于技术方面的演讲,专注于他们想要做的事情:音乐、图形用户界面、网站、重命名文件等。
  2. 安装python,运行解释器。如果可以,请使用 iPython .
  3. 变量、基本字符串和 print() .
  4. int和类型(包括类型错误和强制转换)。
  5. 基础微积分。展示他们 1 / 0 , 10 / 3 但不要用细节来打扰他们 .
  6. 把微积分变成变量。
  7. 在微积分中使用变量。
  8. 字符串格式化方式 % . 仅显示“%s”,这就足够了,而且始终有效。始终使用一个元组(结尾为Coma),即使它只包含一个项。
  9. 列表、索引、切片和常见错误。然后将元组显示为冻结列表(和强制转换)。显示可以包含彼此。 让他们继续努力直到他们完全掌握了它 :这非常非常重要。
  10. 字典,常见错误。用元组和列表嵌套。坚持最后一点。
  11. For 循环字符串、列表、元组、字典。
  12. 为了 循环嵌套类型。讨厌。慢慢来。知道那部分会改变一切。
  13. 词典 items() , values() keys() .
  14. 使用读取文件 for 包括 IOErrors .
  15. 编写文件。
  16. 使用方法。使用字符串作为示例 strip() , lower() , split() 等。 不要解释OOP 如何使用方法。以后经常使用世界上的“方法”。
  17. 创建并使用模块文件。 只有一个模块 .里面的一切。
  18. 功能(仅与 return 没有 打印() . 禁止 打印() 在函数中 )。
  19. 功能参数。
  20. 命名参数。
  21. 默认值参数。
  22. Try / Except 以及例外情况。
  23. Import 以及创建自己的目录模块。展示所有的特殊情况(解释它比你想象的要花更多的时间)。
  24. 演示一些标准模块(但是 别在上面花太多时间,这只是为了展示 ):datetime、string、os和sys。避免像Itertools这样的抽象事物,它们是一个编码者的梦想,但却是学生的噩梦。

在那之后你可以把OOP带到桌子上,但这有点复杂。使用字符串、列表和文件引入对象的概念。他们拿到后,就从上课开始。那么愿原力与你同在:—)

它很吸引人 print 在函数中显示它是如何工作的,甚至更容易使用 raw_input . 你应该不惜一切代价避免它 . 第一个让“返回值”的概念变得非常困难,第二个隐藏了程序的真实流程,学生很难理解你需要链接函数,而不是向用户询问你需要的每一个值。

一般来说,选择一种适用于某事物的方法并坚持下去。不要表现出其他的方式。例如:

仅显示字符串格式,使用 % 忽略 + , . 你总是可以在你的演讲材料中为那些想了解更多的人加上一点“进一步”的障碍。仅显示 对于 而不是 while . 几乎90%的python程序都可以在没有 虽然 . 避免 += . 不要显示可以将字符串/列表/dict与int相乘。这不是错误的,但会导致他们产生误解。你需要他们关注主要的概念。

不显示集合。集合非常有用,但很少使用。鼓励他们在家里编码,问你他们是否解决不了问题。在这种情况下,如果集合是解决方案,则显示它们。知识集需要时间和学生的大脑资源,这些资源可以用于更经常使用的事物。如果没有你,他们以后有足够的时间学习新工具: 专注于独自学习困难或耗时的事情。

同样的道理 enumerate . C或Java背景的学生将使用索引来循环,而不是使用 对于 如果你给他们 枚举 . 出于类似的原因,保持 len , fd.read , fd.realines range 对于最后一门课程,如果您有时间学习“高级python”,它将被授予“高级python”的称号。

甚至不要考虑生成器、元类和装饰器。很少有学生能抓住这些东西, 即使经过几个月的练习 . 列出理解, with 如果你觉得你的学生很聪明,可以在最后的一些课程中加入三元运算。

最终, 任意实施良好做法 . pep8格式、良好的体系结构、名称约定、没有不变的默认参数等。他们现在还不知道。别费事,你是老师,你有权不时地说“这就是它的本来面目”。

哦,如果他们不从学习字节码、递归、汇编、复杂性、冒泡排序、堆栈、实现细节等开始,他们会是更好的程序员。如果你把时间浪费在教一个不会编写好的Python程序的人上,他就是看不到这是怎么回事。实践是带来理论的最好工具。再说一遍,如果你准备的正确,他们以后会自己学习其他的东西,所以 优先考虑和,不要害怕跳过概念,即使是简单/重要的概念。 .