ROSS RHEINGANS-YOO:你好,我是罗斯。 这是一个CS50研讨会。 它会带你从编程 在C在Python编程。 Python是一种脚本语言。 这在很大程度上是像C 在语法,虽然有些 的技术细节 怎么说的语法被执行 略有不同。 这是比C在某些方面不那么强大。 这是不太表现为 哪儿于您的电脑 内存被摆出来, 它如何摆出来, 当它变得自由, 这些各种各样的事情。 它在某些方面比C更实用, 因为它更容易的编程。 语言是,一些 人,更直观。 真的,我们的目标是为 它是更快方案 ,并能降低执行。 现在,如果你仔细想想 的时间量 你花你的最后 问题集写作 对你的代码 你的时间花量 在你的最后一个问题 设置执行你的代码, 你想象的语言 这是快一倍写, 和慢一倍来执行,可能会 在某些方面的改进℃。 当然,当你试图写 小程序从身边小事做起, Python是选择的有用的语言。 并在此结束 研讨会上,我希望你能 能够使 选择在今后的项目 关于哪种语言是 正确的使用,而不是想法 一个语言更 纠正所有的时间。 有关本次研讨会是有几件事情。 本次研讨会是不打算 从头开始教你的Python。 Python是非常相似 到C,和我假设 你是一个CS50的学生,或者是有人 具有类似熟悉C. 如果你CS50学生 围绕问题设置6, 所以,你已经看到了很多 事情在C,我给你 的主要差别, 和一些事 这使Python不同 并特别有用的, 但我不打算去 什么是编程语言 以及如何编写程序。 但是,本次研讨会将教 你写的Python程序 如果你是那几个群体之一。 同样,我们将看看如何 你会实现psets-- 这应该是1-6 Python--并提供指针 官方文件 备查。 另一件事是重要的 关于这次谈话是如何分配的, 这部影片将是 在网上,礼貌CS50的, 所以你不应该觉得像 你需要做笔记。 您可以随时回去看看 它后来作为参考。 此外,该幻灯片 可现在 在这个网站,应该 带你做一个谷歌文档。 这是一个略有删节的版本 什么我显示在屏幕上。 一位细心的警告之前, 我们跳,Python 3中 从Python 2中不同的语言。 他们看起来很多相同的;有 非常轻微的技术差异 这将导致程序 用Python编写的2 不能够被执行 在Python 3的环境。 该CS50设备附带 Python中,默认情况下它使用Python 2。 您可以通过检查这 输入你的命令行 蟒蛇 - 版本,这应该输出 2.7.6对当前器具。 试试Python 3中,这不 在家电正常工作, 如果Python默认会2.X.Y,无论是在 该设备或您自己的机器。 此时应更换的Python 3随时随地 在这次演讲中,我编写Python。 如果你的机器 2运行在默认情况下,类型 蟒3以便能够实际上 跟随并执行这些事。 此外,我会点你 在官方资源了。 docs.python.org/3--~~V小心 那这是一个3,而不是一个2-- 有一些有用的参考。 教程将带你穿越 很多相同的东西 我现在做的,除了文字形式。 参考是作为一个有用的 引用的语言, 和标准库提供 你的一些扩展 具有附加功能。 所以第一个Python程序。 在左边,我们有标准的C, 在右边,我们有Python的。 你可能已经认识到 这个问题,它的 第一个问题中的一个 套在CS50,和这些 使用相同的解决方案,解决它。 现在,之所以说我们是 看着这些并排 如此,我们可以看看 语法上的不同。 其中一个房间里的大象 你可能已经注意到权 蝙蝠,Python有没有 周围的代码主要功能包装。 因此,在C,你写了一堆 文件,将它们链接在一起, 和程序开始执行 在这个东西叫做INT为主。 在Python,你写一个 你的文件,执行该文件, 该计划开始执行 在该文件的顶部。 因此,这将启动 在文件的顶部 往下走,直到它找到别的东西。 如果找到一个函数的定义, 它实际上并不会执行该代码, 它会简单地定义函数。 但在这里,当第一 计划是n等于10, 的第一件事,这个方案 需要做的是利用10这个值 并设置成一个叫做变量n。 说起这一行的,一 其他things-- sorry--这 意味着C程序, 你会写他们, 会让对方,这将 援引一些铛命令, 然后你就会运行 生成的可执行文件。 Python程序,运行 文字file--这mario.py可能 是这个文件,我只是表现 你 - 你会运行该文件 你会执行, 它和内容 将通过执行 Python解释器。 你可以在你的IDE做到这一点。 所以,如果我有一个Hello文件, 它只是有这个内容。 这实际上是Python的 2,而不是Python 3,所以不要 担心语法了。 但我会运行Python,上 hello.py,和它运行。 另一种方式,我可以使用Python的 我不会有这么多的处理在这次谈话, 是,如果我只需键入的Python,它 滴我到一个环境中, 我可以换行是Python的线。 所以在这里,如果我输入 打印空间“你好,世界”。 类型输入。 它会吐我回结果 个别立即行。 这是可能是有用的。 在这次演讲中,我会做幻灯片的事情。 所以,你就可以按照 沿任一在这里,也可以通过写 实际的文件,然后执行它们。 但是,要回本 代码,另一件事 你可能有 noticed--好,有 两件事情,你可能 注意这些块。 第一,而更现实的是, 在Python有没有尾随分号。 分号是可选的随处可见 和无害化无处不在。 您可以添加他们。 它可能使人们谁写的 蟒蛇在你生活窃笑 在你的背后,是因为 他们是没有必要的。 他们往往是被关押在一个标志 语言从C的设计师 觉得它更清楚这样 而且它没有必要申报 每次结束一行。 另一个奇怪的事情有关这款N 是它不具有连接一个类型。 一个神奇的作品Python--的 我要去把它称为魔术, 但也有极 技术原因为何 works--的所述一个 魔术件的Python 是的变量可以展开或 收缩到包含任何数据 类型,你会希望他们。 所以这是一个10。 如果以后下来我分配给该 ñ0.5,则需0.5。 不管它是在这里为int, 漂浮在那里,使用该n什么 会,或多或少,能够突突 同时,如果它得到任何的那些。 除非有一些非常现实的 它之所以不能使用数据 键入使得n目前, 在这一点上,它会得到 楔形,并抛出一个错误, 而那些各种各样的事情。 但在这里,巨蟒 并不真正关心什么 这就是我要在这个贴 一句话一样,你想这件事情? 这东西是什么? 是的,它是一种事情。 我会坚持到底。 这将是一个问题以后,如果 有人谁愿意使用该结束 不能处理它。 这是一个主要的 Python和C之间的差异 这使得它容易 写的非常大的C程序 并且可以更容易地写 非常小的Python程序。 该语法不是很 不同之处是什么呢。 这是稍有不同 它是如何表达的。 所以这是一个非常,所谓 Python化,写它的方式。 对于行中的范围(n)的,这是 从0到n范围内的数字, 包容在底 和独特的顶部。 因此,它是从0到n-1,这是 正是C代码是干什么的, 除了它是一个更容易 看也许。 有关块 没有掀起大括号, 而不是它的衬托 这个缺口。 因此,所有这些线都 四个空格转移到右侧, 或类似有关大象的宽度。 而这些都是那些具 将要在此为执行。 如果我搞砸了 压痕就这个问题和我 该打印推回 原来的压痕, 该打印将离开for循环。 相反,C,其中在这里我居然 需要移动的封闭梅开二度。 这意味着你没有得到错误 即跳出你,因为你 放支架在错误的地方。 它意味着你得到错误 即跳出你,因为你 缩进行错了。 因此,它使压痕超级小心。 希望你被超 小心你的压痕,无论如何, 因此这不是 更多的负担。 但对于Python中的基本规则, 我们将有一对夫妇的这些 我们将经历通过 在谈话的过程中, 就是尽量自然的语法 之前看任何东西。 所以这个语法,对于 这个数目在范围内, 非常鲜明的风格上。 很多东西在Python 我们将看到以这种形式。 所以,如果你来了 用一个新的对象,你 想你应该可以 迭代此,在这种格式中, 原来它可能 支持该格式。 我们不打算在超深 技术原因,这是事实。 但它是一个非常有用的直觉有 当你接近Python程序, 这个东西只是去上班。 尝试一下。 启动命令行 解释器,看看它是否工作, 事情继续前进,然后再 甚至需要打开谷歌说, 有什么语法 这个特别的事情? 大量的Python,你也可以 只是尝试探索。 这如果是更相似 到C那么维权的。 请注意,没有括号。 括号是,再次, 无害的,但不必要的。 有一个冒号在端 就像for循环, 并再次,相对块是 缩进,而不是衬着括号。 这东西是原 缩进的水平, 其相关的功能块再次缩进。 这些工作,正是因为他们做的C. 这实际上是大同小异。 此外,打印失去一个字符 关闭printf函数您传递一些字符串。 原来字符串 既可以划分出 用单引号或双引号。 有没有区别, 除了内部 单引号,你可以使用 双引号与放弃, 而不必 逃避所有的人。 而双引号里面,你 可以使用单引号与放弃 而不必逃避它们。 如果你想混 他们,你当然可以 看看网上如何做到这一点。 你会发现,在这里, 我在年底通过=这个事情。 这是一个可选的示例 的说法,这是其中的一件事情 Python支持的 使得它非常有用。 所以打印其实有很多 参数,这通常是 设置为默认 价值,但在这里,我 决定重写一个叫做结束。 我要的原因 用一个空字符串覆盖它 在Python中的打印,由 默认情况下,打印出一个新行 你告诉它太后的事情。 所以这个散列实际上是要 在新的一行打印出一个哈希值。 如果我不想哈希打印出来 之后,一个新的生产线,那么我不得不说 不打印之一。 但是,却又如此的最后一件事, 这个程序是缺少一个人是 一个包括在顶部。 打印被烤成Python所以基本上 ,有没有头部或模块 你需要 包括,但如果想 以包括其它的东西 在Python脚本, 我会做一个非常类似的format-- 话都只是略有不同。 我提到我们 不需要一个主这里, 因为Python的开始 执行在顶部。 如果我想换行 这在一个功能,我 会做它像this--我 会说DEF函数名, 参数可能会去在这里,我们将 看到其中的一些后,结肠, 然后再次,这 整个掀起块 是什么操作 阻止该功能。 因此,这是定义 的功能。 还有的声明,再向下 在这里,我可以调用该函数。 再次,程序 解释器,从顶部开始, 可以看到,这是定义。 它不会执行此,直到它 到这里,然后就好像哦 现在你已经把它称为,我 想我应该执行它。 一个东西,这是很常见 看到Python文件, 尤其是Python的文件 被释放到公共 并制定by--和发展, 维护,是值得的这种形式。 这是basically--是因为 Python中,您从顶部开始 然后执行下到谷底, 我如果我只是叫马里奥在这里, 那么任何时候我包括在此文件 另一个文件,因为我想用 马里奥功能,其他的文件将 也有这样的呼吁马里奥在里面。 而当我跑这个文件, 它会叫马里奥。 因此,这可能是我唯一 想,如果我实际上已经运行此 执行这个特定的文件。 所以,我可以在包装这个 成语就是这样,在那里我说, 如果这个执行的名称 环境是主要的, 然后,我想要做的这些事情。 否则,别人可以 use--包括我function-- 我的文件,只是为了让 访问这些功能 而不必运行的事 我想在这个文件来执行。 这是,再次,可选 但很常见的。 这些东西是entirely--是 正是C和Python中的一样, 当然是在3。 我认为在2,除法运算符 有时会给你回来时,浮动 你操作的整数,要么和 你想要的或者你没有。 但是,加,减,和时间 工作完全像你期望的那样, 除外在稍微类型。 所以,你可以乘花车 整数,而那些各种各样的事情。 套作品完全一样。 您可以使用两个等号。 inequals--大于,小于 比,这类things--的 的含义是 你熟悉他们。 其中C使用这些操作符, Python使用稍微英语 可读的。 因此,而不是两个,&符号,你 从字面上键入单词“和”,“或”, 或不。” 就像在你的if--您 条件语句, 我们在前面看到的,这个语法在C中 对应于这种语法在Python。 还有的不是一个很大的不同 除了一点点,有 左右两侧的标点符号。 此外,其中C将别人 如果,Python使用ELIF, 但这些大多是 表面水平的变化。 迭代像这往往是 写在这个成语在Python。 您可以制造这样的 在外面while循环的事情 如果你想,但你 当然不必。 再次,如果你想要的 打印出的数组元素 你可以这样来做。 一个有趣的事情 有关Python不过, 是,你不需要 使用这种模式, 你可以使用一个 稍微更优雅之一。 你说的在元。 因此,而不是要在这里 并运行在指数, 然后拉出 单个元素, 你告诉了实际只 碾过元素本身。 然后,无论你做什么 内可以直接操作 的元素,这是非常有趣的。 我们将see--我们将使用 一次又一次的成语 当我们通过代码走。 这是,再次,一个例子 的东西,我会 调用Python魔术,虽然有 非常技术性的原因,它的工作原理。 而且有技术的东西, 需要是真实的有关数组为了 这个工作在幕后。 问题是,大多数类型 你会期望这个工作 有过这样的实施了 你在内置的语言。 另一件事,这将是很好 如果曾在每一种语言, 但也有一些原因,它不能, 打印此字符串此次数。 其实Python,这不正是 你想什么,这只是好玩, 而意味着我们实际上可以 减少这种程序,再次mario.c。 而不是迭代了很多,我们可以 只是说,我想要的空间一定数目, 我想哈希的数量, 和一些散列底。 再次,我们使用这种格式。 在这里,我们正在传递 一个变量这种方式。 再次,我们并不需要说 什么类型的变量是的, 和唯一的一次,我们将 得到的错误是在运行时。 当有人试图 传递东西, 它会来到这个功能就好了。 如果我们在这里楔因为这不是 您可以创建范围过的事情, 我会得到一个运行时的错误, 我得这种方式进行调试。 但在此期间,我没有 要非常小心什么 被传递在,只要在实际 执行这一切工作非常干净。 我甚至可以使这 一点点清洁 使用特定内置函数 对字符串,它是右对齐。 这仅仅是一个有用的功能 躺在身边的图书馆。 这是在文档中 如果你去寻找它。 我说,好,我马上要开 这串,散列一些号, 我想右对齐它 - 垫 它与空间是这个长度。 再次,这是在 文档,这使us-- 我居然通过点击these-- 这给我们带来了我们的第二条规则 对于Python--标准库 功能的方法是你的朋友。 而它往往是值得的 去寻找我不知道 如果有,只是做这样的事。 有可能是。 如果您想垫 一个字符串,如果你愿意 喜欢拿回来 半字符串,如果你愿意 想通过要搜索的字符串,如果 你想砸几件事情 有串起来 与他们之间的逗号, 有标准库 功能这样做。 它使你的生活 如果你使用他们更容易 而不是推出 一切都要靠自己 在五行代码在这里, 五行代码在这里。 这确实开始于 加起来实时。 一个有趣的事情 关于如何被调用。 你会发现,有一个点的事情。 我对留下一些对象, 然后我打电话给一个点的功能。 这是Python的一种范式 使用用于安装的方法为对象。 我们会谈论这个 很简单地底, 但要知道,我们既可以操作的 事情采取那件事说点 不管,或致电 一个函数,它接受 该对象和其他一些参数。 因此,这些都是方式 得到的东西在Python中完成。 而无论特定 功能实现 在这种风格或本 风格是什么,你 应该寻找,直到你得到一个挂 而且一个很容易掉进去。 有一个或多或少凝聚力 背后的Python理念 你吸收大部分 在它写了很多。 在某些时候,对这些哪一个 东西将被实施为 变得自然。 现在,这只是一些 你学习,你搞清楚 每一个人的事。 因此,标准库 函数是你的朋友, 他们让你写的东西, 占用这么多的空间真的很快, 真正优雅。 这实际上可能更 清晰的,我会说,比C程序 在那边。 更何况是这样一个事实 总之,你能适应整体的大象 在太空,我们已经得救了。 另一件事,这是一个实现 马里奥的这点C,我认为 是最短的,你可以得到它。 它不具有的get整型,但 它硬码10的值 相同的方式,这个人能。 原来,在这一个时钟 84个字符,而Python是64。 这是无限多 读比这个垃圾在这里。 所以Python是在太空中更有效。 这是稍微低效率 在时间,但不是很大。 列表是Python中一个重要的事情。 我们还没有看到他们,但他们 操作很像数组做C. 所以在这里,你可以声明它们, 你可以将它们传递到一件事。 现在广场モ 阵列的这些事情。 此外,我们还没有声明 类型,但是如果我们尝试使用它, 什么,你希望 整数数组上工作 是去工作在 整数数组。 这是一个东西 你绝对不能 做C,因为 记忆是如此的手, 但很容易做到在Python。 如果我想我的数组要大一些,我可以 追加一个元素,它和它的罚款。 这是怎么回事幕后? 解释器会去 出来,并得到一些内存, 也许它会得到一个 额外的内存点点, 所以我没有,所以我没有 以realloc的每一次。 但多少有更多的 内存它需要? 这不是决定 你必须做, 这些都决定了 解释是要干什么。 在这里,我们看到的范围 两个参数, 但它仍然将是包容性 顶部,所以我们增加1那里。 这是一个成语,这是一个更 聪明的方式来写这样的事情。 这就是所谓的名单理解, 在这里我们在说什么 是我想放在我的平方 对i在此范围内的每个值。 这件事情在右边可能是另一种 数组,这个东西在左边 要任何特定的功能 这将需要在我作为一个变量 并给我出了一些成绩。 我什么都做的是, 我要去构建 一个数组的所有这些事情 在此范围内的每个值。 这是超级优雅,超级短线, 它很清楚这意味着什么。 这是一个 things--这是再次, 1 of--非常象征性的 原因是人们喜欢的Python。 如果你喜欢编程 像这样,那么Python 是一个你可能会喜欢学习语言。 再次,有技术 原因这工作。 但就我们而言, 我们或多或少也不在乎。 所以,如果你想打印出清单, 一些相同的成语是有用的。 因为我在这个范围内,我们可以 通过所有的东西指数 然后全部打印出来。 你会看到这里len个。 如果你曾经想要得到 该阵列的长度,这是 很容易在Python中, 它很难在C. 这将打印出完全 你想它期望。 我们也可以,因为我们已经看见, 遍历数组中的元素 直接,然后只谈 它们,而不是具有索引 回每次阵列。 而这是你可以做的事情。 因此,在C,如果你问的东西 这样,打印会说, 这是一个整数数组。 这绝对不是一个 字符串,我不能打印。 Python的或多或少的不关心。 这就像,是有办法,我 可以把这个在一个字符串? 是的,我会的。 所以我就打印了这一点。 这意味着你可以 做事like--这些 最困难的部分的 游戏十五,写 很简单的Python编写的。 你会看到有 of--在这里一点点 我投一个整数为字符串, 我必须这样做手工。 而且我要补充 它另一个字符串, 或Python的迷糊。 但是,无论当你 添加一个字符串的整数, 我是想获得一个 整数后面或字符串回来? 但同样,如果你只是 呼吁海峡上的事情, 故能在任何可能的 世界被转换成字符串, 它可能是 转换成一个字符串。 在这里,我们看到了使用 嵌套列表理解 在左侧,一些索引,其中 正是因为你可以使用它, 还有一些打印出来的东西。 同样,我们定义了一些 功能,我们会打电话给他们失望 主当我们真正得到的文件。 返回的工作原理完全像你 从与C.找工作的期望, 我们可以建立像 this--这里的列表理解 有一个赋值给一个变量, 我们可以真正做到这一点更容易。 我们并不需要写搜索, 因为内置于语言 是,如果这件事情是在这个数组。 返回true,否则返回false。 所以这是发现的全部内容。 排序的全部 需要调用排序, 这is--有实现 这种内置到一定的C库。 如果您想这个 那种倒退,你 可以忽略此可选 参数反向用真。 如果你想通过排序 串,这是内置式为好。 因此,这不是说这些都是 你需要每天做的事情, 但这个想法是,这 是Python的理念, 所有这些事情,你会 那种想要做的是内置。 而最标准的功能, 这样的排序,长度,不管, 支持最明智的逻辑输入。 调用len阵列相同的 调用len在字符串的方式。 你multiply--你整理串 同样的方式,你数组进行排序。 大多数标准功能 人们打造, 和大多数第三方 库人 建设,因为他们模仿 标准库的设计, 可以被称为上你的一切 喜欢,为什么不这样刚工作, 在C或多或少, 它将工作在Python 因为人的工作背后的数字 什么事是再操作 适当就可以了。 如此反复,技术背景,但它 使我们的生活更方便程序员。 因此,这里的文件I / O。文件I / O有很多 小东西,使之复杂, 所以有资源 在网上,但简而言之, 调用打开一个文件 命名与特定类型。 这就是阅读,阅读和 写,写或追加。 你读了一定数量的 人物出来,你打印的, 你会得到你好! 我的意思是,像这样的文件有你好! 在这里面,叫阅读, 你会得到什么回来 是具有所有的字符串 所述阵列的其余部分的, 或所有文件的其余部分的。 如果你打电话再次读取, 你在该文件的末尾, 所以你没有得到 什么,所以你会关闭。 再次,这是.close而非 关闭文件,因为这将是C. 这是多还是少,因为f是一个 的事情,你想在f关闭。 但是基本的文件I / O是不 特别复杂。 同样,如果你想打开一个文件, 你想读一个特定的行, 你可以摆脱特定的 line--有内建了点。 如果你想写一个 首先,你可以写这个。 如果你想写出个人 叮咬,你可以写这些。 如果你想迭代 在一个文件的行 独立,因为我们从一块做 几个星期前,你可以做到这一点到。 同样,大多数对象,你会 希望能够遍历 支持循环访问它们。 在蟒蛇,文件也许是一个东西, 我想用线来遍历行。 如果它是一本字典 字和我 试图让这些个人 话说出来,那么,在这个循环中, 行这将是 反过来,这每一个字 将会为每行要执行 在该文件,直到该文件的结束。 再次,如果我打印出每个 线,线配备了新的生产线, 所以我设置结束 回这样的事情。 然后,我会得到我的文件的内容。 它工作在第二件事 某些方面如列表,并在某些方面 作为东西基本上 功能更强大, 有字典,这是真的 酷使用,但基本上都是乱码 表的化身。 您创建一个使用完全相同 两个字符,这是真棒 如果你试图实现 哈希表您的问题集, 你知道多少痛苦,可以。 但是,人们已经做 它,做的这么好, 你不必 担心它了。 然后,你可以插入个性的东西。 哈希tables--或词典 不特别 关心你存储在其中的内容。 因此,如果某些条目数, 有的条目列表, 如果一些条目其他字典, 有的作品是字符串, Python不很在意。 同样,如果你进入它期待 一个字符串,你会得到什么 是一个数组,那是你的问题。 也许这是错的谁 以为是放的东西 在字典中,也许这是你。 如果是一个人 否则,希望他们 很乖什么 打算在字典 并没有留下任何的缺陷 让你掉进去。 但标准的功能将 给你回乖巧的事情。 因此,他们说这个回报 背串的字典, 那么一切你会 摆脱是一个字符串。 如果你做一些这方面和跳闸 你,好了,这可能是你。 Python的肯定给你足够 吊死自己的绳子,如果你愿意的话。 现在我们就可以打印出个人 这个元素,这回报 正是你所期望。 正是你所期望的,我想, 是,我使用了很多的一句话, 但是这更多的还是 更少的Python是如何工作的。 如果你问一个东西是不是 它,Python会抛出一个错误 它会退出你出 你在任何程序。 它会实际打印出来 比更多信息, 它会指出你 - 它会 添加一行,等等。 并再次,也许我们要 遍历字典 并找到所有的东西在里面。 在这里,我们遍历 两件事情在同一时间。 因此,我们会用一个键,值做到这一点, 但随后打印出所有这些。 如果我们想cast-- 如果我们真的跑了这一点, 我们将有一些麻烦,因为 on--当我们去与大卫, 如果我们这样做不是不可能add-- 它转换为字符串第一, 我们无法添加该数组 串上的字符串。 但是,如果我们投它一 字符串,我们得到的东西 像这样的,这也许是 我们希望阅读。 这是拼写检查。 我们只是读的东西。 因此,我们可以读到 个别字为线条。 我们砍掉最后 的事情,所以结肠癌减1 关闭要吃掉了we--的最后一件事 字符串的最后一个字符。 我们会说。 好了,这些中的每一个得到 插入到这本词典, 映射到值1。 我们不特别 在乎那一个, 但它只是在那里说,哦, 这件事情我会在字典中。 因为后来我们是 要做的是我们 会说,好吧,如果是 在字典中的。 同样,这种检查 会员已启动运营 使用完全不同的 算法相比它将在一个列表中, 但我们把它以同样的方式,这 是一些Python的糖衣的 事情使他们更容易使用。 再次,我们已经看到了 以前这样的事情。 这基本上是找到,或 它是完全一样的语法 为找到,但操作过一个 完全不同的结构。 同时,我们也没有特别在意。 因此,这些都是东西,你 被要求实施的拼写。 以这样的速度,我们将得到 或多或少都做过pset时的。 听众:所以这 基本上只是回来 如果它不为拼写错误 匹配的东西在字典? ROSS RHEINGANS-YOO:是的,是的。 因此,这是一 一问题的适配设置 这要求你这样做。 听众:为什么行减1呢? ROSS RHEINGANS-YOO:所以 当你迭代 在一个文件要求 由线,这些线 配备了一个新的行字符 在它 - 负1的端 仅仅是这些店关闭。 而这是一个特别灵活 索引到的东西的方式。 所以,如果你有一个字符串, 你想,还有我 要开始在字符的三位 我要去到最后。 3结肠会为你做的。 如果你喜欢,我要开始在 开始,进入到最后减1 字符,冒号减1。 如果你想从去 第三要负第一, 那么你会说3减1。 此外,如果你想索引 到东西从后面算起, 你只指数与负号。 而且,因为其中C 会爆炸或者 喂,你其他的内存,你没有 访问,听到你可以说减1 意味着最后一个但1 字符的字符串。 模块是version--是 类似物在C库 而对于很多有用的东西。 很多事情,你会 喜欢做在Python, 除了简单 操纵变量, 要挂钩到 较大的大库 接口多 对于交互功能 与世界其他地区。 SYS是其中之一 与一群工具 这是对交互有用 与系统本身 并将其导入像进口SYS。 还有来自更多文档 是,你可以去这里, 或者你可以找到关于谷歌 通过谷歌搜索的Python SYS。 您键入进入。 第一连杆将是 在Python 2的文件, 第二连杆是要 是文档的Python 3。 如果我们写出来,看上去一个文件 像this--如果特别,我们 看着上运行 命令行参数, 像我们学会了做的很 早在这个类。 这并不难。 你可以出去的argv, 这是其中的一件事情 这是由SYS实现。 它没有内置到 基础包,但同样,你 可以通过导入扩展它 从SYS该功能。 你会SYS调用它。 随你。 这里还有argv的。 实际上有没有 ARGC在sys,因为你 可以通过调用LEN得到它那么容易。 然后,我们印制了这一点,那么我们 跑在我们的终端echo-args.py。 我们回到一个数组, 这是第一个参数。 再次,这是的argv 0,这是 那得到了所谓的东西的名称。 如果我们有更多的把它称为 参数,我们会得到那些回来。 这是获得的一种方式 命令行参数。 如果你想,你把国旗 或覆盖特定的事 一个特定的默认情况下, argparse是你的朋友。 而你又发现,在网上 在蟒蛇argparse在谷歌。 有几个实用的 你发现自己使用的模块 并再次,如果你花任何时间 这种语言的进口jsons 读取进出的JSON 文件,没有那么复杂。 你打开一个文件,你就叫json.load 在该文件和你回来的事。 那是什么东西? 这是一个JSON对象。 如果这一JSON有数组, 在Python有数组。 如果这一JSON有 关联数组,Python的 字典,字符串, 和数字,等等。 你想甩了出来,你 打开一个新的文件,你叫转储, 和负载和转储 进出的字符串。 同样,泡菜被称为 在基本相同的接口。 这是如果稍微更有用 你倾倒Python对象。 所以,如果你曾经想救 一个版本的当前状态 为未来的一个可变的 你的程序的运行, 泡菜是Python的 库这样做。 如果您有任何形式的 可写入出可变 像文字和字符, bytes--像这样的字典, 我们可以写下来,我们 可以把它写下来作为 就像一个JSON对象,这是 从字面上这些字符。 然后它会很容易 一个人打开它up--开放 阅读它。 如果我们没有特别 关心人读它, 我们可以更有效地包装,甚至 成可稍后被解压形式 或可稍后被夸大。 这可以节省80%的 空间,你的对象可能 如果需要你写出来速记。 你叫咸菜很 相同的方式 - 转储,装载 然后你会得到你的东西回来。 所以,如果你正在写很 简短的Python程序 要保存状态,然后再阅读 他们回来后,像这样的事情 是你的朋友。 你可以很 轻松地将它们倾倒的JSON。 大多数Python对象 可以转储出JSON 如果有任何希望,在结构 它们可以表示这种方式。 这些都是只不过是冰山一角 冰山上模块是有用的。 因此,SYS,操作系统,多,是 排序基本广为使用的东西 我们需要与之交互 文件系统OS, 像os.isfile,os.isdirectory, os.makefile,这些都是你的朋友。 如果你想互动 与特定文件类型, JSON,咸菜,CSV格式。 如果您想与网络交互 页面,由urllib获取HTTP 页面。 bs4-- BeautifulSoup-- 这是一个美妙的解析器的HTML。 你在一个HTML和你运行它 现在得到这个嵌套数组对象, 你可以穿越过 眼含,与像只是寻找 如果是在,这太棒了。 有一堆 包running-- 做特别mathy的事情。 所以,如果你想乘, 反转,变换矩阵, numpy的是使用的人所有 在世界各地的这一点。 SciPy的是更加有用 在这个方向的工具。 sklearn--机器学习, 自然语言处理, 超级有用的东西,得到 用Python实现所有的时间。 再次,需要稍 更长的时间来写 - 对不起, 需要稍长运行,但 真正的工程师倾向于理由 使用Python是因为你往往会 阻止你写的代码,而 比你的计算机上运行的代码。 所以,如果你打算写一 程序,这是许多其他人 要使用 永远的,如Linux,你 可以写成的。如果你是 打算写一个计算引擎, 你可能会在Python,如果你需要写 改变它每隔几个月。 有些人会写在 C,因为他们是这样的。 因此,我们已经看到了进口SYS 为把事情的一种方式 对越来越模块到程序中。 你也可以将其导入为 一个昵称,如果你愿意的话。 此外多是痛苦的 每次都打出来,所以导入为MP 然后,任何时候你 用它在程序中, 你会说mp.process,或你有什么。 如果你想导入 只有一个单一的东西, 这样的urllib有一个东西叫 的要求,因此你可以导入。 后来,你就不会调用它作为 urllib.request里,但正如请求 通过它自己。 你可以导入所有 从模块,如果你愿意的话。 这是偶尔不是一个好idea-- 这通常不是个好主意,实际上。 因为你very--因为如果什么 在该模块有一个名字,你 想用别的地方 在你的程序中,你不能。 而且它并不总是明显 这是这种情况。 为了确保 你在做什么是安全的, 您需要打开 该模块并浏览所有 这最终在名字 那里 - 所有的功能, 所有的变量 住在该模块, 因为你把所有的 他们到当地的命名空间。 所以有人这样做。 通常建议 你不这样做。 但是,人们做了这一切 的时间,因为他们 懒惰,不想打字了MP。 任何事情,永远。 所有这一切都谈模块 带我到处短暂交谈 你如何设计程序在Python。 第一个步骤是检查,看 别人已经做过的东西, 或做90%的事情。 机会是他们可能有,而你 应该去得到他们的事情和运行。 或者写它周围的包装 以使其适应你的目的。 这是唯一有后 失败,你会再 去和写 - 开始考虑 你将如何把这个事情做好。 有很多东西 在那里,这就是 的一个最有用的 事情有关Python。 像语言 优雅,语言 很容易使用,而且还因为 它是如此的优雅,易于使用, 人们一直在使用它了 时间长,有很多东西 在那里,你可以 利用供自己使用。 所以Python的最后一条规则是,有人 其他人已经大概写 为一个模块, 别人已经拥有 大概写了一个库的。 在尝试做的事情,看看 看它是否得到落实。 这并不难。 所有我竖起模块 之前,有可能是一个例外, 预装在每 标准的Python安装。 所以,通过调用 导入什么,你 拥有所有这些功能 在您的指尖。 开始结束这一 谈话中,有几件事情 我已经离开了黑盒 和那种掩饰, 并有一些善意的谎言,我已经 告诉记者,为了诚实的, 我至少会点 在这里,即使我不会 去超深入到所有的人 和它们的技术说明。 很多的东西 我已经堪称神奇 是别人会叫 面向对象编程。 因此,有很多things--的 所以变量往往不 简单的字节坐, 存储器,但是非常复杂的 有内部对象 国家有关职能和大量的 隐藏的变数,很多 隐藏的功能,这 让你把它们变成字符串, 它可以让你在它们之间迭代。 如果你正在writing-- 其原因,他们 拥有所有这些丰富的功能 是因为people-- 的建筑师 language--已经 通过和每一个标准 对象,放在功能 说这是怎么了,这是 这是怎么回事操作 如果有人想迭代它。 所以一切有人可能 可能要遍历, 已逻辑写在 手动你怎么是 应该遍历该对象。 一切,你有可能会希望 倾入一个字符串有逻辑写入。 这是,如果你调用该函数 你想甩了这一点,为一个字符串。 这就是为什么你可以 调用len的事情,这 所以,你可以拨打电话进行的,这是 为什么你可以调用如果一切 你会想,因为 这些都背着他们, 技术知识,如何做到这一点。 这是我的东西 超不打算进入。 但对于事情的名单是微妙 从for循环C形式不同, 你可以阅读所有关于上 互联网,如果你有兴趣。 有黑暗的一面全部 这一点,我提到, 所以有两件事情。 第一,此面向对象的 节目增加了大量的开销 随机的东西,所以你最终 使用起来更大量的内存; 你最终使用多一点 时间比你,否则。 该other--但更 阴险黑暗的一面,以这种 是,如果事情只是行动 就像你希望他们 无需你觉得超级难 是否这应该是一个int 或是否应该有一个 浮动,这也许是因为在这里 你生产一个int,但在这里你 的看法,但他们会always--抱歉, 它可能是这里 你产生浮动, 但是当你到了第二部分 你的程序,你在想, 哦,好吧,但他们会 总是递给我一个int。 如果他们不这样做,这是可能的 你的地方楔形, 如果您尝试使用该索引 到一个数组,或你有什么。 这样的真正的一 有用的东西关于C是 它迫使你想真的 你让any--硬之前, 你把任何变量之前 进入存在,像什么 是该变量的类型。 而这将有 该类型所有的时间。 这不是真的 Python的,而事实上,你 can--如果你只是 那种去用耳朵, 你做出一些决定 单程在一个地方, 有些决策之一 在其他地方的方式 没有把足够的东西背后 在其他地方的场景 赶上正确的事情,你 可以得到一些非常奇怪的错误。 而该程序可以继续运行 很长一段时间,因为它是 做了很多工作,说,好 这个东西可以这样操作, 所以我要运行的方式。 而事实上,事实上,它推 转发通过大量的小错误 也就是说,往往当 错误实际上是坏 而你真的想解决这个问题, 它最终英里away--程序 最终停止英里远 从什么时候你有你的错误。 而这么一件事,我们希望 项目办,sometimes--一件事 我们想计划 当我们正在调试做 是失败大声失败很 很快出问题的时候。 Python是非常糟糕的那个。 Python是非常善于不 失败和滚滚向前 通过意想不到的事情。 因此,这是因为当用 你写的小程序。 当你变得复杂 错误有时 需要很长的时间来逗他们。 因此,有黑暗的一面是对所有 这一点,像它只是工作。 这只是工作就像你希望它。 不同之处在于,当它不,你结束 在一个完全不同的地方 并试图找出其中 这是你出了问题。 垃圾收集is--所以 一件事,你会发现 是任何这些东西,那 我带入existence-- 这些阵列,这些词典,这些 对象,这些files--永远不会被释放。 有没有电话 自由在任何这种谈话。 这是在C面,由于 我们从来没有为这些事情。 但是在Python端,没有自由。 事情自动获得 释放时的Python 认为你不看着他们。 这真是好不释放的东西, 你可能仍然有可能在看, 但是,这意味着如果你 去分配这个大的事情, 和你喜欢的哦 我用它做了, 这是很难说的Python ,你用它现在做的。 有时你可以设置 该变量是无, 然后希望最终 垃圾收集器 谈到通过,并清除它。 但同样,你不 有超过对照。 而原因之一,人们用C 对于真正的性能是至关重要的事情, 这种能力真的 知道什么时候分配内存 并且当它的释放,并有 很多控制权说, 我使用的是没有更多的内存比我更需要。 这恐怕是 Python是不是很大的。 听众:我能问你一个问题吗? 那你的意思是不能大声? ROSS RHEINGANS-YOO:所以,如果 什么地方出了错 和你在调试 模式下,你会很经常 希望你的程序告诉你 哪儿它出了问题, 不只是静静地停止运行。 但你实际上它打印 出各种有关 喜欢,这里是这样的。 这种事情发生。如果你要打印 如果你正在运行一个Web server--一个wen-- 听众:[听不清] ROSS RHEINGANS-YOO:是的,如果 您正在运行一个Web服务器, 它有时坏,如果你 总是丢弃错误, 和你说, 也没有工作。 我要停下来。 我只是忽视 并继续进行下去。 因为这样你可以在得到数百 这些错误,并没有看到他们。 这无疑是有益的 用于调试 如果每次你的Web服务器中进行的 错误,你有那持久的记录。 也许你甚至想要的程序 停下来,让那些记录 不要让她被埋在的东西。 但同样,这是在调试模式。 常在生产模式中, 世界是一个有点不同。 而在我参加竞选的小脚本, 那里的东西,我说的做 可能只是一点点关闭 从我希望它做的事, 然后进行排序,通过推动 错误的东西,你可能想。 在这些情况下,当然 Python的真正赢得它的开始。 最后一件事,我不说话 在this--,我没有谈 但可真是气死第一 时间你有这些错误之一, 和第二以及第三和第四 时间,你有一个这些错误。 Python中,我提到 它使用空白 告诉你缩进了什么水平 而你在什么功能模块, 它把制表符和空格不同。 所以,如果你卡在四个,然后 下一行有四个空格, 即使它们出现为 同样数量的编辑器, Python不把他们一样。 事实上,巨蟒把标签 而像油和水的空间。 他们只是不同的事情。 没有特别的 长度一个选项卡, 所以它不是像一个标签等于8 空间,所以你会避开它 那样。 像,当它说什么 白色的空间我在的水平, 它实际上是在寻找一个 空格和制表符的图案。 所以,最好的办法来处理这​​个 是要始终使用空格所有的时间。 而事实上,在Cloud9 IDE和CS50 IDE, 你的Tab键插入 四个空格代替中 的标签,这是超级有用。 虽然再次,如果你写了一个Python 计划与标签,就可以了, 它只是如果有人 走进去,尝试添加 一行到你的程序, 有四个空格为每一个选项卡, 这将打破。 而这将在某种程度上打破 这确实是不可见的。 尽管实际的错误 消息,它抛出 必须与新 缩进这里没有预料, or--如果在谈论缩进 它看起来像它是错的, 这可能是因为 有一个制表空间的问题。 他们还在真气调试。 在最大的全 这次谈话,我没有 得到,因为它是真的 一个复杂的,微妙的话题, 并没有必要做任何 我们到目前为止所做过的事, 有一个叫做元组的概念。 他们在那里很像 阵列,你不能修改。 他们习惯遍布因为地方 它们是有用的很多东西 该数组是不是有用。 但是,如果你想使一个数组, 那么承诺的解释,你 永远不会想修改 件事 - 事实上,如果要修改, 你会是一个新的与新 在它 - 这些值的元组。 而不是产生 他们用方括号, 你生产他们圆括号。 为什么你会用这些东西, 是的问题一点点。 。 唯一的事情,我会 说的就是你 可以使用元组作为 指数词典。 不能使用数组作为 指数词典。 为什么是,再次,技术和 我不会跑进去。 我还没有触及处理器集 在这次谈话是pset6。 因此,这里是你如何倒是 实施A--这里 你会如何​​在Python实现pset6。 同时要注意的Python 设计周期,第一件事 当你说你做 写程序是检查 看是否有人的已经做了。 事实上,如果你想 以serve--阿帕奇50 大约做这个, 但它不来 安装在Linux机器上的标准。 Python做,并且是在Python 简单的HTTP服务器确实也是如此。 如果你曾经在Linux机器上, 或CS50的Cloud9 IDE外部 你想成为这个电流 目录以一个特定的端口, 蟒蛇米SimpleHTTPServer 端口提供的。 您也可以导入 简单的http服务器 而且它有很多的功能,如果 要自定义它,或改变它, 或者运行它 - 利用它来 运行自己的服务器服务。 所以这是Python的概括地说。 而这一直是CS50。 谢谢。