草庐IT

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

coder 2023-05-27 原文

我在给数学专业的本科生教授蟒蛇。我对向学生介绍各种Python概念的最佳顺序感兴趣。在我看来,在每个阶段,学生都应该能够使用当时可用的工具来解决一个非常重要的编程问题。每种新工具都应该能够对熟悉的问题提供更简单的解决方案。为了保持学生的注意力集中,在python中可以选择许多概念。他们也应该有动机,应该欣赏每一个新掌握的工具,而不是太多的记忆。以下是一些具体问题:
例如,我的前任在字符串之前引入了列表。我认为相反的是一个更好的解决方案。
函数定义应该在开始时引入还是在掌握基本的结构化编程思想之后引入,例如决策(if)和循环(while)?
词典前应该引入集合吗?
在课程的早期引入读写文件是更好还是应该在大部分课程中使用输入和打印?
任何有解释的建议都是最受欢迎的。
编辑:在高中,学生们被介绍到计算机。他们中的一些人学会了编程。在此之前,他们有一门课程,涵盖了Word、Excel、PowerPoint、HTML、LaTex、Mathematica的味道,但没有编程。5年前,我在这门课中使用了Mathematica,后续课程使用C和后来的Java。现在我教你如何介绍Python,在接下来的课程中,我的同事教你如何使用Python进行面向对象的编程。之后,学生可以选修数据结构、算法、优化等专业课程,在一些选修课程中,他们可以自学mathematica、matlab和r。

最佳答案

经过一些尝试/除了作为一名教师之外,我选择了坚持如下:
(从无到有,调整到他们的水平)
很快,python是什么,您可以用它做什么。跳过关于技术方面的演讲,专注于他们想要做的事情:音乐、图形用户界面、网站、重命名文件等。
安装python,运行解释器。如果可以,请使用iPython
变量、基本字符串和print()
int和类型(包括类型错误和强制转换)。
基础微积分。显示它们,但不要用细节打扰它们。
把微积分变成变量。
在微积分中使用变量。
使用1 / 0格式化字符串。只显示“%s”,这就足够了,而且始终有效。始终使用一个元组(结尾为Coma),即使它只包含一个项。
列表、索引、切片和常见错误。然后将元组显示为冻结列表(和强制转换)。显示可以包含彼此。让他们在这方面工作,直到他们完全掌握它:这是非常,非常重要的。
字典,常见错误。用元组和列表嵌套。坚持最后一点。
10 / 3loop on strings,then lists,then tuples,then dictionaries.
嵌套类型上的循环。讨厌。慢慢来。知道那部分会改变一切。
字典%ForFor
使用items()读取文件,包括values()
正在写入文件。
使用方法。使用一个字符串作为示例,显示keys()forIOErrors等。不要解释oop,只说明如何使用方法。从现在开始,经常使用世界上的“方法”。
创建并使用模块文件。仅一个模块。里面的一切。
函数(仅与strip()一起使用,不与lower()一起使用)。在函数中禁止split())。
功能参数。
命名参数。
默认值参数。
return/print()和异常。
print()并创建自己的目录模块。展示所有的特殊情况(解释它比你想象的要花更多的时间)。
演示一些标准模块(但不要在上面花费太多时间,它只是为了展示):datetime、string、os和sys。避免像Itertools这样的抽象事物,它们是一个编码者的梦想,但却是一个学生的噩梦。
在那之后你可以把OOP带到桌子上,但这有点复杂。使用字符串、列表和文件引入对象的概念。他们拿到后,就从上课开始。愿原力与你同在。
在函数中使用Try来显示它的工作原理是很有诱惑力的,而使用Except则更具诱惑力。你应该不惜一切代价避免它。第一个让“返回值”的概念变得非常困难,第二个隐藏了程序的真实流程,学生很难理解你需要链接函数,而不是向用户询问你需要的每一个值。
一般来说,选择一种适用于某事物的方法并坚持下去。不要表现出其他的方式。例如:
仅使用Import显示字符串格式,忽略printraw_input。你总是可以在你的演讲材料中为那些想了解更多的人加上一点“进一步”的障碍。仅显示%而不显示+。几乎90%的python程序都可以在不使用,的情况下进行编码。避免for。不要显示可以将字符串/列表/dict与int相乘。这不是错误的,但会导致他们产生误解。你需要他们关注主要的概念。
不显示集合。集合非常有用,但很少使用。鼓励他们在家里编码,问你他们是否解决不了问题。在这种情况下,如果集合是解决方案,则显示它们。知识集需要时间和学生的大脑资源,这些资源可以用于更经常使用的事物。如果没有你,他们以后有足够的时间学习新的工具:集中精力学习那些单独学习很难或费时的东西。
同样适用于while。C或Java背景的学生将使用索引来循环而不是while如果你给他们+=。出于类似的原因,如果您有时间,请保留最后一门课程的“高级Python”。
甚至不要考虑生成器、元类和装饰器。即使经过几个月的练习,也很少有学生能理解这些。如果你觉得你的学生很聪明,那么可以在最后的一些课程中加入清单理解、enumerate和三元运算。
最后,任意地执行好的实践。pep8格式、良好的体系结构、名称约定、没有不变的默认参数等。他们现在还不知道。别费事,你是老师,你有权不时地说“这就是它的本来面目”。
哦,如果他们不从学习字节码、递归、汇编、复杂性、冒泡排序、堆栈、实现细节等开始,他们将是更好的程序员。如果你把时间浪费在教那些不能编写好的Python程序的人上,他就是看不到这是什么。实践是你带来理论的最好工具。同样,如果你能正确地准备,他们以后会自己学习其他的东西,所以优先考虑并且不要害怕跳过概念,即使是简单的/重要的概念。

关于python - Python概念应该以什么顺序向绝对的初学者解释? ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439638/

有关python - Python概念应该以什么顺序向绝对的初学者解释?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  6. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  7. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  8. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  9. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  10. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

随机推荐