应该以什么顺序向绝对初学者解释 Python 概念? [关闭]

2024-03-26

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

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

任何带有解释的建议都是非常受欢迎的。

Edit:在高中时,学生们接触了计算机。他们中的一些人学会了如何编程。在此之前,他们有一门课程,涵盖了 word、excel、powerpoint、html、latex、Mathematica,但没有编程。 5 年前,我在这门课程中使用了 Mathematica,后续课程使用了 C,后来又使用了 Java。现在我教授 Python 简介,在后续课程中我的同事教授 Python 中的面向对象编程。随后,学生可能会学习数据结构、算法、优化方面的特殊课程,并在一些选修课中他们自己学习 Mathematica、Matlab 和 R。


经过一番尝试/除了作为老师之外,我选择坚持类似的事情:

(从无到有,调整到自己的水平)

  1. 简而言之,什么是 Python 以及你可以用它做什么。跳过技术内容的演讲,专注于他们想做的事情:音乐、GUI、网站、重命名文件等。
  2. 安装Python,运行解释器。如果可以的话,使用iPython http://ipython.scipy.org/.
  3. 变量、基本字符串和print().
  4. Int 和类型(包括类型错误和转换)。
  5. 基本微积分。给他们看1 / 0, 10 / 3 但不要用细节来打扰他们.
  6. 将微积分结果放入变量中。
  7. 在微积分中使用变量。
  8. 字符串格式设置为%。仅显示“%s”,就足够了并且始终有效。始终使用元组(以逗号结尾),即使它只包含一项。
  9. 列表、索引、切片和常见错误。然后将元组显示为冻结列表(和转换)。表明则可以相互包含。让他们继续努力,直到他们完美掌握为止: 这个非常非常重要。
  10. 字典,有常见错误。与元组和列表嵌套。坚持最后一点。
  11. For循环字符串,然后列表,然后元组,然后字典。
  12. For嵌套类型上的循环。变得令人讨厌。慢慢来。充分了解这一部分会改变一切。
  13. 字典items(), values() and keys().
  14. 使用读取文件for, 包括IOErrors.
  15. 写入文件。
  16. 使用方法。使用字符串作为示例显示strip(), lower(), split(), etc. 不要解释 OOP,只是如何使用方法。从现在开始多使用世界“方法”。
  17. 创建模块文件并使用它。仅一个模块。一切尽在其中。
  18. 功能(仅适用于return, no print(). Forbid print()在函数中).
  19. 函数参数。
  20. 命名参数。
  21. 默认值参数。
  22. Try / Except和例外情况。
  23. Import并创建您自己的目录模块。显示所有特殊情况(解释它需要比您想象的更多的时间)。
  24. 演示一些标准模块(但是不要花太多时间,只是为了展示):日期时间、字符串、操作系统和系统。避免像 itertools 这样抽象的东西,它们是程序员的梦想,但却是学生的噩梦。

之后你就可以将 OOP 带到桌面上,但它有点复杂。使用字符串、列表和文件来引入对象的概念。当他们得到它时,就开始上课。那么愿力量与你同在:-)

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

一般来说,选择一种对某件事有效的方法并坚持下去。不要展示替代方法。例如:

仅显示字符串格式%,并忽略+ and ,。对于那些想了解更多的人,您可以随时在讲座材料中添加一些“进一步”块。只显示for并不是while。您可以编写几乎 90% 的 Python 程序,无需while. Avoid +=。不要表明您可以将字符串/列表/字典与整数相乘。这并没有错,但会导致他们产生误解。您需要他们专注于主要概念。

不显示集合。集合非常有用,但很少使用。鼓励他们在家编码,并在他们无法解决问题时询问您。在这种情况下,显示集合是否是解决方案。认识集合需要时间和学生的大脑资源,而这些资源可以用于更常用的事情。稍后,如果没有您,他们将有充足的时间学习新工具:专注于独自学习困难或耗时的事情。

同样适用于enumerate。有C或Java背景的同学会使用索引来循环而不是for如果你给他们enumerate。出于类似的原因,请保留len, fd.read, fd.realines and range如果你有时间的话,最后一门课程的标题是“高级Python”。

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

最终,任意执行良好做法。 PEP8 格式、良好的架构、命名约定、没有不可变的默认参数等等。他们只是现在不知道。不用担心,你是老师,你有权时不时地说“就是这样”。

哦,如果他们不从学习字节码、递归、汇编、复杂性、冒泡排序、堆栈、实现细节等开始,他们就会成为更好的程序员。你浪费时间把这些教给那些不能写出像样代码的人Python程序,他就是看不出来这到底是怎么回事。实践是运用理论的最佳工具。再说一遍,如果你准备得正确,他们稍后会自己学习其他所有内容,所以优先考虑并且不要害怕跳过概念,即使是简单/重要的概念.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应该以什么顺序向绝对初学者解释 Python 概念? [关闭] 的相关文章

随机推荐

  • 捕获父容器上的单击事件,但不捕获子容器上的单击事件

    用下面的例子 HTML div class parent div class child div div CSS parent align items center background blue display flex justify
  • 如何在 Flutter 中使用另一个提供程序内部的提供程序

    我想创建一个具有以下功能的应用程序authentication service根据用户角色具有不同的权限和功能 例如消息 所以我创建了一个Provider用于用户和登录管理 另一个用于用户可以看到的消息 现在 我想在用户登录时获取消息 一次
  • 实体框架 - 对唯一索引进行 UPSERT

    我对我的问题进行了一些搜索 但找不到任何真正有帮助的东西 所以我的问题 困境仍然是这样的 我知道 mysql 数据库有一个独特的索引系统 可用于使用以下格式在同一查询中插入 更新 insert into t a b c values 1 1
  • 在 AWS Cognito Oauth2 令牌中包含用户详细信息

    我正在将 AWS cognito 与 NodeJS 后端 API 结合使用 并希望在访问令牌返回中包含用户详细信息 oauth2 令牌用户池客户端应用程序中定义范围的端点 另外如果我使用管理员启动验证API 无法将范围包含在返回访问令牌中
  • Pandas date_range - 减去 numpy timedelta 给出奇怪的结果,时间变得不是 0:00:00

    我正在尝试使用 pandas date range 功能生成一组日期 然后我想迭代这个范围并从每个日期中减去几个月 确切的月份数在循环中确定 以获得新的日期 当我这样做时 我得到了一些非常奇怪的结果 MVP get date range d
  • 如何从 int 转换为泛型 Integer?

    我对 Java 比较陌生 并且习惯了 C 中的泛型 因此在处理这段代码时遇到了一些困难 基本上 我想要一个通用方法来通过按键获取存储的 Android 首选项 并且此代码虽然丑陋 但适用于布尔值 但不适用于整数 当它因 ClassCastE
  • 如何使用 Postman 查询 Exchange EWS?

    使用Postman 如何查询本地 Exchange 2016 EWS 我有 EWS 的组织 URLhttps my organization net EWS Exchange asmx 我们使用的是 Exchange 2016 没有 Off
  • 在项目之间共享自定义 PHP 代码的最佳方式

    我正在开发一个分布式环境 主要是使用 PHP 我的很多项目共享一些相同的代码 例如我的日志代码 基于 log4php 但添加了一些自定义内容 我可以在每个项目中复制粘贴此代码 但自然地 如果我更改其中的任何内容 我需要将其重新粘贴到各处并
  • 尝试创造。初始化并格式化VHD磁盘

    一些背景 我在实验室环境中工作 遇到了许多问题 需要创建 VHD 并将其附加到虚拟机以进行压力测试 我想出了一个脚本 允许用户使过程尽可能简单 如下 vms Get VM val 0 Write Host This script is se
  • 计算月份统计数据

    我有一个捐款表 我试图计算每个月的总金额 几个月没有任何捐款 我希望结果返回 0 这是我当前的查询 Donation calculate sum amount conditions gt created at gt Time now pre
  • 从服务器端应用程序向客户端推送消息?

    我有一个基于 javascript 的客户端 当前正在轮询 NET Web 服务以获取新内容 虽然轮询有效 我对这种方法不满意 因为我正在使用系统资源并在没有接收任何更改时产生开销 我的问题是如何通知我的客户有新内容可供显示 我对实施此解决
  • 使用处理的二次曲线上的点 (p5.js)

    我使用这个公式来计算二次曲线上的点 cPx2 1 t 1 t x1 2 1 t t qcX t t x2 cPy2 1 t 1 t y1 2 1 t t qcY t t y2 当我设置 t 10 并迭代曲线时 我得到 看起来它不仅获得了曲线
  • Windows 上尝试 python 多处理时出现运行时错误

    我正在 Windows 机器上使用线程和多处理来尝试我的第一个正式的 python 程序 但我无法启动进程 Python 给出以下消息 问题是 我没有在main模块 线程在类内的单独模块中处理 EDIT 顺便说一句 这段代码在 ubuntu
  • 无法使用 jQuery 委托滚动事件

    我正在尝试使用 jQuery 在特定类别的元素上触发滚动事件 如下所示 body on scroll overflow function do stuff 然而 do stuff永远不会发生 我做了一些实验 看起来好像滚动事件不能使用 on
  • 禁用 select2 清除时打开下拉菜单

    似乎 select2 4 在清除当前所选项目时默认打开下拉列表 select2 的早期版本似乎没有这种行为 我正在尝试实现它 但目前还没有运气 有谁知道如何挂钩清除事件 以便我们可以禁用它的默认行为并清除所选选项而不打开下拉列表 干杯 铝
  • 了解 Objdump 中反汇编的二进制文件 - 输出中的字段是什么

    当我使用命令 arm linux gnueabihf objdump d a out 反汇编一个简单的 ARM 二进制文件时 得到以下输出 00008480 lt start gt 8480 f04f 0b00 mov w fp 0 848
  • 返回具有 ModelState 错误的键列表

    如何返回所有有错误的键的列表 数组 我尝试执行以下操作 但它说由于某种原因我无法进行这种表达 ModelState ToList item gt item Value Errors Count gt 0 var errors from mo
  • 小书签中的 XmlHttpRequest 在 GET 上返回空响应文本?

    我正在尝试为我们构建的特殊 URL 缩短服务构建一个 javascript 书签http esv to http esv to用于缩短经文参考文献 即 马太福音 5 章 变为 http esv to Mt5 http esv to Mt5
  • Django 多列唯一约束批量插入

    假设我们有一个模型 from django db import models class Concept models Model a models CharField max length 255 b models CharField m
  • 应该以什么顺序向绝对初学者解释 Python 概念? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi